<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="../../../../../css/rss/feedRss1.xsl" media="screen" type="text/xsl"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/">  
  <channel rdf:about="http://pluto-blog.blog.so-net.ne.jp/"> 
    <title>なまはげ カンタービレ</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/</link>  
    <description>歌うように悪い子を探す</description>  
    <items> 
      <rdf:Seq> 
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2009-01-02"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-10-09"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-10-08"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-09-24-1"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-09-24"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-09-09"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-05-16"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-05-15"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-05-04"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-05-02"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-04-27"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-04-17"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-04-06"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-03-30"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-01-17"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-01-15-1"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-01-15"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-01-14-2"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-01-14-1"/>  
        <rdf:li rdf:resource="http://pluto-blog.blog.so-net.ne.jp/2007-01-14-3"/> 
      </rdf:Seq> 
    </items>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2009-01-02T11:55:38+09:00</dc:date>  
    <dc:language>ja</dc:language>  
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="self" href="http://rss.rssad.jp/rss/sonetrss/000203868667_index.rdf" type="application/rss+xml"/>
  </channel>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2009-01-02"> 
    <title>液晶テレビ購入検討メモ</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2009-01-02</link>  
    <description><![CDATA[<p>液晶テレビの購入検討のメモ。予算：２０万円必須事項：フルHD、37V型以上、倍速対応、ゲームモード搭載（遅延３フレ以内）主な用途：スポーツ観戦（主にサッカー）、ゲーム（PS3、Wii）、映画鑑賞フルHDで37V型以上なのは今後を考えて。まぁ初めは32HDでもいいかなぁって思ったけど、結婚している友達から嫁の説得が大変だから独身の間に良いモノを買っとけと、アドバイスされフルHDの37V型以上に変更。予算も１５万→２０万に増額。スポーツ（主にサッカー）を良く観るので倍速は必須、ゲームもよくやるのでゲームモードも必要で、調べたらゲームでの遅延はフレームで表され４フレを超えると辛いとの事なので３フレ以内で。これらを考慮した上で導き出した候補が以下の３機種。・BRAVIA KDL-40X1(SONY) → 以下、X1　http://bbs.kakaku.com/bbs/20416011023/・REGZA 37Z7000(東芝) → 以下、Z7000　http://kakaku.com/item/20417011039/・AQUOS LC-37DS5(SHARP) → 以下、DS5　http://bbs.kakaku.com/bbs/20415010951/◆価格DS5(14万) ＞ Z7000(15万) ＞＞ X1(22万)価格はビックカメラ価格(2008/12末時点)。X1がやや予算オーバーだけど、交渉次第で20万以内にはなりそう。◆機能Z7000 ＞ X1 ＞＞ DS5機能は外付けHDDに録画できる事もあってZ7000が一つ抜けている。DS5は2画面表示、アクトビラに非対応って事でやや劣る感じ。◆画質（スペック）X1 ＞＞ DS5 ＝ Z7000カタログスペック的には甲乙つけがたしな感じ。ネットでの口コミでは、「X1 ＞ DS5 ＞ Z7000」だけど自分が見た感じだとDS5とZ7000に明確な差は無いように見えた。実際に自分で見た感じとしてはX1が一つ抜けてる感じ。ただネットの口コミは極論が多いので、自分で見た印象を重視してこの順番で。◆音質X1 ＞＝ DS5 ＝ Z7000口コミ見る限りはどれも等しく微妙らしいｗ店頭じゃ判断つかないし、カタログ的にスピーカーが１つ多いX1が優先ということで。◆対ゲームX1 ＝ DS5 ＞＞ Z7000これもネット調べだけど、X1とDS5が遅延2フレで液晶の中でもトップクラスの優秀..</p>]]></description>  
    <dc:subject>家電</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2009-01-02T11:55:38+09:00</dc:date>  
    <content:encoded><![CDATA[
液晶テレビの購入検討のメモ。<br />
<br />
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E4%BA%88%E7%AE%97&ic=utf8" class="affiliate-link" target="_blank">予算</a>：２０万円<br />
必須事項：フルHD、37V型以上、倍速対応、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B2%E3%83%BC%E3%83%A0&ic=utf8" class="affiliate-link" target="_blank">ゲーム</a>モード搭載（遅延３フレ以内）<br />
主な用途：スポーツ観戦（主に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">サッカー</a>）、ゲーム（PS3、Wii）、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E6%98%A0%E7%94%BB&ic=utf8" class="affiliate-link" target="_blank">映画</a>鑑賞<br />
<br />
フルHDで37V型以上なのは今後を考えて。<br />
まぁ初めは32HDでもいいかなぁって思ったけど、<br />
結婚している友達から嫁の説得が大変だから独身の間に良いモノを買っとけ<br />
と、アドバイスされフルHDの37V型以上に変更。予算も１５万→２０万に増額。<br />
<br />
スポーツ（主にサッカー）を良く観るので倍速は必須、<br />
ゲームもよくやるのでゲームモードも必要で、<br />
調べたらゲームでの遅延は<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0&ic=utf8" class="affiliate-link" target="_blank">フレーム</a>で表され４フレを超えると辛いとの事なので３フレ以内で。<br />
<br />
これらを考慮した上で導き出した候補が以下の３機種。<br />
<br />
・BRAVIA KDL-40X1(<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=SONY&ic=utf8" class="affiliate-link" target="_blank">SONY</a>) → 以下、X1<br />
　<a href="http://bbs.kakaku.com/bbs/20416011023/" target="_blank">http://bbs.kakaku.com/bbs/20416011023/</a><br />
・REGZA 37Z7000(東芝) → 以下、Z7000<br />
　<a href="http://kakaku.com/item/20417011039/" target="_blank">http://kakaku.com/item/20417011039/</a><br />
・AQUOS LC-37DS5(SHARP) → 以下、DS5<br />
　<a href="http://bbs.kakaku.com/bbs/20415010951/" target="_blank">http://bbs.kakaku.com/bbs/20415010951/</a><br />
<br />
◆価格<br />
DS5(14万) ＞ Z7000(15万) ＞＞ X1(22万)<br />
価格はビックカメラ価格(2008/12末時点)。<br />
X1がやや予算オーバーだけど、交渉次第で20万以内にはなりそう。<br />
<br />
◆機能<br />
Z7000 ＞ X1 ＞＞ DS5<br />
機能は<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E5%A4%96%E4%BB%98%E3%81%91HDD&ic=utf8" class="affiliate-link" target="_blank">外付けHDD</a>に録画できる事もあってZ7000が一つ抜けている。<br />
DS5は2画面表示、アクトビラに非対応って事でやや劣る感じ。<br />
<br />
◆画質（スペック）<br />
X1 ＞＞ DS5 ＝ Z7000<br />
カタログスペック的には甲乙つけがたしな感じ。<br />
ネットでの<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E5%8F%A3%E3%82%B3%E3%83%9F&ic=utf8" class="affiliate-link" target="_blank">口コミ</a>では、「X1 ＞ DS5 ＞ Z7000」だけど<br />
自分が見た感じだとDS5とZ7000に明確な差は無いように見えた。<br />
実際に自分で見た感じとしてはX1が一つ抜けてる感じ。<br />
ただネットの口コミは極論が多いので、自分で見た印象を重視してこの順番で。<br />
<br />
◆音質<br />
X1 ＞＝ DS5 ＝ Z7000<br />
口コミ見る限りはどれも等しく微妙らしいｗ<br />
店頭じゃ判断つかないし、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%AB%E3%82%BF%E3%83%AD%E3%82%B0&ic=utf8" class="affiliate-link" target="_blank">カタログ</a>的に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">スピーカー</a>が１つ多いX1が優先ということで。<br />
<br />
◆対ゲーム<br />
X1 ＝ DS5 ＞＞ Z7000<br />
これもネット調べだけど、X1とDS5が遅延2フレで液晶の中でもトップクラスの優秀さらしい。<br />
Z7000も3フレでなかなか優秀らしい。ただ、Z7000だけ情報(報告)が少なく真偽が怪しいかも。<br />
<br />
◆気になるネタ<br />
・Z7000の外付けHDDで録画した番組は、録画したZ7000でしか観れない<br />
・DS5、Z7000とも底値は打って価格は上昇中（ピーク時はさらに2万くらい安かった）<br />
　→X1は現在の価格で安定？<br />
・各メーカーとも減産傾向で、今後は価格の暴落は期待できない<br />
　→というか各メーカーとも液晶テレビは赤字らしい<br />
<br />
◆気になるネタ２（真偽不明、自己責任で）<br />
・販売奨励金はSHARPが一番多い？<br />
　→何も考えないでいくとAQUOS進められる率が高いらしい<br />
・東芝、SONYはネット内に工作員が？<br />
　→やたらベタ褒め（叩きまくり）の口コミは鵜呑みにしない方がいいとのこと<br />
・SONYのパネルはサムソン製で世代が古い？<br />
　→サムソンは第８世代で、最新のSHARPは第１０世代とのこと<br />
・SHARPはパネルに頼りすぎたため映像エンジンが弱い？<br />
　→夏以降は改善されてきたとの話も<br />
　　→逆にSONYなどはパネルが微妙なので映像エンジンが強いらしいが、よく考えると微妙な話<br />
<br />
◆総括<br />
書き出せば何かまとまるかなぁ〜と思ったけど、そうでもなかった・・<br />
今のとこX1かなぁ。実際に見た感じでも一番良かったし。<br />
ただ価格がネックなんだよね。２０万超えると少しキツイ。交渉次第。<br />
次点はZ7000。ただ品薄？のためか価格が上昇傾向にあるので１６万超えるようならX1かなぁ。<br />
とりあえず交渉してみます。DS5も12万以下になるなら買いだと思うし。<a name="more"></a>
]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-10-09"> 
    <title>ユニークなビデオ広告（InnovateAds）</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-10-09</link>  
    <description><![CDATA[<p>偶然、ちょっと面白い広告を見つけたので書いてみました。画面右下にお姉さんが現れていろいろと説明してくれます。ソネットでサンプル※javascriptを有効にする必要があります。</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-10-09T15:24:02+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
偶然、ちょっと面白い広告を見つけたので書いてみました。<br class="auto"/>
画面右下にお姉さんが現れていろいろと説明してくれます。</p>

<p class="auto">
<a href="http://www.innovateads.com/iads/demo.php?url=http%3A%2F%2Fwww.so-net.ne.jp%2F&submit.x=45&submit.y=6">ソネットでサンプル</a><br class="auto"/>
※javascriptを有効にする必要があります。<br class="auto"/>
<a name="more"></a><br class="auto"/>
運営会社のHPはこちら。<br class="auto"/>
<a href="http://www.innovateads.com">http://www.innovateads.com</a></p>

<p class="auto">
上のサンプルもここから適当に作ってみました。<br class="auto"/>
</p>

<p class="auto">
単純にサイトの解説を音声でやるだけなら、<br class="auto"/>
FlashやYoutubeで同じ事を簡単に出来ると思いますが、<br class="auto"/>
ＴＶの<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&ic=utf8" class="affiliate-link" target="_blank">ニュース</a>のような見せ方が面白いです。</p>

<p class="auto">
まぁ、ようは<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=Excel&ic=utf8" class="affiliate-link" target="_blank">Excel</a>とかで出てくる<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A4%E3%83%AB%E3%82%AB&ic=utf8" class="affiliate-link" target="_blank">イルカ</a>くん。<br class="auto"/>
と、言われればそれまでなのですが。</p>

<p class="auto">
まだ<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E8%8B%B1%E8%AA%9E&ic=utf8" class="affiliate-link" target="_blank">英語</a>版しか対応してないみたいなのですが、<br class="auto"/>
そのうち日本語版も出たりするんじゃないでしょうか。</p>

<p class="auto">
ちょっと期待。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-10-08"> 
    <title>MacでZendFrameworkでPHP開発（ViewRenderer）</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-10-08</link>  
    <description><![CDATA[<p>昔に触った0.6.0から大幅に変わっているみたいなので、（当たり前か改めてマニュアル読み直してみた。そうしたら前回ハマった箇所が。。。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-10-08T15:29:01+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css">
<!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
h4 {
  margin: 1.5em 1em 1em 0.6em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 110%;
  border-left: solid 0.4em #ff9900;
}
h5 {
  margin: 1em 1em 1em 1em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 105%;
  border-left: solid 0.4em #6699cc;
}
p {
	margin: 1em 2em;
	padding: 0px;
	text-indent: 1em;
}
-->
</style><br class="auto"/>
昔に触った0.6.0から大幅に変わっているみたいなので、（当たり前か<br class="auto"/>
改めて<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">マニュアル</a>読み直してみた。<br><br class="auto"/>
そうしたら<a href="http://blog.so-net.ne.jp/pluto-blog/2007-09-24-1">前回</a>ハマった箇所が。。。<br><a name="more"></a><br class="auto"/>
<a href="http://framework.zend.com/manual/ja/zend.controller.migration.html">http://framework.zend.com/manual/ja/zend.controller.migration.html</a><br><br class="auto"/>
どうやら0.9.3から1.0.0RC1になった時に「ViewRenderer」<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">ヘルパー</a>が追加されて、<br class="auto"/>
これがデフォで有効になった事が原因みたい。<br><br class="auto"/>
対処方としてindex.phpで<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">フロント</a>コントローラをrunする前に、<br class="auto"/>
ViewRendererを無効にする以下の記述を追加すれば、<br class="auto"/>
テンプレートがなくても動作するようになった。<br></p>

<pre>
$front = Zend_Controller_Front::getInstance();
$front->setParam('noViewRenderer', <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=true&ic=utf8" class="affiliate-link" target="_blank">true</a>);
</pre><p class="auto">
<br class="auto"/>
なお、ViewRendererを無効にしている場合は、<br class="auto"/>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&ic=utf8" class="affiliate-link" target="_blank">アクション</a>で以下のようにテンプレートを自分で指定する必要がある。<br class="auto"/>
※ViewRendererが有効の場合は、デフォで「views/scripts/(コントローラ名)」配下の<br class="auto"/>
「.phtml」<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ファイル</a>を見に行く。対象ファイルが無ければエラー。<br></p>

<pre>
$<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=view&ic=utf8" class="affiliate-link" target="_blank">view</a> = new Zend_View();
$view->setScriptPath('../php_include/views/tmp/index');
echo $view->render('test.html');
</pre><p class="auto">
<br class="auto"/>
手動で指定する場合は、パスや拡張子の縛りはなくて自由に指定できる。<br><br class="auto"/>
って、前に半日費やした苦労はなんだったんだ・・<br class="auto"/>
マニュアルはよく読めって事か(´・ω・`)</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-09-24-1"> 
    <title>Macで作るPHPの開発環境（ZendFramework）</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-09-24-1</link>  
    <description><![CDATA[<p>かなり昔、勉強会用にZendFrameworkについて書いたけど、知らない間に1.0がリリースされて結構かわったみたいなので、Macで開発環境を作ったついでにZendFrameworkを動かしてみる。</p>]]></description>  
    <dc:subject>mac</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-09-24T16:16:26+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css">
<!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
h4 {
  margin: 1.5em 1em 1em 0.6em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 110%;
  border-left: solid 0.4em #ff9900;
}
h5 {
  margin: 1em 1em 1em 1em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 105%;
  border-left: solid 0.4em #6699cc;
}
p {
	margin: 1em 2em;
	padding: 0px;
	text-indent: 1em;
}
-->
</style><br class="auto"/>
かなり昔、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E5%8B%89%E5%BC%B7&ic=utf8" class="affiliate-link" target="_blank">勉強</a>会用にZendFrameworkについて書いたけど、<br class="auto"/>
知らない間に1.0がリリースされて結構かわったみたいなので、<br class="auto"/>
Macで開発環境を作ったついでにZendFrameworkを動かしてみる。<br class="auto"/>
<a name="more"></a></p>

<h4>ZendFrameworkについて</h4>
<p>一度いろいろ調べたけど、改めておさらい。</p>
<ul>
<li>PHP5専用</li>
<li>MVCモデル</li>
<li>PHPを作っている会社が作っている<br>
Zend Core（2.0〜）に入ってる。Zend Studio（5.5〜）にも対応。</li>
<li>拡張しやすい（らしい）</li>
<li>symfonyやcakeのような、コードの自動生成はない</li>
<li>PDOに対応（でも Oracleへの対応は微妙らしい・・）</li>
<li>日本語<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">ドキュメント</a>が豊富</li>
<li>書籍も出たらしい（読んでないけど・・）</li>
</ul>
<h5><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">インストール</a></h5>
<p>まず、ダウンロードにする前に、受け元のディレクトリを作っておく。<br>
　自分の場合は↓な感じで作成。</p>
<pre>
htdocs/
php_include/
　controllers/
　models/
　views/
　　filters/
　　helpers/
　　scripts/
　library/
　　Zend/
</pre>
<p>受け元を作ったら、次は公式サイトからダウンロード。<br>
　なお、最新版は2007/09/24時点で 1.0.1。</p>
<p>　<a href="http://framework.zend.com/download">http://framework.zend.com/download</a></p>
<p>ダウンロードしたら解凍する。<br>
　解凍後「library/Zend」の中身を、受け元の「library/Zend」配下に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B3%E3%83%94%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">コピー</a>する。</p>

<h5><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=Apache&ic=utf8" class="affiliate-link" target="_blank">Apache</a>の設定</h5>
<p>Apacheのhttpd.confに以下の記述のコメントを外す。無ければ追加。</p>
<pre>
LoadModule rewrite_module modules/mod_rewrite.so
DirectoryIndex index.php index.html index.html.var
AccessFileName .htaccess
&#60;Directory "/Applications/MAMP/ZendFramework/htdocs"&#62;
　Options Indexes FollowSymLinks
　AllowOverride FileInfo Options
&#60;/Directory&#62;
</pre>
<p>VirtualHostを使うので、ついでに以下の内容も設定。</p>
<pre>
NameVirtualHost *:80
&#60;VirtualHost *:80&#62;
　ServerName hoge.co.jp
　DocumentRoot "/Applications/MAMP/ZendFramework/htdocs"
　php_value include_path ".:/Applications/MAMP/ZendFramework/php_include/libraly/"
&#60;/VirtualHost&#62;
</pre>
<p>※ホストを「hoge.co.jp」として、受け元ディレクトリが<br>
　「/Applications/MAMP/ZendFramework/」配下に作られた場合の設定。<br>
　　ホスト名は「/etc/hosts」に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ローカル</a>として追加しておくこと。</p>
<p>次に「htdocs」配下に「.htaccess」<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ファイル</a>を作成する。<br>
　最低限の記述例は以下の通り。</p>
<pre>
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
</pre>
<p>設定が終わったらApacheの再起動を行う。</p>

<h5>動かしてみる</h5>
<p>とりあえずベタに「Hello, World!」を出してみる。</p>
<p>まず、起動元となる「index.php」を作る。作る場所はドキュメントルートの下。</p>
<pre>
【index.php】
&#60;?php
　require_<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=once&ic=utf8" class="affiliate-link" target="_blank">once</a> 'Zend/Controller/Front.php';
　Zend_Controller_Front::run('
　　/Applications/MAMP/ZendFramework/php_include/controllers');
?&#62;
</pre>
<p>ここでrunしているパスは絶対パスじゃないと動かなかったので注意。<br>
　※include_pathを通してもダメだった。</p>
<p>　→追記：<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">カレント</a>からの相対パスは大丈夫だった。<br>
　　　例）「../php_include/controllers」<br>
　　　　include_pathがダメなのかなぁ・・</p>
<p>次にメインコントローラの「IndexController.php」を作る。<br>
　パスが指定されない場合は、必ずこのコントローラが呼ばれる。<br>
　作る場所は、「php_include/controllers」の下。</p>
<pre>
【IndexController.php】
&#60;?php
require_once 'Zend/Controller/Action.php';
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=class&ic=utf8" class="affiliate-link" target="_blank">class</a> IndexController extends Zend_Controller_Action {
　/*アクション*/
　public function indexAction() {
　　echo "Hello, World!";
　}
}
?&#62;
</pre>
<p>昔は require_once じゃなく Zend::loadClass を使っていたけど、<br>
　何故か使えなくなっていた。公式も require_once 使うように変わっているし、<br>
　仕様が変わったのかな・・・</p>
<p>最後にテンプレートを作成。昔はテンプレートなくても動いていた気がしたけど、<br>
　今回はテンプレートないと動かなかった。<br>
　作る場所は「php_include/views/scripts/」配下。<br>
　作るファイルは「index/index.phtml」。拡張子は「phtml」でないとダメっぽ。<br>
　ちなみにファイルがあれば中身は空でも動くので、今回は空ファイルを作成。</p>
<p>ここまで終わったら、「<a href="http://hoge.co.jp" target="_blank" class="auto">http://hoge.co.jp</a>(注：localhost)」にアクセスすれば、<br>
　画面に「Hello, World!」が表示されるハズ。</p>

<h5>おまけ</h5>
<p>「Hello, World!」を出力するだけなのに何気に半日くらいハマれたので、<br>
　参考までにその時のエラーメッセージと対処方を書いておきまふ。</p>
<pre>
【エラー】
Fatal error: Cannot access protected property Zend_Controller_Front::$_instance in
　/(略)/php_include/library/Zend/Controller/Front.php on line 162
【対処方】
　MAMPのeAcceleratorが悪さをしていた模様。相性が悪い？
　php.iniのeAcceleratorの設定をコメント化するなどして止めたら解決。

【エラー】
Class 'Zend' not found in
　/(略)/php_include/controllers/IndexController.php on line 2
【対処方】
　「Zend::loadClass()」が使えなかった事で発生したエラー。
　「requrei_once」に変えたら解決。

【エラー】
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' 
　with message 'Invalid controller specified (error)' in 
　/(略)/php_include/library/Zend/Controller/Dispatcher/Standard.php:193
　　Stack trace: #0 
　/(略)/php_include/library/Zend/Controller/Front.php(911): 
　Zend_Controller_Dispatcher_Standard->dispatch(
　　Object(Zend_Controller_Request_Http),
　　Object(Zend_Controller_Response_Http)) #1
　/(略)/php_include/library/Zend/Controller/Front.php(224):
　　Zend_Controller_Front->dispatch() #2
　/(略)/htdocs/index.php(3):
　　Zend_Controller_Front::run('controllers') #3
　 {main} thrown in /(略)/php_include/library/Zend/
　　Controller/Dispatcher/Standard.php on line 193
【対処方】
　requestを調べたところ、「views/scripts/index/index.phtml」を開こうとして、
　ファイルが無いというエラーを返していた。
　「views/scripts/index/index.phtml」を作成したら解決。
</pre>
<p class="auto">
<br><br class="auto"/>
疲れたので、他の機能についてはまた今度。。。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-09-24"> 
    <title>Macで作るPHPの開発環境（Subversion）</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-09-24</link>  
    <description><![CDATA[<p>あると何かと便利なバージョン管理のSubversionを導入してみる。</p>]]></description>  
    <dc:subject>mac</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-09-24T14:34:07+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css">
<!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
h4 {
  margin: 1.5em 1em 1em 0.6em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 110%;
  border-left: solid 0.4em #ff9900;
}
h5 {
  margin: 1em 1em 1em 1em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 105%;
  border-left: solid 0.4em #6699cc;
}
p {
	margin: 1em 2em;
	padding: 0px;
	text-indent: 1em;
}
-->
</style><br class="auto"/>
あると何かと便利な<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3&ic=utf8" class="affiliate-link" target="_blank">バージョン</a>管理のSubversionを導入してみる。<a name="more"></a></p>

<h4>Subversionの導入</h4>
<p>Subversionについて詳しくはwikiを参照。</p>
<p>　<a href="http://ja.wikipedia.org/wiki/Subversion">http://ja.wikipedia.org/wiki/Subversion</a></p>

<h5><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">インストール</a></h5>

<p>まず以下のURLから<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8&ic=utf8" class="affiliate-link" target="_blank">パッケージ</a>をダウンロード。</p>
<p>　<a href="http://downloads.open.collab.net/binaries.html">http://downloads.open.collab.net/binaries.html</a></p>
<p>ちゃんとMac用になっているので、ダウンロードして解凍した後は、<br>
　インストーラーの指示に従えば簡単にインストールできるハズ。</p>

<h5>環境パスの設定</h5>

<p>インストールしても、そのままでは利用できないので、<br>
　利用できるように環境パスを設定する。</p>
<p>普段利用するユーザのディレクトリ直下に「.bashj_profile」を<br>
　作成（既に存在する場合は追記）して、以下の内容を記載。</p>
<pre>
PATH=/usr/local/bin:$PATH
export PATH
MANPATH=/usr/local/man:$MANPATH
export MANPATH
INFOPATH=/usr/local/info:$INFOPATH
export INFOPATH
</pre>
<p>設定後、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ターミナル</a>を再起動して「env」<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89&ic=utf8" class="affiliate-link" target="_blank">コマンド</a>で環境パスを確認。<br>
　さらに、ちゃんと「svn」コマンドが実行できれば成功。</p>
<p>◆参考にしたサイト</p>
<p>　<a href="http://ihara.vox.com/library/post/mac%E3%81%AEsubversion%E8%A8%AD%E5%AE%9A.html">井原の学習帳〜macのsubversion設定</a></p>

<h5>リポジトリ作成</h5>
<p>リポジトリは「svnadmin create」コマンドで作成できる。</p>
<p>以下、サンプル。</p>
<pre>
$ svnadmin create /Applications/svn/test
</pre>
<p>これで「/Applications/svn」<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80&ic=utf8" class="affiliate-link" target="_blank">フォルダ</a>に「test」レポジトリが作成される。</p>

<h5><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9&ic=utf8" class="affiliate-link" target="_blank">アクセス</a>設定</h5>
<p>Subversion<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">クライアント</a>から「svn://〜」でアクセスできるように、<br>
　svnserveを設定する。</p>
<p>作成したレポジトリのconfフォルダ内にある「svnserve.conf」の<br>
　設定を次のように変更する。</p>
<pre>
[ general ]
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=anon&ic=utf8" class="affiliate-link" target="_blank">anon</a>-access = read
auth-access = write
password-db = passwd
realm = [レポジトリの説明]
</pre>
<p>次にユーザの設定。password-dbで指定した<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ファイル</a>（上記設定だとpasswd）を<br>
　confフォルダ内に作成して、ユーザとパスワードを設定する。</p>
<pre>
[ users ]
[ユーザ名] = [パスワード]
</pre>
<p>設定が終わったら、sunserveサーバーを起動する。</p>
<pre>
$ svnserve -d
</pre>
<p>※自動起動の方法がわからないので、使うたびに手動で起動する必要が・・<br>
　めんどくさい人は上記サイトを参考にSSHで設定するか、CVSを使うといいかも。</p>
<p>◆参考にしたサイト</p>
<p>　<a href="http://subversion.bluegate.org/doc/book.html">Subversionによるバージョン管理</a></p>

<p>とりあえず、これでSubversionの設定は完了。</p>

<h4>Subversiveの導入</h4>

<p>Subversionのクライアントとして、巷で噂のSubversiveプラグインを利用する。</p>

<h5>インストール</h5>
<p>インストールはEclipse上から行う。</p>
<p>メニューの「ヘルプ」→「ソフトウェアの更新」→「検索およびインストール」を選択。<br>
　次に「インストールする新規フィーチャーを検索」を選択して、「次へ」をクリック。<br>
　更新アクセス先一覧が表示されたら「新規リモート・サイト」を選択し、<br>
　以下の2つのリモート・サイトを新規で登録する。</p>
<pre>
【Subversive】
　名前：Subversive
　URL：<a href="http://www.polarion.org/projects/subversive/download/1.1/update-site/" target="_blank" class="auto">http://www.polarion.org/projects/subversive/download/1.1/update-site/</a>
【ProjectSet】
　名前：ProjectSet
　URL：<a href="http://vpms.de.csc.com/projectset/update" target="_blank" class="auto">http://vpms.de.csc.com/projectset/update</a>
</pre>
<p>登録が終わったら、いま登録した2つのリモート・サイトと、<br>
　「Europa ディスカバリー・サイト」にチェックを入れて「終了」をクリック。</p>
<p>フィーチャーの選択画面が出たら「Subversive」にチェックを入れる。<br>
　すると上に赤い×が出て、必須フィーチャーが足りないと言われるので、<br>
　「必須項目を選択」をクリックする。<br>
　※Macの場合は、ディスカバリー・サイトのフィーチャーリストを展開してから<br>
　　「必須項目を選択」を押さないと、うまく行かない？っぽいので注意。</P>
<p>無事に必須フィーチャーが選択されて、赤い×が消えたら、<br>
　「次へ」をクリックして、あとは画面の指示に従ってインストールする。</p>

<h5>リポジトリの登録</h5>
<p>無事にプラグインがインストールされたら、先に登録したリポジトリを登録する。</p>
<p>「バースペクティブを開く」から「SVN リポジトリー・エクスプローラー」を選択。<br>
　右クリックメニューの「新規」→「リポジトリー・ロケーション」を選択。<br>
　入力メニューが開いたら「一般」タグに以下のリポジトリ情報を登録。</p>
<pre>
URL：svn://localhost/ [レポジトリの絶対パス]
ユーザー：[passwdファイルに記載したユーザ]
パスワード：[passwdファイルに記載したユーザのパスワード]
</pre>
<p>接続に成功したら、チェックアウトを行う。<br>
　ただし、中身は空なのでレポジトリ名のプロジェクトだけがチェックアウトされる。<br>
　※svnserveを利用する場合、svnserveが起動しないと接続できないので注意。</p>
]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-09-09"> 
    <title>Macで作るPHPの開発環境（MAMP、Eclipse）</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-09-09</link>  
    <description><![CDATA[<p>最近、自宅のマシンがWindowsからMacになったので、Mac用に新しく作った開発環境の作り方の備忘録として。</p>]]></description>  
    <dc:subject>mac</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-09-09T13:03:33+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css">
<!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
h4 {
  margin: 1.5em 1em 1em 0.6em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 110%;
  border-left: solid 0.4em #ff9900;
}
h5 {
  margin: 1em 1em 1em 1em;
  padding: 0.7em 0.4em 0em 0.4em;
  font-size: 105%;
  border-left: solid 0.4em #6699cc;
}
p {
	margin: 1em 2em;
	padding: 0px;
	text-indent: 1em;
}
-->
</style><br class="auto"/>
最近、自宅のマシンがWindowsからMacになったので、<br />Mac用に新しく作った開発環境の作り方の備忘録として。<a name="more"></a></p>

<h4>MAMPの導入</h4>
<p>PHP、apache、MySQLなどを単品で入れるのは面倒なので、<br>
　Mac用開発一括<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8&ic=utf8" class="affiliate-link" target="_blank">パッケージ</a>であるMAMPを使う。</p>
<p>　<a href="http://www.mamp.info/ja/home/">http://www.mamp.info/ja/home/</a>
<p>MAMPに含まれるソフトは以下の通り。</p>
<pre>
・<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=Apache&ic=utf8" class="affiliate-link" target="_blank">Apache</a> 2.0.59
・MySQL 5.0.33
・PHP 4.4.4 & 5.2.0
・eAccelerator 0.9.5
・phpMyAdmin 2.9.2
・Zend Optimizer 3.2.2
・SQLiteManager 1.2.0
</pre>
<p>ちなみにこれらソフトの<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3&ic=utf8" class="affiliate-link" target="_blank">バージョン</a>は、2007年8月にDLしたMAMPでのバージョン。<br>
　正式なバージョンは、入れ終わった後に見れるMAMPのスタートページのFAQを参考に。</p>
<p>他の有名な開発一括パッケージとしてXAMPPがある。<br>
　こちらにもMac用のパッケージがあるので、どちらを使うかは好みに合わせて。</p>
<p>　<a href="http://www.apachefriends.org/jp/xampp-macosx.html">http://www.apachefriends.org/jp/xampp-macosx.html</a></p>
<p>なお、今回はMAMPを前提に。<p>
<p><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">インストール</a>するためにDLサイトに<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9&ic=utf8" class="affiliate-link" target="_blank">アクセス</a>。<br>
　いちお日本語版なんだけどサイトは<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E8%8B%B1%E8%AA%9E&ic=utf8" class="affiliate-link" target="_blank">英語</a>になってます。メールアドレス入力必須。<br>
　（※ちなみに重い。どうしても繋がらない場合は日を改めるか、XAMPPで。）</p>
<p>無事(?)にアクセス出来たら、MAMPパッケージをDL。<br>
　なお、有料版のMAMP Proもあるけど、普通は無料版で十分なハズ。<br>
　（※DLも重かった。試練は続く。）</p>
<p>無事(?)にDL出来たら、あとは簡単。</p>
<p>まずは<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF&ic=utf8" class="affiliate-link" target="_blank">ディスク</a><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8&ic=utf8" class="affiliate-link" target="_blank">イメージ</a>から/MAMP<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80&ic=utf8" class="affiliate-link" target="_blank">フォルダ</a>を/Applicationsフォルダ配下に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B3%E3%83%94%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">コピー</a>。<br>
　次にコピーした/Apllications/MAMP配下のMAMPアプリケーションを起動。<br>
　開いたメニューからサーバを起動して、スタートページが表示されれば成功。</p>

<h4>Eclipseの導入</h4>
<p>より馬車馬のごとく開発するために統合ソフトウェア開発環境(IDE)のEclipseを入れる。<p>
<p>EclipseでPHPを開発する為にはPHP用の開発プラグインを入れる必要がある。<br>
　そのプラグインのPHP Development Tools(PDT)とEclipse本体がセットになった<br>
　All-in-oneパッケージがあるので、それを利用する事にする。</p>
<p>　<a href="http://www.eclipse.org/pdt/">http://www.eclipse.org/pdt/</a></p>
<p>EclipseはDLしたファイルを解凍すれば使えるようになる。<br>
　解凍したファイルは、とりあえず/Apllicationsフォルダ配下に置いておく。</p>
<p>これで解凍したフォルダの中にあるEclipseファイルからEclipseを起動できる様になる。</p>
<p>なお、プラグインを単体で入れたい場合はEclipseのメニューから、<br>
　「ヘルプ」→「ソフトウェア更新」→「検索およびインストール」と選択して、<br>
　ダイアログが開いたら、<br>
　「インストールする新規フィーチャーを検索」を選択して「次へ」をクリック。<br>
　次に「新規リモート・サイト」をクリックして、以下の新規更新サイトを登録する。</p>
<pre>
名前：PDT
URL：<a href="http://download.eclipse.org/tools/pdt/updates/" target="_blank" class="auto">http://download.eclipse.org/tools/pdt/updates/</a>
</pre>
<p>必須となるフィーチャーはディスカバリー・サイトにあるので、<br>
　「PDT」と「Europa ディスカバリー・サイト」の2つにチェックを入れて、<br>
　「必須項目を選択」

<h5>日本語化</h5>
<p>Eclipseは初期状態では全部英語になっている。<br>
　日本語化する為に日本語化プラグインのPleiadesを使う。<br>
<p>PleiadesのDLサイトから、プラグインをDLする。</p>
<p>　<a href="http://mergedoc.sourceforge.jp/">http://mergedoc.sourceforge.jp</a></p>
<p>DLしたら解凍して、展開されたfeatureフォルダとpluginsフォルダの中身を<br>
　Eclipseのfeatureフォルダとpluginsフォルダにコピーする。</p>
<p>この時、フォルダごとコピーすると、Macではフォルダごと上書きされてしまうので、<br>
　ちゃんと中身をコピーして、貼り付けること。</p>
<p>コピーが終わったら、プラグインを読込ませる設定を「eclipse.ini」に追記する。<br>
　eclipse.iniは「eclipse/Eclipse.app/Contents/MacOS」フォルダ配下にあるけど、<br>
　FinderからはEclipse.appフォルダが見えないみたいなので、<br>
　ターミナルからアクセスしてviで変更する。</p>
<p>eclipse.iniを開いたら、最終行に以下の1行を追記する。</p>
<pre>
-javaagent:/Applications/eclipse/plugins/
　　　　　　　　　jp.sourceforge.mergedoc.pleiades/pleiades.jar
</pre>
<p>なお、「Read me」の中ではプラグインのパスは相対パスで書かれてたけど、<br>
　Macでは絶対パスでないと動かないみたいなので注意。</p>
<p>eclipse.iniの設定が終わったらEclipseを再起動。<br>
　プラグインが正常に当たっていれば日本語化されています。</p>

<h5>Subversiveのインストール</h5>
<p>あると何かと便利な、Subversionクライアントを入れておく。</p>
<p>Subversionについて詳しくわからない場合は、以下を参考に。</p>
<p>　<a href="http://subversion.bluegate.org/doc/">http://subversion.bluegate.org/doc/</a></p>
<p>※ちなみにローカルでチクチクバージョン管理したいなら、CVSの方が楽。<br>
　デフォでMacにCVS、EclipseにCVSクライアントが入っているし。</p>
<p>MacでのCVSの使い方は、↓のサイトに詳しく載っていたので、参考に。</p>
<p>　<a href="http://homepage3.nifty.com/toralu/MEMO/cvs1.html">http://homepage3.nifty.com/toralu/MEMO/cvs1.html</a></p>
<p>話は戻って、SubversionクライアントのSubversiveプラグインのインストールを。</p>
<p>まず、Subversiveでは、プロジェクト管理用のProjectSetが必須となるので、<br>
　新規リモート・サイトとして登録する。</p>
<p>まずEclipseのメニューから、<br>
　「ヘルプ」→「ソフトウェア更新」→「検索およびインストール」と選択する。<br>
　ダイアログが開いたら、<br>
　「インストールする新規フィーチャーを検索」を選択して「次へ」をクリック。<br>
　次に「新規リモート・サイト」をクリックして、以下の新規更新サイトを登録する。</p>
<pre>
名前：ProjectSet
URL：<a href="http://vpms.de.csc.com/projectset/update" target="_blank" class="auto">http://vpms.de.csc.com/projectset/update</a>
</pre>
<p>インストールは後でまとめて行えるので、<br>
　次にSubversive用のリモート・サイトを登録する。<br>
　再び「新規リモート・サイト」をクリックして、以下の内容で登録する。</p>
<pre>
名前：Subversive
URL：<a href="http://www.polarion.org/projects/subversive/download/1.1/update-site/" target="_blank" class="auto">http://www.polarion.org/projects/subversive/download/1.1/update-site/</a>
</pre>
<p>登録が終わったら、いま登録した「ProjectSet」と「Subversive」、<br>
　それと「Europa ディスカバリー・サイト」にチェックを入れて「終了」をクリック。</p>
<p>インストールするフィーチャーが表示されたら、「Subversive」にチェックを入れる。<br>
　すると上に赤い×が出て、フィーチャーが足りないと言われるので、<br>
　「必須項目を選択」をクリックすれば、自動的に必要なフィーチャーを選択してくれる。<br>
　※「Europa ディスカバリー・サイト」のフィーチャーリストを展開しておかないと、<br>
　　自動選択してくれないので、注意すること。</p>
<p>上の赤い×が消えたら「次へ」をクリック、<br>
　あとは画面の指示に従ってインストールする。</p>

とりあえず長くなったので、今回はここまで。</p></p></p></p></p></p></p>
]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-05-16"> 
    <title>Docomo2.0に隠された謎</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-05-16</link>  
    <description><![CDATA[<p>(今さらながら)DSの「レントン教授と不思議な町」に夢中なPlutoです。謎は解けるから謎なのだよ。</p>]]></description>  
    <dc:subject>ネタ</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-05-16T10:19:24+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
(今さらながら)DSの「<a href="http://www.layton.jp/">レントン教授と不思議な町</a>」に夢中なPlutoです。<br class="auto"/>
謎は解けるから謎なのだよ。<a name="more"></a></p>

<p class="auto">
謎と言えば、MNPで一人負け街道爆進中のDocomoが<br class="auto"/>
これから反撃を開始するぞ！って事で打ち立てた<br class="auto"/>
キャッチフレーズ「Docomo2.0」にも隠された謎が存在するらしいです。</p>

<p class="auto">
<a href="http://internet.watch.impress.co.jp/static/yajiuma/2007/05/15/">謎の「DoCoMo 2.0」 </a></p>

<p class="auto">
どこもにいてんぜろ。</p>

<p class="auto">
　・<br class="auto"/>
　・<br class="auto"/>
　・</p>

<p class="auto">
Docomoに移転ゼロ。<br class="auto"/>
</p>

<p class="auto">
謎というかヤケクソなんでしょうか。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-05-15"> 
    <title>あとで行く</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-05-15</link>  
    <description><![CDATA[<p>なんとなく面白そうなサービスを見つけたので紹介。　あとで行くブックマークの行きたい場所版みたいな感じかな。</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-05-15T09:11:02+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
なんとなく面白そうなサービスを見つけたので紹介。</p>

<p class="auto">
　<a href="http://atodeiku.com/">あとで行く</a></p>

<p class="auto">
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF&ic=utf8" class="affiliate-link" target="_blank">ブックマーク</a>の行きたい場所版みたいな感じかな。<a name="more"></a></p>

<p class="auto">
軽く使ってみました感じとして、<br class="auto"/>
認証ははてなAPIを使っているのではてなユーザであれば、<br class="auto"/>
新規に登録する事無く使うことが出来ます。</p>

<p class="auto">
　<a href="http://www.hatena.ne.jp/">はてな</a></p>

<p class="auto">
「あとで行く」場所の登録方法ですが、<br class="auto"/>
手動で入力する方法とブックマークを使って登録する方法の<br class="auto"/>
２つがあります。</p>

<p class="auto">
手動で入力は、<br class="auto"/>
指定したい場所のURL、タグ、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E5%9C%B0%E5%9B%B3&ic=utf8" class="affiliate-link" target="_blank">地図</a>の位置を指定します。</p>

<p class="auto">
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">タイトル</a>はURLから自動取得されるので、<br class="auto"/>
HPがない場所は登録出来ないみたいです。</p>

<p class="auto">
ブックマークを使う方法は２つあって、<br class="auto"/>
１つはこのサービスが提供しているブックマーク機能を使う方法。</p>

<p class="auto">
で、もう１つがユニークなのですが、<br class="auto"/>
はてなブックマークの[あとで行く]タグを吸い出す方法です。</p>

<p class="auto">
なので、はてなブックマークを既に利用している人は、<br class="auto"/>
気になる場所を[あとで行く]タグで登録すれば、<br class="auto"/>
この機能を使って楽に登録する事が出来るようになる訳です。</p>

<p class="auto">
　<a href="http://b.hatena.ne.jp/">はてなブックマーク</a></p>

<p class="auto">
サイト自体は<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">シンプル</a>でわかりやすい作りで、<br class="auto"/>
登録も面倒でないレベルまで簡略化されていていい感じなのですが、<br class="auto"/>
全体的にとにかく重いです。。。<br class="auto"/>
</p>

<p class="auto">
でも、この手のサービスっていつも思うのですが、<br class="auto"/>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E6%90%BA%E5%B8%AF&ic=utf8" class="affiliate-link" target="_blank">携帯</a>のGPSに対応してくれないかな。</p>

<p class="auto">
あとで行きたい場所を見つけた時にその場で登録。<br class="auto"/>
GPS機能で場所も自動入力。<br class="auto"/>
写メも張れればさらにわかりやすく。</p>

<p class="auto">
妄想ですが。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-05-04"> 
    <title>任天堂社長のセカンドライフに対しての見解</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-05-04</link>  
    <description><![CDATA[<p>任天堂の2007年3月期の決算説明会の中で、最近なにかと流行のセカンドライフについてのやりとりがありました。</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-05-04T09:19:04+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
--></style><br class="auto"/>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E4%BB%BB%E5%A4%A9%E5%A0%82&ic=utf8" class="affiliate-link" target="_blank">任天堂</a>の2007年3月期の決算説明会の中で、<br class="auto"/>
最近なにかと流行の<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%BB%E3%82%AB%E3%83%B3%E3%83%89&ic=utf8" class="affiliate-link" target="_blank">セカンド</a><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%A9%E3%82%A4%E3%83%95&ic=utf8" class="affiliate-link" target="_blank">ライフ</a>についてのやりとりがありました。<a name="more"></a></p>

<p class="auto">
　<a href="http://www.nintendo.co.jp/ir/library/events/070427qa/04.html">2007年3月期 決算説明会 質疑応答</a></p>

<p class="auto">
気になる箇所を以下に引用。</p>

<pre>
　Q. 最近、果たして<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B2%E3%83%BC%E3%83%A0&ic=utf8" class="affiliate-link" target="_blank">ゲーム</a>と呼んでいいのかどうか分からない、
　　セカンドライフというものが急速に普及しているように思うが、
　　セカンドライフをどのように評価しているのか。

　　ゲーム業界になんらかの影響を及ぼしてくると考えているのか。

　　そもそもゲームとはなにか、
　　ゲームの定義とはどういったものと考えておられるか。

　　また、今後ゲームはどういう方向に向かっていくかについて、
　　整理もかねてもう一度説明していただきたい。
</pre>
<pre>
　A. セカンドライフには、私個人はほとんど興味を持っておりません。

　　また将来、
　　ものすごい存在になるというふうにもあまり思っておりません。

　　それが、今私が申しあげられることです。

　　もっと言いますと、現代を生きる人々は
　　どんどん時間やエネルギーが限られてくるんですね。

　　いろんなことがものすごいペースで変化しますし、
　　娯楽に使えるエネルギーというのはそんなに大きくありません。

　　その中で、先ほどのゲームとは何かという定義にもかかわりますが、
　　私の定義するゲームと言うのは、

　　　「人間が何かを<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A4%E3%83%B3%E3%83%97%E3%83%83%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">インプット</a>する。そうしたら、
　　　　そこに必要だった労力よりも価値のあるものが、
　　　　何か返ってくる」、

　　これが、
　　ゲームというよりもインタラクティブエンターテインメント
　　といったらいいんですかね。

　　　「何か触る。触ったら何かが返ってくる。その返ってきたものは、
　　　　自分が注ぎ込んだものよりも何か大きなものが返ってくる」。

　　そういうときに、人はやめずに続けてくれるのだと思います。

　　もし自分が注ぎこんだエネルギーに対して
　　返ってくるご褒美が小さかったら、多くの人はそれを続けません。

　　どんなご褒美かっていうのはゲームによっていろいろあるわけです。

　　例えば極端な話、
　　<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E6%96%99%E7%90%86&ic=utf8" class="affiliate-link" target="_blank">料理</a>を作るゲーム、
　　『しゃべる！ＤＳお料理ナビ』というゲームがあって、
　　これは私も愛用していて、休みの日に料理を作ったりするんですが、
　　ゲームの中にご褒美がないんですね。

　　ですが、リアルに料理ができて、食べたらおいしいわけです。

　　それがご褒美なんですね。

　　ですから
　　　「自分が労力を注いだ結果、ご褒美が得られた」
　　ということが成立するので、

　　私は飽きずに、
　　モニターをして「こういうとこを良くした方がいいよ」って
　　言ってた時期から今もずっと変わらず、時々触っています。

　　こういう長期にわたってお付き合いいただける、
　　やめないものをどうやって作れるかが重要だと思っています。

　　そしてまた人にはいろんなタイプがありますから、
　　短期間にたくさんのエネルギーを注ぎ込んで、
　　どんどんやりこみ要素を求めておられる方もいらっしゃいますし、
　　時間が限られているので
　　ちょっとだけ触ってちょっとだけ楽しむという方々もいらっしゃいます。

　　そういう意味でいえば、いろんな方法があり、
　　ご褒美をお客様に感じていただく方法は一つではありません。

　　ただ、そのご褒美があるのがゲームだと思っています。
</pre><p class="auto">
</p>

<p class="auto">
ご褒美・・・<br class="auto"/>
当然と言えば、当然な考え方なのですが、<br class="auto"/>
リアルとゲームを結びつけるという所あたりが<br class="auto"/>
DSやWiiにも表れているのかもしれませんね。</p>

<p class="auto">
しかし、セカンドライフ・・・<br class="auto"/>
いきなり、興味なし！ってバッサリ切っていますねｗ<br class="auto"/>
しかも、流行らない、とまで。。。</p>

<p class="auto">
まぁセカンドライフは世界的に見ると盛り上がっているように見えるけど、<br class="auto"/>
実際のアクティブユーザは2～3万人くらいと微妙で、<br class="auto"/>
特に日本に関してはエンドユーザより企業サイドでのみ<br class="auto"/>
盛り上がっている気もするので、どうなのかな～？って所はあります。</p>

<p class="auto">
個人的にセカンドライフは日本では流行らないと思ってます。<br class="auto"/>
何故なら日本にはその代用になれる物があるからです。</p>

<p class="auto">
例えば、かれこれ5年運用されているFF11を初め、<br class="auto"/>
ラグナロクオンラインなどのオンラインゲーム、<br class="auto"/>
またモバゲータウンやMixiを代表するSNSもその代用になり得ると思います。</p>

<p class="auto">
その中で最有力候補としているのに、<br class="auto"/>
任天堂の「動物の森」があると思っていたのです・・・が、<br class="auto"/>
このインタビューを見る限り、<br class="auto"/>
動物の森でセカンドライフみたな世界を築く事は考えていないみたいですね。</p>

<p class="auto">
ちょっと残念。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-05-02"> 
    <title>涙なしでは見れない格言</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-05-02</link>  
    <description><![CDATA[<p>ちょっと古いネタなのですが、たまたま見つけて鬱になったので。プログラマー格言プログラマーの格言１７（盗作多し）　バグは夜更け過ぎに仕様に変わるだろう。そうやって自分に言い聞かせるんですよね。泣ける。</p>]]></description>  
    <dc:subject>ネタ</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-05-02T12:23:00+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
--></style><br class="auto"/>
ちょっと古いネタなのですが、<br class="auto"/>
たまたま見つけて鬱になったので。</p>

<p class="auto">
<a href="http://www2.biglobe.ne.jp/~oni_page/other/etc/pr03.html">プログラマー格言</a></p>

<pre>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">プログラマー</a>の格言１７（盗作多し）

　バグは夜更け過ぎに仕様に変わるだろう。
</pre><p class="auto">
</p>

<p class="auto">
そうやって自分に言い聞かせるんですよね。<br class="auto"/>
泣ける。<a name="more"></a></p>

<p class="auto">
そういえば、民間刑務所で刑務作業として<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2&ic=utf8" class="affiliate-link" target="_blank">ソフトウェア</a>開発が始まるみたいですね。</p>

<p class="auto">
<a href="http://www.itmedia.co.jp/enterprise/articles/0705/01/news053.html">http://www.itmedia.co.jp/enterprise/articles/0705/01/news053.html</a></p>

<pre>
プリズニーズは5月1日、山口県美祢市に5月13日に開校される日本初の
PFI刑務所「美祢社会復帰促進センター」の刑務作業として、
ソフトウェア開発を行える受刑者の育成と刑務作業としての
ソフトウェア開発アウトソーシング業務を実施していくことを発表した。
</pre><p class="auto">
</p>

<p class="auto">
逆効果にならなければいいけど（哀</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-04-27"> 
    <title>顔ちぇき</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-04-27</link>  
    <description><![CDATA[<p>メールで撮った顔写真を送ると、芸能人の誰に似ているのかを無料で判定してくれるサービスです。顔ちぇき# 携帯でしか見れません。</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-04-27T10:42:12+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
--></style><br class="auto"/>
メールで撮った顔<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E5%86%99%E7%9C%9F&ic=utf8" class="affiliate-link" target="_blank">写真</a>を送ると、<br class="auto"/>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E8%8A%B8%E8%83%BD%E4%BA%BA&ic=utf8" class="affiliate-link" target="_blank">芸能人</a>の誰に似ているのかを無料で判定してくれるサービスです。</p>

<p class="auto">
<a href="http://kaocheki.jp">顔ちぇき</a><br class="auto"/>
# <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E6%90%BA%E5%B8%AF&ic=utf8" class="affiliate-link" target="_blank">携帯</a>でしか見れません。<a name="more"></a></p>

<p class="auto">
携帯でしか使えませんが、これは面白そう。<br class="auto"/>
飲み会とかでやれば、いいネタになりそう。<br class="auto"/>
</p>

<p class="auto">
って事で、試しにやってみました。</p>

<p class="auto">
判定までの一連の流れとして、<br class="auto"/>
顔写真を撮って（※顔が画面の80%くらいになるのがいいらしいです）、<br class="auto"/>
サイトに<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9&ic=utf8" class="affiliate-link" target="_blank">アクセス</a>して、性別を選んでメールに添付して飛ばすだけ。<br class="auto"/>
ユーザ登録も不要でした。</p>

<p class="auto">
するとサイトからメールが飛んで来るので(※kaocheki.jpをメール受信で許可する必要あり)、<br class="auto"/>
そのメールに書かれているURLにアクセスすると結果が見れます。</p>

<p class="auto">
ちなみにその間の反応は結構早くて、だいたい４，５秒で返事が来ました。</p>

<p class="auto">
で、肝心の結果は↓の通り。</p>

<pre>
Plutoさんの顔は「TERU」さんに似ています。
あなたは「俳優系」です！
</pre><p class="auto">
</p>

<p class="auto">
ホントか！！？？？</p>

<pre>
TERU 50%
濱口優 50%
上田晋也 48%
</pre><p class="auto">
</p>

<p class="auto">
・・・芸人系じゃんか つД｀)<br class="auto"/>
</p>

<p class="auto">
と、こんな感じで結果が表示されます(嘆)</p>

<p class="auto">
沖電気工業が提供する顔画像認識技術を使って判定しているみたいですが、<br class="auto"/>
やはり精度が完璧とまで言えないみたいで、<br class="auto"/>
角度や気合（？）の違う写真を送ると結果が違ったりします。</p>

<p class="auto">
あと、送った写真のサイズがデカかったためか、<br class="auto"/>
EZ-Webではサイトが容量オーバーで表示しきれず、<br class="auto"/>
ならばとPCサイトビュアーで見ると、サイトのソースが表示されていたりと、<br class="auto"/>
サービス開始直後らしい微笑ましい光景が見られました。</p>

<p class="auto">
ただ、友達にメールで知らせたら結構面白がってやってくれたし、<br class="auto"/>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%AB%E3%83%A1%E3%83%A9&ic=utf8" class="affiliate-link" target="_blank">カメラ</a>付携帯であれば気軽に試せるので、結構流行るかもしれません。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-04-17"> 
    <title>Yahoo!ブックマークで起きた奇跡</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-04-17</link>  
    <description><![CDATA[<p>やっとというか、今頃というか、Yahooブックマークにソーシャルブックマーク機能が追加されたみたいです。　Yahoo!ブックマーク</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-04-17T10:51:59+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
やっとというか、今頃というか、Yahoo<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF&ic=utf8" class="affiliate-link" target="_blank">ブックマーク</a>に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF&ic=utf8" class="affiliate-link" target="_blank">ソーシャルブックマーク</a>機能が追加されたみたいです。</p>

<p class="auto">
　<a href="http://bookmarks.yahoo.co.jp/all">Yahoo!ブックマーク</a><a name="more"></a></p>

<p class="auto">
はてななどと違って、一般ユーザが多いYahooでは、<br class="auto"/>
どんなタグが貼られるか興味があります。</p>

<p class="auto">
まぁ、まだオープンされたばかりって事もあって、<br class="auto"/>
はてなブックマークとかで見たことある記事が上位にランクインしてますが。</p>

<p class="auto">
ちょうど自分が見たときに<br class="auto"/>
奇跡が起きて愉快な記事が最上位にランクインしていましたｗ</p>

<p class="auto">
<a href="http://blog.livedoor.jp/dankogai/archives/50811253.html">404 Blog Not Found</a>さん、いい仕事してます。</p>

<p class="auto">
<img src="http://pluto-blog.blog.so-net.ne.jp/blog/_images/blog/_b1e/pluto-blog/7260012.jpg" /><br class="auto"/>
</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-04-06"> 
    <title>突っ込みツール</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-04-06</link>  
    <description><![CDATA[<p>怪しいサービスを見つけたので紹介。　ブログつっこみツールPAOLO</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-04-06T10:49:05+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
怪しいサービスを見つけたので紹介。</p>

<p class="auto">
　ブログつっこみツール<a href="http://paolo.jp/">PAOLO</a><a name="more"></a></p>

<p class="auto">
使い方はユーザ登録して、発行されたスクリプトをブログ内に埋め込むだけ。<br class="auto"/>
（※スクリプトが有効なブログであること）</p>

<p class="auto">
で、対象ブログの突っ込みを入れたい文を選択すると入力フォームが開くので、<br class="auto"/>
そこに突っ込みコメントを入力すると突っ込み完了。<br class="auto"/>
</p>

<p class="auto">
使った感想としては、<br class="auto"/>
突っ込みというよりは、普通のブログのコメントが拡張された感じかな。<br class="auto"/>
あと、いっぱい書かれると割とウザいって感じでしょうか(汗)</p>

<p class="auto">
問題点としては、<br class="auto"/>
コメントがいれずらい点（反応しない時がある）、<br class="auto"/>
スクリプトの読み込みに時間がかかる（ベータだから？）<br class="auto"/>
入れる<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">ポイント</a>を画面の中心に持ってこないと入力フォームが画面外に出てしまう、<br class="auto"/>
こんなとこでしょうか。</p>

<p class="auto">
まぁ、細かいところはまだ気になりますが、<br class="auto"/>
今後の調整に期待するとして、<br class="auto"/>
こういったユーザ参加型のツールは面白いですね。</p>

<p class="auto">
※ネタ元は<a href="http://internet.watch.impress.co.jp/cda/news/2007/04/05/15328.html">コチラ</a></p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-03-30"> 
    <title>フルフル</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-03-30</link>  
    <description><![CDATA[<p>雪や桜の葉を舞わせたり出来るブログパーツです。　フルフル</p>]]></description>  
    <dc:subject>Web2.0</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-03-30T16:50:10+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
雪や桜の葉を舞わせたり出来るブログパーツです。</p>

<p class="auto">
　<a href="http://www.furu2.jp/">フルフル</a><a name="more"></a></p>

<p class="auto">
昔、スクリーンセーバーでよく見ましたが、<br class="auto"/>
ブログとかでやると新鮮でいいですね。</p>

<p class="auto">
ちなみに呼び出しソースを除いてみたけど、<br class="auto"/>
php<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ファイル</a>のクセにjavascriptで書かれている模様。</p>

<p class="auto">
軽く流し見てみたけどサッパリわからん・・・<br class="auto"/>
javascriptの<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E5%8B%89%E5%BC%B7&ic=utf8" class="affiliate-link" target="_blank">勉強</a>をしなければ(汗)</p>

<p class="auto">
でも、これで桜や雪の画像を張ると臨場感も出そう。</p>

<p class="auto">
流行るといいなぁ・・・<br class="auto"/>
<br class="auto"/>
</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-01-17"> 
    <title>Zend Frameworkについて(Controller編２)</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-01-17</link>  
    <description><![CDATA[<p> 今回はControllerの続きと言うことで、リクエストとレスポンスについてやります。マニュアルでは4.1.2、4.1.5になります。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-01-17T23:22:41+09:00</dc:date>  
    <content:encoded><![CDATA[
 <p class="auto">
<style type="text/css"><!-- 
pre {
  font-family: monospace;
  border:#AAAA77 1px solid;
  padding:1em;
  margin-left:1em;
  margin-right:2em;
  white-space:pre;
  color:black;
  background-color:#FFFFEE;
  line-height: 110%;
}
--></style><br class="auto"/>
今回はControllerの続きと言うことで、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">リクエスト</a>とレスポンスについてやります。<br class="auto"/>
<a href="http://framework.zend.com/manual/ja/">マニュアル</a>では<a href="http://framework.zend.com/manual/ja/zend.controller.html#zend.controller.overview.request">4.1.2</a>、<a href="http://framework.zend.com/manual/ja/zend.controller.html#zend.controller.overview.response">4.1.5</a>になります。<a name="more"></a><br class="auto"/>
<br><br class="auto"/>
<b>リクエストについて</b></p>

<hr><p class="auto">
<br class="auto"/>
　リクエストオブジェクトは、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">フロント</a>コントローラやコントローラクラスなどの間でやり取りされる情報を扱うオブジェクトです。<br class="auto"/>
　この中にはコントローラ、<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&ic=utf8" class="affiliate-link" target="_blank">アクション</a>名やHTTPの環境なども含みます。</p>

<p class="auto">
　リクエストオブジェクトを扱う時は、Controllerの「getRequest」メソッドを使います。</p>

<pre>
$req = $this->getRequest();
</pre><p class="auto">
<br class="auto"/>
　ここからリクエスト情報を取得する場合は、「getParam」メソッドを使用します。</p>

<pre>
$test1 = $req->getParam('text1');
</pre><p class="auto">
<br class="auto"/>
　メソッドには取得したいリクエストのキー名を渡します。<br class="auto"/>
　上の例の場合、リクエストの「text1」の値が取得され、$test1に設定されます。<br class="auto"/>
　「getParam」メソッドは、リクエストがPost、Get両方に対応しています。</p>

<p class="auto">
　次にコントローラ内などで、値をリクエストに設定したい場合は、「setParam」メソッドを使用します。</p>

<pre>
$req->setParam('test2', 'abcde');
</pre><p class="auto">
<br class="auto"/>
　この場合、リクエストにキーを「test2」として、「abcde」を値を持つリクエストが作られます。</p>

<p class="auto">
　最後に渡されたリクエスト情報を全て取得したい場合は、「getParams」メソッドを使用します。</p>

<pre>
$req->getParams();
</pre><p class="auto">
</p>

<p class="auto">
　これは渡されたリクエストを全て配列で取得するメソッドです。<br class="auto"/>
　渡される情報にはcontrollerやactionも含まれます。</p>

<p class="auto">
　また複数のリクエスト情報を設定したい場合は、「setParams」メソッドを使用します。</p>

<pre>
$reqs = array('prm1'=>123, 'prm2'=>'abcd');
$req->setParams($reqs);
</pre><p class="auto">
<br class="auto"/>
　「setParam」メソッドと違い、設定したいリクエストを配列で渡します。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル</font></p>

<pre>
$req = $this->getRequest();
$prm = $req->getParams();
print_r($prm);
</pre><p class="auto">
<br class="auto"/>
　「<a href="http://mydomain.com/test/hoge/" target="_blank" class="auto">http://mydomain.com/test/hoge/</a>」に、リクエストパラメータ「prm=abcd」を渡してアクセスしたとすると、<br class="auto"/>
　結果は以下の通りになります。</p>

<pre>
Array ( 
　[controller] => test
　[action] => hoge
　[prm] => abcd
)
</pre><p class="auto">
<br class="auto"/>
　なお、リクエストは POST、GET どちらの方式で送信されても、同じ結果を返します。<br class="auto"/>
<br><br class="auto"/>
<b>レスポンスについて</b></p>

<hr><p class="auto">
<br class="auto"/>
　レスポンスオブジェクトは、コンテンツやヘッダを収集し、それを返します。<br class="auto"/>
　また、フロントコントローラで捕捉した例外も全てレスポンスオブジェクトに渡されます。</p>

<p class="auto">
　レスポンスオブジェクトを扱う時は、Controllerの「getResponse」メソッドを使います。</p>

<pre>
$res = $this->getResponse();
</pre><p class="auto">
<br class="auto"/>
　ヘッダー情報を設定する場合、「setHeader」メソッドを使います。</p>

<pre>
$res->setHeader('location', '<a href="http://google.co.jp&#39;," target="_blank" class="auto">http://google.co.jp&#39;,</a> true);
</pre><p class="auto">
<br class="auto"/>
　「setHeader」メソッドの第三引数に「true」を設定すると、既存のヘッダ情報を上書きするようになります。</p>

<p class="auto">
　レスポンスオブジェクトに格納されているヘッダー情報を取得するには、「getHeaders」メソッドを使います。</p>

<pre>
$res->getHeaders();
</pre><p class="auto">
<br class="auto"/>
　ヘッダー情報を送信する場合は、「sendHeaders」メソッドを使います。</p>

<pre>
$res->setHeader('location', '<a href="http://google.co.jp&#39;" target="_blank" class="auto">http://google.co.jp&#39;</a>);
$res->sendHeaders();
</pre><p class="auto">
<br class="auto"/>
　この例の場合、「<a href="http://google.co.jp" target="_blank" class="auto">http://google.co.jp</a>」にリダイレクトされます。<br class="auto"/>
</p>

<p class="auto">
レスポンスの例外処理は長くなりそうだからと言うか、<br class="auto"/>
まだよくわからないので次でやります。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-01-15-1"> 
    <title>Zend Frameworkについて(DB編３)</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-01-15-1</link>  
    <description><![CDATA[<p>前回の続きで、参照系（Select文）についてやります。マニュアルでは5.3からです。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-01-15T23:40:56+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- pre { font-family: monospace;border:#AAAA77 1px solid;padding:1em;margin-left:1em;margin-right:2em;white-space:pre;color:black;background-color:#FFFFEE;line-height: 110%;} --></style><br class="auto"/>
前回の続きで、参照系（Select文）についてやります。<br class="auto"/>
<a href="http://framework.zend.com/manual/ja/zend.db.select.html">マニュアル</a>では5.3からです。<a name="more"></a><br class="auto"/>
</p>

<p class="auto">
最初に今回参照する<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">テーブル</a>のデータについて。</p>

<p class="auto">
<font color="blue">「test」テーブル概要（作成用<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=SQL&ic=utf8" class="affiliate-link" target="_blank">SQL</a>）</font></p>

<pre>
CREATE <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=TABLE&ic=utf8" class="affiliate-link" target="_blank">TABLE</a> 'test' (
　'id' TINYINT( 2 ) NOT NULL ,
　'<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=name&ic=utf8" class="affiliate-link" target="_blank">name</a>' VARCHAR( 20 ) NOT NULL ,
　'text' VARCHAR( 100 ) NULL ,
　PRIMARY KEY ( `id` )
)
</pre>
<p class="auto">
<font color="blue">データ</font></p>

<table border="1">
<tr><td align="center" width=90px bgcolor="#FFCC99">id(key)</td><td align="center" width=90px bgcolor="#FFCC99">name</td><td align="center" width=90px bgcolor="#FFCC99">text</td></tr>
<tr><td>1</td><td>hoge</td><td>aaaaa</td></tr>
<tr><td>2</td><td>foo</td><td>bbbbb</td></tr>
<tr><td>3</td><td>nyoge</td><td>abcde</td></tr>
<tr><td>4</td><td>hogege</td><td>[ null ]</td></tr>
<tr><td>5</td><td>bar</td><td>[ スペース ]</td></tr>
</table><p class="auto">
</p>

<p class="auto">
また、サンプルで登場する$dbには、DB接続オブジェクトが設定されているとする。</p>

<p class="auto">
以上の前提条件を踏まえて、参照系について説明します。<br class="auto"/>
<br><br class="auto"/>
<b>基本的な参照の仕方</b></p>

<hr><p class="auto">
<br class="auto"/>
　Zend_Dbを使いSelect文を発行するためには、Zend_Db_Selectを使用します。<br class="auto"/>
　Zend_Db_Selectのインスタンスを生成するには、Zend_Db_Adapterの「Select」メソッドを使います。</p>

<p class="auto">
　生成したインスタンスは、Select文で使われるメソッドを持っているので、<br class="auto"/>
　それに設定する値を渡すことによりSelect文が作られます。</p>

<p class="auto">
　作られたSelect文は「__toString()」メソッドによりSQLを取得する事ができます。<br class="auto"/>
　また、「fetchAll」メソッドなど行の取得メソッドにインスタンスを渡すことにより、<br class="auto"/>
　結果を直接受け取る事が出来ます。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル１</font><br class="auto"/>
　<font color="blue">簡単なSelect文の実行</font></p>

<pre>
$<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=select&ic=utf8" class="affiliate-link" target="_blank">select</a> = $db->select();
$select->from('test', '*');
$select->where('id IN(?)', 'array(1,3)');
$sql = $select->__toString();
$result = $db->fetchAll($sql);
</pre><p class="auto">
<br class="auto"/>
　このサンプルの結果、以下の情報が取得されます。</p>

<pre>
array(
　[0]=>array(['id']=>1, ['name']=>'hoge', ['text']=>'aaaaa'),
　[1]=>array(['id']=>3, ['name']=>'nyoge', ['text']=>'abcde')
)
</pre><p class="auto">
<br class="auto"/>
　各メソッドの詳しいメソッドはこのあとやるとして、全体的な流れはこのようになります。<br class="auto"/>
<br><br class="auto"/>
<b>「from」メソッド</b></p>

<hr><p class="auto">
<br class="auto"/>
　「from」メソッドでは、Select文で取得する項目と参照するテーブルを指定します。</p>

<pre>
$select = $db->select();
$select->from('bbb', 'aaa');
</pre><p class="auto">
<br class="auto"/>
　このように「from」メソッドに設定すると$selectインスタンスの中で、下記のSQL文が作らます。</p>

<pre>
SELECT aaa FROM bbb
</pre><p class="auto">
<br class="auto"/>
　また、複数のテーブルを参照したい場合は、「from」メソッドを連続して実施します。</p>

<pre>
$select = $db->select();
$select->from('test1', 'aaa');
$select->from('test2', 'bbb');
</pre><p class="auto">
<br class="auto"/>
　結果、以下のSQL文が作成されます。</p>

<pre>
SELECT aaa,bbb FROM test1,test2
</pre><p class="auto">
<br class="auto"/>
　もちろんテーブルや項目に別名を振る事も可能です。</p>

<pre>
$select = $db->select();
$select->from('test1 as t1', 't1.aaa');
$select->from('test2 as t2', 't2.bbb');
</pre><p class="auto">
<br class="auto"/>
　結果、以下のSQL文が作成されます。</p>

<pre>
SELECT t1.aaa,t2.bbb FROM test1 as t1,test2 as t2
</pre><p class="auto">
<br class="auto"/>
　テーブルをJOINさせたい場合には、「join」メソッドを使用します。<br class="auto"/>
　使い方は「from」メソッドとさほど違いはありませんが、テーブル名とカラム名の間に接続条件を指定します。</p>

<pre>
$select = $db->select();
$select->from('test1', '*');
$select->join('test2', 'test1.id = test2.id', '*');
</pre><p class="auto">
<br class="auto"/>
　結果、以下のSQL文が作成されます。</p>

<pre>
SELECT *, * FROM test1 JOIN test2 ON test1.id = test2.id
</pre>
<p class="auto">
<br><br class="auto"/>
<b>「where」メソッド</b></p>

<hr><p class="auto">
<br class="auto"/>
　「where」メソッドでは、Select文で指定するwhere条件を指定します。</p>

<pre>
$select = $db->select();
$select->from('test', '*');
$select->where('test', '*');
</pre><p class="auto">
<br class="auto"/>
　このように「where」メソッドに設定すると$selectインスタンスの中で、下記のSQL文が作らます。</p>

<pre>
SELECT * FROM test WHERE id='1'
</pre><p class="auto">
<br class="auto"/>
　条件が複数ある場合、「where」メソッドを連続して使用するとAND条件、<br class="auto"/>
　「orWhere」メソッドを実行するとOR条件になります。</p>

<pre>
$select = $db->select();
$select->from('test', '*');
$select->where('name=?', 'hoge');
$select->where('id=?', 1);
$select->orWhere('id=?', 2);
</pre><p class="auto">
<br class="auto"/>
　このように「where」、「orWhere」メソッドに設定すると$selectインスタンスの中で、下記のSQL文が作らます。</p>

<pre>
SELECT * FROM test WHERE name='hoge' AND id='1' OR id='2'
</pre><p class="auto">
<br class="auto"/>
　また、「orWhere」メソッドは、先にwhere条件が指定されていない場合、<br class="auto"/>
　OR条件がつかないので、「where」メソッドと同じ使い方が出来ます。</p>

<p class="auto">
　なお、以下の様な「()」を利用した条件の設定は出来ません。</p>

<pre>
SELECT * FROM test WHERE name='hoge' AND (id='1' OR id='2')
</pre><p class="auto">
<br class="auto"/>
　現在のZend_Dbでは、このようなメソッドは提供されていないので、<br class="auto"/>
　「Zend/Db/Select.php」の「where」、「orWhere」メソッドを拡張、または機能を追加します。</p>

<p class="auto">
　例えば、やっつけ感が漂う以下の処理を「Select.php」に追加。</p>

<pre>
public function orWhere2($cond_arr) {
　foreach($cond_arr as $cond) {　
　　if ($this->_parts['where']) { $this->_parts['where'][] = "OR $cond)"; }
　　else { $this->_parts['where'][] = '('.$cond; }
　}
　return $this;
}
</pre><p class="auto">
<br class="auto"/>
　で、コントローラから呼び出してみると、</p>

<pre>
$select = $db->select();
$select->from('test', '*');
$select->orWhere2(array('id=1', 'id=2'));
</pre><p class="auto">
<br class="auto"/>
　下記のSQLが作成されます。</p>

<pre>
SELECT * FROM test WHERE (id=1 OR id=2)
</pre>
<p class="auto">
<br><br class="auto"/>
<b>出力制限</b></p>

<hr><p class="auto">
<br class="auto"/>
　Zend_Dbでは、「limit」メソッドを使い件数とオフセットで絞り込んだり、<br class="auto"/>
　「limitPage」メソッドを使い出力するページを指定するなどの出力制御を行う事が出来ます。</p>

<p class="auto">
　サンプルとして、1ページに表示される件数を5件として、4ページ目を表示したい場合は、以下のように書きます。</p>

<pre>
$select = $db->select();
$select->from('test', '*');
$select->limitPage(4, 5);
</pre><p class="auto">
<br class="auto"/>
　その結果、(MySQLの場合は)下記のSQLが作られます。</p>

<pre>
SELECT * FROM test LIMIT 15, 5
</pre><p class="auto">
<br class="auto"/>
　ただし、出力制御を行うSQLはDBMSによって異なります。<br class="auto"/>
　この辺りはZend_Dbによってうまく吸収され同じ動作を行うようになっていますが、<br class="auto"/>
　詳しくは<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">マニュアル</a>の<a href="http://framework.zend.com/manual/ja/zend.db.select.html#zend.db.select.limit">5.3.8</a>、および<a href="http://framework.zend.com/manual/ja/zend.db.select.html#zend.db.select.paging">5.3.9</a>を参照して下さい。</p>

<p class="auto">
　ちなみに今回サンプルで行った方法だと、マニュアルと微妙に違う結果が返って着ているので、<br class="auto"/>
　やはり実際に動かす前に「__toString」メソッドでSQL文の確認をした方が無難だと思います。<br class="auto"/>
<br><br class="auto"/>
<b>他のメソッド</b></p>

<hr><p class="auto">
<br class="auto"/>
　Zend_Dbでは、これまで挙げた物の他に、ORDER BY句の「order」メソッド、<br class="auto"/>
　GROUP BY句の「group」メソッド、HAVING条件の「having」メソッドが提供されています。</p>

<p class="auto">
　基本的な使い方は、これまでのメソッドと同様に指定したい値を渡し、<br class="auto"/>
　また条件を複数指定したい場合は、複数回実施します。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル２</font><br class="auto"/>
　<font color="blue">その他のメソッドの実行</font></p>

<pre>
$select = $db->select();
$select->from('test', 'name, text, count(*) as cnt');
$select->group('name');
$select->group('text');
$select->having('cnt>?', 2);
$select->order('name');
$sql = $select->__toString();
</pre><p class="auto">
<br class="auto"/>
　その結果、下記のSQLが返されます。</p>

<pre>
SELECT name, text, count(*) as cnt FROM test 
GROUP BY name, text
HAVING cnt>'2' 
ORDER BY name ASC
</pre><p class="auto">
<br class="auto"/>
　いくつかポイントとして、<br class="auto"/>
　2回実施している「group」メソッドは、配列にして渡す事で1回にする事が可能です。<br class="auto"/>
　また、「having」メソッドは「where」メソッドと同様にクォーク処理が行われています。<br class="auto"/>
　「order」メソッドは並び順を指定しない場合は、デフォルトで昇順(ASC）が設定されます。<br class="auto"/>
　降順で表示したい場合は、明示的に'DESC'を付ける必要があります。<br class="auto"/>
</p>

<p class="auto">
ここまででDB周りについての基本的な事は終了。<br class="auto"/>
次回はリクエストについてやります。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-01-15"> 
    <title>Zend Frameworkについて(DB編２)</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-01-15</link>  
    <description><![CDATA[<p>前回の続きということで、DBのトランザクション、およびDBの更新系処理について。マニュアルでは5.1.4からです。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-01-15T00:52:47+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- pre { font-family: monospace;border:#AAAA77 1px solid;padding:1em;margin-left:1em;margin-right:2em;white-space:pre;color:black;background-color:#FFFFEE;line-height: 110%;} --></style><br class="auto"/>
前回の続きということで、DBのトランザクション、およびDBの更新系処理について。<br class="auto"/>
<a href="http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter.transactions">マニュアル</a>では5.1.4からです。<a name="more"></a><br class="auto"/>
<br><br class="auto"/>
<b>トランザクション処理</b></p>

<hr><p class="auto">
<br class="auto"/>
　<a href="http://yougo.ascii24.com/gh/10/001081.html">トランザクション</a>は、データの整合性を保つために必要不可欠な機能である。</p>

<p class="auto">
　Zend_Dbではトランザクション処理を明記しない場合は、<br class="auto"/>
　「自動コミット」モードという動作をしてしまう。</p>

<p class="auto">
　そのため、<a href="http://blog.so-net.ne.jp/pluto-blog/2007-01-14-2">前回のDB編１</a>で行った「query」メソッドで<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=SQL&ic=utf8" class="affiliate-link" target="_blank">SQL</a>を実行する場合、<br class="auto"/>
　SQLにUpdateやDeleteを行った場合に自動的にコミットされDBに反映されてしまう。<br class="auto"/>
　これだと多数の<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9&ic=utf8" class="affiliate-link" target="_blank">アクセス</a>が同時に行われる可能性がある<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&ic=utf8" class="affiliate-link" target="_blank">システム</a>の場合、<br class="auto"/>
　データの不整合が生じてしまう可能性があるので、</p>

<p class="auto">
　その対策としてZend_Dbでは、トランザクション機能が提供されている。<br class="auto"/>
　（※正確にはDBMSのトランザクション機能を使用しているので、機能が無ければ使えない）</p>

<p class="auto">
　トランザクション処理を行う場合、Zend_Dbの以下のメソッドを利用する。</p>

<p class="auto">
　<font color="blue">トランザクションの開始</font></p>

<pre>
$db->beginTransaction();
</pre><p class="auto">
<br class="auto"/>
　<font color="blue">コミット</font></p>

<pre>
$db->commit();
</pre><p class="auto">
<br class="auto"/>
　<font color="blue">ロールバック</font></p>

<pre>
$db->rollBack();
</pre><p class="auto">
<br class="auto"/>
　トランザクション処理を組み込んだクエリ実行のサンプルを作ってみる。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル１</font></p>

<pre>
public function runSQL($sql) {
　// トランザクション開始
　$this->_db->beginTransaction();
　try {
　　// クエリ実行
　　$this->_db->query($sql);
　　// 成功した場合はコミットする
　　$this->_db->commit();
　　return ture;
　} catch (Exception $e) {
　　// 失敗した場合はロールバックしてエラーメッセージを返す
　　$this->_db->rollBack();
　　return $e->getMessage();
　}
}
</pre><p class="auto">
<br class="auto"/>
　※１ $this->_dbにDBに接続したDBオブジェクトが格納されている。<br class="auto"/>
　※２ $sqlには更新や削除が行われるSQLが与えられるとする。</p>

<p class="auto">
　この結果、処理が正常に行われた場合はコミットされ戻り値に「<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=true&ic=utf8" class="affiliate-link" target="_blank">true</a>」を返し、<br class="auto"/>
　エラーが発生した場合はロールバックを行い、エラーメッセージを返すようになる。<br class="auto"/>
<br><br class="auto"/>
<b><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89&ic=utf8" class="affiliate-link" target="_blank">レコード</a>追加処理</b></p>

<hr><p class="auto">
<br class="auto"/>
　Zend_Dbでは、「insert」文をSQLで書かなくても実施できる仕組みが提供されています。</p>

<p class="auto">
　それが「insert」メソッドを利用した方法で、追加するデータと追加する<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">テーブル</a>名を渡すと、<br class="auto"/>
　追加するデータを自動的にクォートした状態で、レコードの追加処理が行われます。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル２</font><br class="auto"/>
　<font color="blue">レコード追加処理</font></p>

<pre>
public function runInsert() {
　// 追加するデータ
　$row = array (
　　'id' => 1,
　　'<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=name&ic=utf8" class="affiliate-link" target="_blank">name</a>' => 'hoge',
　　'text' => 'test',
　);
　// 行を挿入するテーブル
　$table = 'test';
　// 行を挿入し、その行の ID を取得します
　$ret = $db->insert($table, $row);
</pre><p class="auto">
<br class="auto"/>
　※１ $this->_dbにDBに接続したDBオブジェクトが格納されている。<br class="auto"/>
　※２ 「test」テーブルには id、name、text の3つの項目があるとする。<br class="auto"/>
　※３ トランザクション処理は割愛（本当は当然書かなきゃダメ）。</p>

<p class="auto">
　処理が成功した場合、$retには追加された行の数、このサンプルでは1行なので「1」が返され、<br class="auto"/>
　$rowで定義したデータレコードが作成されます。<br class="auto"/>
<br><br class="auto"/>
<b>レコード更新処理</b></p>

<hr><p class="auto">
<br class="auto"/>
　Zend_Dbでは、「update」文をSQLで書かなくても実施できる仕組みが提供されています。</p>

<p class="auto">
　それが「update」メソッドを利用した方法で、更新するデータ、テーブル、条件を渡すと、<br class="auto"/>
　更新するデータを自動的にクォートした状態で、レコードの更新処理が行われます。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル３</font><br class="auto"/>
　<font color="blue">レコード更新処理</font></p>

<pre>
public function runUpdate() {
　// 更新するデータ
　$set = array (
　　'name' => 'poge',
　　'text' => 'namahage',
　);
　// 行を挿入するテーブル
　$table = 'test';
　// WHERE 句
　$where= 'id='.$db->quote('1');;
　// テーブルを更新して、更新された行数を返す
　$ret = $db->update($table, $set, $where);
</pre><p class="auto">
<br class="auto"/>
　※１ $this->_dbにDBに接続したDBオブジェクトが格納されている。<br class="auto"/>
　※２ 「test」テーブルには id、name、text の3つの項目があるとする。<br class="auto"/>
　※３ トランザクション処理は割愛（本当は当然書かなきゃダメ）。</p>

<p class="auto">
　処理が成功した場合、$retには更新された行の数、このサンプルではKeyを条件に設定しているので、<br class="auto"/>
　1行更新ということで「1」が返されます。<br class="auto"/>
　ちなみに、$setで指定している更新情報は自動的にクォートされるが、<br class="auto"/>
　$where句で指定する値は自動的にクォートされないので、明示的にクォート処理を行う必要がある。<br class="auto"/>
<br><br class="auto"/>
<b>レコード削除処理</b></p>

<hr><p class="auto">
<br class="auto"/>
　Zend_Dbでは、「delete」文をSQLで書かなくても実施できる仕組みが提供されています。</p>

<p class="auto">
　それが「delete」メソッドを利用した方法で、削除するレコードのあるテーブル、条件を渡すと、<br class="auto"/>
　削除するレコードの削除処理が行われます。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル４</font><br class="auto"/>
　<font color="blue">レコード削除処理</font></p>

<pre>
public function runDelete() {
　// 行を挿入するテーブル
　$table = 'test';
　// WHERE 句
　$where = $db->quoteInto('id = ?', '1');
　// テーブルを更新して、更新された行数を返す
　$ret = $db->delete($table, $where);
</pre><p class="auto">
<br class="auto"/>
　※１ $this->_dbにDBに接続したDBオブジェクトが格納されている。<br class="auto"/>
　※２ 「test」テーブルには id=1 のレコードが存在するとする。<br class="auto"/>
　※３ トランザクション処理は割愛（本当は当然書かなきゃダメ）。</p>

<p class="auto">
　処理が成功した場合、$retには削除された行の数が渡されます。<br class="auto"/>
　このサンプルではKeyを条件に設定しているので、1行削除ということで「1」が返されます。<br class="auto"/>
<br><br class="auto"/>
長くなってしまったので、今回はこの辺で。</p>

<p class="auto">
次回は参照についてやります。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-01-14-2"> 
    <title>Zend Frameworkについて(DB編１)</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-01-14-2</link>  
    <description><![CDATA[<p>Zend Frameworkを使ったDBの制御方法について。まぁとりあえずって事で、DBにMySQLを使って、DBの制御とトランザクションを行う方法についてまでやります。マニュアル では5.1からです。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-01-14T18:48:20+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- pre { font-family: monospace;border:#AAAA77 1px solid;padding:1em;margin-left:1em;margin-right:2em;white-space:pre;color:black;background-color:#FFFFEE;line-height: 110%;} --></style><br class="auto"/>
Zend <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=Framework&ic=utf8" class="affiliate-link" target="_blank">Framework</a>を使ったDBの制御方法について。</p>

<p class="auto">
まぁとりあえずって事で、<br class="auto"/>
DBにMySQLを使って、DBの制御とトランザクションを行う方法についてまでやります。<br class="auto"/>
<a href="http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter">マニュアル </a>では5.1からです。<a name="more"></a><br class="auto"/>
<br><br class="auto"/>
<b>Zend_DBについて</b></p>

<hr><p class="auto">
<br class="auto"/>
　<a href="http://jp2.php.net/pdo">PDO</a>に基づいた<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&ic=utf8" class="affiliate-link" target="_blank">データベース</a>APIの抽象化レイヤー。<br class="auto"/>
　<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">サポート</a>しているDBMSは、「<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=SQL&ic=utf8" class="affiliate-link" target="_blank">SQL</a> <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=Server&ic=utf8" class="affiliate-link" target="_blank">Server</a>」、「MySQL」、「PostgreSQL」、「SQLite」 など。</p>

<p class="auto">
　ただ、<a href="http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter">マニュアル5.1.1</a>には書いてないけど、「Zend/Db/Adapter」ディレクトリを見ると、<br class="auto"/>
　「Oracle」や「DB2」のディレクトリが用意されているので、おそらく使えるっぽい。<br class="auto"/>
　ただ、「Pdo」ディレクトリには「oracle（oci.php）」しかないので、「DB2」は他と違う使い方になるかも。<br class="auto"/>
<br><br class="auto"/>
<b>DB接続</b></p>

<hr><p class="auto">
<br class="auto"/>
　DBの接続はZend_Dbクラスの「factory」メソッドを使用して接続する。</p>

<p class="auto">
　Zend_Dbクラスを使うためには、「Zend/Db.php」を読込む必要がある。<br class="auto"/>
　ちなみに<a href="http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter">マニュアル5.1.1</a>では、require_<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=once&ic=utf8" class="affiliate-link" target="_blank">once</a>で読込んでいるが、<br class="auto"/>
　Zend Framework内ではloadClassを使って読込んでも大丈夫だと思う。というか、ちゃんと動いた。</p>

<pre>
Zend::loadClass('Zend_DB');
</pre><p class="auto">
</p>

<p class="auto">
　「factory」メソッドにPDOパラメータとDB情報を渡すことにより、DB接続を行うことが出来る。</p>

<pre>
Zend_Db::factory('[ PDOパラメータ ]', [ DB接続情報 ]);
</pre><p class="auto">
<br class="auto"/>
　PDOパラメータは「Zend/Db/Adapter/Pdo/」配下に用意されているDBMS名と<br class="auto"/>
　PDOを組み合わせた形で設定する。<br class="auto"/>
　　例） MySQLの場合・・・PDO_MYSQL</p>

<p class="auto">
　DB接続情報には、DB接続を行うために必要な情報（ホスト名、ユーザ名など）を配列で渡す。</p>

<p class="auto">
　以下、DBに接続するサンプルです。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル１</font><br class="auto"/>
　<font color="blue">DB設定</font></p>

<pre>
ホスト：127.0.0.1
ユーザ：hoge
パスワード：password
DB名：test
</pre><p class="auto">
<br class="auto"/>
　<font color="blue">接続コード</font></p>

<pre>
// 接続情報を指定
$params = array ('host' => '127.0.0.1',
　　'username' => 'hoge',
　　'password' => 'password',
　　'dbname'   => 'test');
// MySQLに接続
$db = Zend_Db::factory('PDO_MYSQL', $params);
</pre><p class="auto">
<br class="auto"/>
　これで $dbにデータベース接続インスタンスが生成される。</p>

<p class="auto">
　また、Db.phpの「factory」メソッドを見ると、<br class="auto"/>
　「Adapter/Pdo」ディレクトリではなく「Adapter」ディレクトリ直下を見に行く処理もあるので、<br class="auto"/>
　PDOを使わないやり方もあると思われるが、今回は素直にPDOを使う方法で試していく。<br class="auto"/>
<br><br class="auto"/>
<b>クエリの実行</b></p>

<hr><p class="auto">
<br class="auto"/>
　クエリの実行はZend_DBの「query」メソッドを使う。<br class="auto"/>
　「query」メソッドにSQLを渡すと、結果をPDOStatementオブジェクトで返します。<br class="auto"/>
　このオブジェクトの「fetchAll」メソッドを実行する事で、結果を配列で取得できます。</p>

<p class="auto">
　以下、接続したDBにクエリを投げて結果を取得するサンプルです。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル２</font><br class="auto"/>
　<font color="blue">DB設定</font></p>

<pre>
$result = $db->query('<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=select&ic=utf8" class="affiliate-link" target="_blank">select</a> * from test');
$row = $result->fetchAll();
</pre><p class="auto">
<br class="auto"/>
　$dbはサンプル１で接続したDBインスタンス。<br class="auto"/>
　実行すると$rowにSQLの結果が配列で格納される。</p>

<p class="auto">
　サンプルはSELECT文なので、結果が配列で帰ってくるが、<br class="auto"/>
　UPDATE文など結果がないSQLを投げた場合は、<br class="auto"/>
　成功可否に関わらず空配列を返します。<br class="auto"/>
<br><br class="auto"/>
<b>クォート処理</b></p>

<hr><p class="auto">
<br class="auto"/>
　<a href="http://allabout.co.jp/internet/cgiperl/closeup/CU20030307A/index2.htm#quotation">クォーテーション処理</a>の事。<br class="auto"/>
　値をダブルクォーテーションや<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">シングル</a>クォーテーションで囲む処理を行う。</p>

<p class="auto">
　<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88&ic=utf8" class="affiliate-link" target="_blank">リクエスト</a>から受け取った値などを元にSQL文を作成する場合、<br class="auto"/>
　直接渡すと<a href="http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html">SQLインジェクション</a>などの攻撃を受ける可能性があるので、<br class="auto"/>
　値に対しクォート処理を施す事が必要になってくる。</p>

<p class="auto">
　クォート処理に関しては<a href="http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter.quoting">マニュアル5.1.2</a>で詳細に取り上げられているので、そちらも合わせて参照で。</p>

<p class="auto">
　クォート処理はZend_Dbの「quote」メソッド、「quoteInto」メソッド、<br class="auto"/>
　または「query」メソッド内でのクォート処理など、いろいろな方法があるが、<br class="auto"/>
　今回は比較的よく使いそうな「quote」、「quoteInto」メソッドを利用して、<br class="auto"/>
　簡単なサンプルを作ってみる。</p>

<p class="auto">
　「quote」メソッドは値に対してクォート処理が行われ、<br class="auto"/>
　「quoteInto」メソッドは「?」指定された場所に、クォートされた$textの値が設定される。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル３</font><br class="auto"/>
　<font color="blue">「quote」メソッド</font></p>

<pre>
$text = $this->_request->getPost('txt1');
$where = 'where text='.$db->quote($text);
$sql .= $sql.$where;
</pre><p class="auto">
<br class="auto"/>
　<font color="blue">「quoteInfo」メソッド</font></p>

<pre>
$text = $this->_request->getPost('txt1');
$where = 'where '.$db->quoteInto('text=?',$text);
$sql .= $sql.$where;
</pre><p class="auto">
<br class="auto"/>
　これらのサンプルの結果、postされる「txt1」リクエストの値が「hoge's」だとした場合、$sqlには</p>

<pre>
$sql = 'where text="hoge\'s"'
</pre><p class="auto">
<br class="auto"/>
　が格納される。</p>

<p class="auto">
　クォート処理によって「'」が「\'」にエスケープされ、かつ値全体に「"」でクォートされる。</p>

<p class="auto">
　今回、<a href="http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter.quoting">マニュアル5.1.2</a>に載っている他のやり方も試したが、<br class="auto"/>
　「prepare」メソッドを使用するやり方だけエラーが出てしまいうまく動作しなかった。<br class="auto"/>
　原因はいまだ調査中でよくわからないので、しばらくは他のやり方で進めて行きたいと思う。<br class="auto"/>
<br><br class="auto"/>
とても長くなってしまったので、今回はこの辺で・・・</p>

<p class="auto">
次回、トランザクションとDBの更新系をやります。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-01-14-1"> 
    <title>Zend Frameworkについて(View編３)</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-01-14-1</link>  
    <description><![CDATA[<p>今回はZend_Viewに別テンプレートエンジンを組み込む方法について。マニュアルでは18.3.2からです。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-01-14T17:45:11+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- pre { font-family: monospace;border:#AAAA77 1px solid;padding:1em;margin-left:1em;margin-right:2em;white-space:pre;color:black;background-color:#FFFFEE;line-height: 110%;} --></style><br class="auto"/>
今回はZend_Viewに別テンプレート<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3&ic=utf8" class="affiliate-link" target="_blank">エンジン</a>を組み込む方法について。<br class="auto"/>
<a href="http://framework.zend.com/manual/ja/zend.view.scripts.html#zend.view.scripts.templates">マニュアル</a>では18.3.2からです。<a name="more"></a></p>

<p class="auto">
<a href="http://framework.zend.com/manual/ja/zend.view.scripts.html#zend.view.scripts.templates">マニュアル</a>によると別テンプレートエンジンを組み込むには、<br class="auto"/>
ビュースクリプトを使う方法と「Zend_View_Interface」を使う方法の2つが紹介されているが、<br class="auto"/>
ビュースクリプトを使う方法がどうもうまく動かないので、<br class="auto"/>
今回は「Zend_View_Interface」を使う方法を取り上げてみる。<br class="auto"/>
<br><br class="auto"/>
<b>「Zend_View_Interface」を使い他のテンプレートエンジンを利用する</b></p>

<hr><p class="auto">
<br class="auto"/>
　組み込んでみるテンプレートエンジンはおなじみの<a href="http://sunset.freespace.jp/Smarty/SmartyManual_2-6-3J_html/">Smarty</a>。</p>

<p class="auto">
　ちょうど<a href="http://framework.zend.com/manual/ja/zend.view.scripts.html#zend.view.scripts.templates.interface">マニュアルの18.3.2.2</a>に<a href="http://sunset.freespace.jp/Smarty/SmartyManual_2-6-3J_html/">Smarty</a>を利用するためのラッパークラスのサンプルが乗っているので、<br class="auto"/>
　おぉこれは楽だ！と言う事でサンプルを利用してやってみる。<br class="auto"/>
<br><br class="auto"/>
　・・・動かん。</p>

<p class="auto">
　って、よく見たらコンパイルしたテンプレートの格納パスを指定していない。<br class="auto"/>
　とりあえずコンパイルディレクトリのパスを指定するメソッドを追加して、<br class="auto"/>
　改めて動かしてみるがやっぱり動かない。なぜだ。</p>

<p class="auto">
　そこで、いろいろ試してみた結果、<br class="auto"/>
　作成したラッパーを「Zend::loadClass」を使わずに「require_<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=once&ic=utf8" class="affiliate-link" target="_blank">once</a>」で読込めば動く事が判明。</p>

<p class="auto">
　う～ん。これだとなんかヤダ。<br class="auto"/>
<br><br class="auto"/>
　で、さらにいろいろ調べたところ、<br class="auto"/>
　loadClassで持ってくる<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ファイル</a>名は「_」で区切っているみたいなので、<br class="auto"/>
　ファイル名から余計な「_」を取ってみる。</p>

<p class="auto">
　動いた・・・ はぁ・・・<br class="auto"/>
<br><br class="auto"/>
　とりあえず<a href="http://framework.zend.com/manual/ja/zend.view.scripts.html#zend.view.scripts.templates.interface">マニュアルの18.3.2.2</a>に載っているラッパーに以下の2点を変更したら動きました。</p>

<pre>
１．ファイル、クラス名を変更
　ファイル名 ： 「Zend_View_Smarty.php」→「Zend_ViewSmarty.php」
　クラス名 ： 「Zend_View_Smarty」→「Zend_ViewSmarty」

２．Smartyのコンパイルディレクトリパス設定メソッドの追加
    public function setCompilePath($path) {
        if (is_readable($path)) {
            $this->_smarty->compile_dir = $path;
            return;
        }
        throw new Exception('無効なパスが指定されました');
    }
</pre><p class="auto">
<br class="auto"/>
　これを使った簡単なサンプル。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル</font><br class="auto"/>
　<font color="blue">コントローラ</font></p>

<pre>
Zend::loadClass('Zend_Controller_Action');
Zend::loadClass('Zend_ViewSmarty');
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=class&ic=utf8" class="affiliate-link" target="_blank">class</a> testController extends Zend_Controller_Action {
　public function hogeAction() {
　　// クラス宣言
　　$<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=view&ic=utf8" class="affiliate-link" target="_blank">view</a> = new Zend_ViewSmarty();
　　// スクリプト、コンパイル パス指定
　　$view->setScriptPath('/var/www/zend/application/view/temp/');
　　$view->setCompilePath('/var/www/zend/application/view/temp_c/');
　　// 変数のアサイン
　　$view->assign('prm1', "ほげほげ");
　　// テンプレート描画
　　echo $view->render('hoge.tpl');
　}
}
</pre><p class="auto">
<br class="auto"/>
　<font color="blue">テンプレート（hoge.tpl）</font></p>

<pre>
&lt;html&gt;
&lt;head&gt;&lt;title&gt;ほげテスト&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
　&lt;p&gt;{$prm1}&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre><p class="auto">
<br class="auto"/>
　これでViewクラスと同じ使い方でSmartyを走らせる事が出来るようになる・・・ハズ。</p>

<p class="auto">
　他にSmartyのpluginsが使えるか試したかったけど、<br class="auto"/>
　「setHelperPath」メソッドみたいなメソッドがないから、<br class="auto"/>
　自分で作らないとならないんだろうな・・・</p>

<p class="auto">
　ここまで来るのに、何気に丸一日くらいかかってしまったので今回はこの辺で・・<br class="auto"/>
<br><br class="auto"/>
とりあえずSmartyが動いたのでViewはここまでにして、<br class="auto"/>
次回からDB周りについて書きます。</p>

<p class="auto">
Smartyのpluginについては、時間が出来たら試してみます。<br class="auto"/>
<br><br class="auto"/>
<b>備忘録：</b></p>

<hr><p class="auto">
<br class="auto"/>
　いろいろ調べている時に偶然発見。<br class="auto"/>
　インタフェースを実装しないで、フロントコントローラで実装させる方法もあるらしい。<br class="auto"/>
　ざっと流し見た感じだと、こちらの方法の方がスマートな感じ。</p>

<p class="auto">
　　<a href="http://kpumuk.info/php/zend-framework-using-smarty-as-template-engine/">http://kpumuk.info/php/zend-framework-using-smarty-as-template-engine/</a></p>

<p class="auto">
　今のところ試す気力がないから試さないけど、<br class="auto"/>
　いつか試すよう忘れないよう張っておく。</p>


]]></content:encoded> 
  </item>  
  <item rdf:about="http://pluto-blog.blog.so-net.ne.jp/2007-01-14-3"> 
    <title>Zend Frameworkについて(View編２)</title>  
    <link>http://pluto-blog.blog.so-net.ne.jp/2007-01-14-3</link>  
    <description><![CDATA[<p>Viewについての続き。マニュアルでは18.4からです。</p>]]></description>  
    <dc:subject>Zend Framework</dc:subject>  
    <dc:creator>pluto</dc:creator>  
    <dc:date>2007-01-14T15:39:48+09:00</dc:date>  
    <content:encoded><![CDATA[
<p class="auto">
<style type="text/css"><!-- pre { font-family: monospace;border:#AAAA77 1px solid;padding:1em;margin-left:1em;margin-right:2em;white-space:pre;color:black;background-color:#FFFFEE;line-height: 110%;} --></style><br class="auto"/>
Viewについての続き。<br class="auto"/>
<a href="http://framework.zend.com/manual/ja/zend.view.helpers.html#zend.view.helpers.initial">マニュアル</a>では18.4からです。<a name="more"></a><br class="auto"/>
<br><br class="auto"/>
<b><a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC&ic=utf8" class="affiliate-link" target="_blank">ヘルパー</a>について</b></p>

<hr><p class="auto">
<br class="auto"/>
　HTMLタグや繰り返し処理をいちいち書かなくてもいいように、<br class="auto"/>
　Zend_Viewではヘルパーと呼ばれるテンプレートで使える関数が提供されています。</p>

<p class="auto">
　Zend_Viewが提供しているヘルパーは、<a href="http://framework.zend.com/manual/ja/zend.view.helpers.html#zend.view.helpers.initial">マニュアル</a>参照。</p>

<p class="auto">
　サンプルとして「formText」ヘルパーを使ってみます。</p>

<pre>
&lt;?php echo $this->formText('text1', 123, array('<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=size&ic=utf8" class="affiliate-link" target="_blank">size</a>'=>30)) ?&gt;
</pre><p class="auto">
<br class="auto"/>
　これを<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6&ic=utf8" class="affiliate-link" target="_blank">ブラウザ</a>で表示した場合、次のHTMLタグが作成されます。</p>

<pre>
&lt;input type="text" <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=name&ic=utf8" class="affiliate-link" target="_blank">name</a>="text1" id="text1" value="123" size="30" /&gt;
</pre><p class="auto">
<br class="auto"/>
　また、この時に表示される値は自動的に<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97&ic=utf8" class="affiliate-link" target="_blank">エスケープ</a>された値が設定されています。</p>

<p class="auto">
　Zend_Viewで提供されているヘルパーは主にフォーム要素作成用ですが、<br class="auto"/>
　他のヘルパーが欲しい場合は、独自にヘルパーを作る事が出来ます。</p>

<p class="auto">
　独自ヘルパーを作るにあたり、ここでも命名規則が存在します。</p>

<pre>
<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=class&ic=utf8" class="affiliate-link" target="_blank">class</a> View_Helper_xxxx
</pre><p class="auto">
<br class="auto"/>
　このxxxxの部分（クラス名の最後の部分）にヘルパーのメソッド名を指定します。<br class="auto"/>
　さらに<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=pluto-blog:000203868667&k=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ic=utf8" class="affiliate-link" target="_blank">ファイル</a>名もヘルパーのメソッド名、この場合は「xxxx.php」と名付ける必要があります。<br class="auto"/>
　ちなみに「View_Helper」は自由に変える事が出来ますが、<br class="auto"/>
　独自ヘルパーのクラス名に「View_Helper」を含める事はZendが推奨しています。</p>

<p class="auto">
　自作ヘルパーは任意の場所に格納する事が出来ます。<br class="auto"/>
　それにはコントローラでViewクラスの「setHelperPath」メソッドを使って、<br class="auto"/>
　格納パスを指定する必要があります。</p>

<pre>
$view->setHelperPath('[ 格納パス ]', '[ プレフィックス名 ]');
</pre><p class="auto">
<br class="auto"/>
　[ 格納パス ]に自作ヘルパーを格納しているパスを設定します。<br class="auto"/>
　この時、Zend_Viewのヘルパーと同じ場所に格納しても、<br class="auto"/>
　格納パスは指定する必要があるので注意が必要です。</p>

<p class="auto">
　[ プレフィックス名 ]には独自ヘルパークラスのヘルパー名の前の部分を指定します。<br class="auto"/>
　サンプルの「View_Helper_xxxx」の場合、「View_Helper」がそれになります。</p>

<p class="auto">
　独自ヘルパーのサンプルとして、リンクタグを作るヘルパーを作ってみます。</p>

<p class="auto">
　<font color="green">超絶簡単サンプル</font><br class="auto"/>
　<font color="blue">makeLinkTag.php</font></p>

<pre>
class View_Helper_makeLinkTag {
　public function makeLinkTag($url, $text=null) {
　　if ($text) { $href = "&lt;a href='{$url}'>{$text}&lt;/a>"; }
　　else { $href = "&lt;a href='{$url}'>{$url}&lt;/a>"; }
　　return $href;
　}
}
</pre><p class="auto">
<br class="auto"/>
　ここでは$urlに指定されたURLでリンクタグを作成します。<br class="auto"/>
　$textが指定された場合は$textを、指定されなかった場合はURLをリンク名に表示させます。</p>

<p class="auto">
　<font color="blue">コントローラ内のアクションメソッド</font></p>

<pre>
$view->setHelperPath('/var/www/zend/application/library/Zend/View/MyHelper', 'View_Helper');
</pre><p class="auto">
<br class="auto"/>
　独自ヘルパーを使うテンプレートを出力する前に設定します。</p>

<p class="auto">
　<font color="blue">テンプレート</font></p>

<pre>
&lt;?php echo $this->makeLinkTag('<a href="http://www.google.co.jp/&#39;," target="_blank" class="auto">http://www.google.co.jp/&#39;,</a> 'Google') ?>
</pre><p class="auto">
<br class="auto"/>
　サンプルを実行することで、独自ヘルパーが動いて以下のHTMLタグが作成されます。</p>

<pre>
&lt;a href='<a href="http://www.google.co.jp/&#39;" target="_blank" class="auto">http://www.google.co.jp/&#39;</a>>Google&lt;/a&gt;
</pre>
<p class="auto">
<br><br class="auto"/>
Viewは簡単なとこだけでも書くことが多い・・<br class="auto"/>
他のテンプレートエンジンの使い方についてはまた次回。</p>


]]></content:encoded> 
  </item> 
</rdf:RDF>

