<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6895271190558144932</id><updated>2012-02-25T23:23:42.938+09:00</updated><category term='bazaar'/><category term='muzik'/><category term='fpac2011'/><category term='xampp'/><category term='fuelphp'/><category term='android'/><category term='git'/><category term='web'/><category term='twitter'/><category term='mac'/><category term='zendframework'/><category term='cakephp'/><category term='windows'/><category term='anddev'/><category term='eclipse'/><category term='none'/><category term='Facebook'/><category term='gae'/><category term='phpfog'/><category term='aptana'/><title type='text'>madroom project</title><subtitle type='html'>一度やったことは5分で片付けられるようにするための開発系ブログ+α。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8315893104042652241</id><published>2012-02-25T23:20:00.001+09:00</published><updated>2012-02-25T23:23:42.950+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='muzik'/><title type='text'>バンド向けFacebookページタブアプリ</title><content type='html'>日本でもFacebookユーザが増えてきたなーと思う今日この頃です。&lt;br /&gt;それに伴い、バンド(アーティスト)のFacebookページも自然と増えてきていると思います。&lt;br /&gt;しかし、Facebookはそもそも音楽系SNSでは無いので、&lt;br /&gt;単にFacebookページを作るだけだと、何だか味気ない。&lt;br /&gt;&lt;br /&gt;そんな時に、活躍しそうなFacebookページ用タブアプリを、いくつか紹介します。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;ReverbNation&lt;br /&gt;&lt;a href="http://www.reverbnation.com/"&gt;http://www.reverbnation.com/&lt;/a&gt;&lt;br /&gt;Facebookページを音楽系SNSに変化させてしまうくらい強烈です。&lt;br /&gt;使用しているページを見てみると、イメージが湧きやすいと思います。&lt;br /&gt;&lt;a href="https://www.facebook.com/sofiatalvikmusic?sk=app_2405167945"&gt;https://www.facebook.com/sofiatalvikmusic?sk=app_2405167945&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下、以前に細かく書いた記事です。&lt;br /&gt;&lt;a href="http://mamor-blog.tumblr.com/post/9455026216/reverbnation-facebook-sns"&gt;http://mamor-blog.tumblr.com/post/9455026216/reverbnation-facebook-sns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Facebookページに留まらず、サイトに貼り付けるWidgetやバナー等も充実しています。&lt;br /&gt;これが本命かなと、個人的には思っています。&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;BandRx&lt;br /&gt;&lt;a href="http://www.bandrx.com/"&gt;http://www.bandrx.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.facebook.com/BandRX"&gt;https://www.facebook.com/BandRX&lt;/a&gt;&lt;br /&gt;これも、ReverbNationのように、Facebookページが音楽系SNSになってしまいます。&lt;br /&gt;ReverbNationは自身でサービスを展開しつつ、Facebookアプリも提供しているわけですが、&lt;br /&gt;BandRxはFacebookページタブ用のサービスのようで、シンプルに使いやすいイメージです。&lt;br /&gt;とは言っても、必要な機能はしっかり整っていそうだし、ReverbNationには無い機能もありますね。&lt;br /&gt;SoundCloudにUPしてある音源を使えます。&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;RootMusic&lt;br /&gt;&lt;a href="http://www.bandpage.com/"&gt;http://www.bandpage.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.facebook.com/rootmusic"&gt;https://www.facebook.com/rootmusic&lt;/a&gt;&lt;br /&gt;BandRxに似いてると思います。&lt;br /&gt;SoundCloudにUPしてある音源を使えるのも似ていますね。&lt;br /&gt;BandRxと比べると、出来ることは少ないのかも。&lt;br /&gt;&lt;br /&gt;(4)&lt;br /&gt;Cueler YouTube&lt;br /&gt;&lt;a href="https://www.facebook.com/pages/Cueler-YouTube/321821187850686?sk=app_162891010412392"&gt;https://www.facebook.com/pages/Cueler-YouTube/321821187850686?sk=app_162891010412392&lt;/a&gt;&lt;br /&gt;これは、設定したYouTubeアカウントのアップロード動画、お気に入り動画、指定プレイリスト。&lt;br /&gt;を表示できるタブアプリです。(どれか一つです。)&lt;br /&gt;プレイリストが表示できるタブアプリは貴重な気がするので、併せて紹介してみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8315893104042652241?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8315893104042652241/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/02/facebook.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8315893104042652241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8315893104042652241'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/02/facebook.html' title='バンド向けFacebookページタブアプリ'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-9051990146536802589</id><published>2012-02-12T17:30:00.002+09:00</published><updated>2012-02-12T17:38:22.475+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>FuelPHPのORMパッケージを拡張してみる。</title><content type='html'>先に、ソースは&lt;br /&gt;&lt;a href="https://github.com/mp-php/fuelphp-packages-myorm"&gt;https://github.com/mp-php/fuelphp-packages-myorm&lt;/a&gt;&lt;br /&gt;にUPしてあります。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;created_atやupdated_atと同じノリで、created_ipとupdated_ipの保存をする&lt;br /&gt;独自ORMパッケージを作成してみました。&lt;br /&gt;created_ipとupdated_ipの型はvarcharで、長さは適当で良いかと。&lt;br /&gt;&lt;br /&gt;以下、手順です。&lt;br /&gt;&lt;br /&gt;fuel\packages下に"myorm"ディレクトリを作成。&lt;br /&gt;"myorm"ディレクトリの中に、以下の3ファイルを作成。&lt;br /&gt;fuel\packages\myorm\bootstrap.php&lt;br /&gt;fuel\packages\myorm\classes\observer\createdip.php&lt;br /&gt;fuel\packages\myorm\classes\observer\updatedip.php&lt;br /&gt;&lt;br /&gt;各ファイルは、以下の内容になります。&lt;br /&gt;&lt;br /&gt;fuel\packages\myorm\bootstrap.php&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;Autoloader::add_classes(array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'MyOrm\\Observer_CreatedIp' =&amp;gt; __DIR__.'/classes/observer/createdip.php',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'MyOrm\\Observer_UpdatedIp' =&amp;gt; __DIR__.'/classes/observer/updatedip.php',&lt;br /&gt;));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* End of file bootstrap.php */&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;fuel\packages\myorm\classes\observer\createdip.php&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;namespace MyOrm;&lt;br /&gt;&lt;br /&gt;class Observer_CreatedIp extends \Orm\Observer&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static $property = 'created_ip';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_property;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function __construct($class)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $props = $class::observers(get_class($this));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_property = isset($props['property']) ? $props['property'] : static::$property;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function before_insert(\Orm\Model $obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $obj-&amp;gt;{$this-&amp;gt;_property} = \Input::real_ip();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// End of file createdip.php&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;fuel\packages\myorm\classes\observer\updatedip.php&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;namespace MyOrm;&lt;br /&gt;&lt;br /&gt;class Observer_UpdatedIp extends \Orm\Observer&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static $property = 'updated_ip';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $_property;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function __construct($class)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $props = $class::observers(get_class($this));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;_property = isset($props['property']) ? $props['property'] : static::$property;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function before_save(\Orm\Model $obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ($obj-&amp;gt;is_new() or $obj-&amp;gt;is_changed())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $obj-&amp;gt;{$this-&amp;gt;_property} = \Input::real_ip();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// End of file createdip.php&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;このパッケージを使用するためにはapp/config/config.phpのalways_loadのpackagesに追加する必要があります。&lt;br /&gt;&lt;pre class="brush:php"&gt;'packages'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'orm',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'myorm',&lt;br /&gt;),&lt;/pre&gt;&lt;br /&gt;myormを使用するということは、まず間違いなくormも使用するはずなので、&lt;br /&gt;この2つを有効にして下さい。&lt;br /&gt;&lt;br /&gt;Modelの$_observersは以下のようになります。&lt;br /&gt;&lt;pre class="brush:php"&gt;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Orm\Observer_CreatedAt' =&amp;gt; array('events'=&amp;gt;array('before_insert'), 'mysql_timestamp' =&amp;gt; true,),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Orm\Observer_UpdatedAt' =&amp;gt; array('events'=&amp;gt;array('before_save'), 'mysql_timestamp' =&amp;gt; true,),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Orm\Observer_Validation'=&amp;gt; array('events'=&amp;gt;array('before_save')),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MyOrm&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'MyOrm\Observer_CreatedIp'=&amp;gt;array('events'=&amp;gt;array('before_insert')),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'MyOrm\Observer_UpdatedIp'=&amp;gt;array('events'=&amp;gt;array('before_save')),&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;"// MyOrm"の行以下が、今回の話と関係しています。&lt;br /&gt;&lt;br /&gt;これで、標準ORMパッケージに依存しつつ、完全に分離できたので&lt;br /&gt;思う存分、ORMに独自の機能を追加できそうです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-9051990146536802589?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/9051990146536802589/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/02/fuelphporm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/9051990146536802589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/9051990146536802589'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/02/fuelphporm.html' title='FuelPHPのORMパッケージを拡張してみる。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8136852561667876229</id><published>2012-02-06T02:10:00.000+09:00</published><updated>2012-02-06T02:10:05.532+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phpfog'/><title type='text'>phpfogとfile_get_contents</title><content type='html'>phpfogの無料版では、外部URLをfile_get_contentsできないようです。&lt;br /&gt;&lt;a href="http://docs.phpfog.com/index.php/features/article/shared_vs_dedicated"&gt;http://docs.phpfog.com/index.php/features/article/shared_vs_dedicated&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;なので、ajaxで外部サイトのデータを取ってきて、それをajaxで自サイト(phpfog)のapiに渡して&lt;br /&gt;HTML等のデータを生成。とかしないといけませんでした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8136852561667876229?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8136852561667876229/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/02/phpfogfilegetcontents.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8136852561667876229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8136852561667876229'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/02/phpfogfilegetcontents.html' title='phpfogとfile_get_contents'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-6277105877691853567</id><published>2012-02-06T02:06:00.000+09:00</published><updated>2012-02-06T02:06:10.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phpfog'/><title type='text'>phpfogでssl判定。</title><content type='html'>メモ。&lt;br /&gt;&lt;br /&gt;phpfogでは$_SERVER['HTTPS']によるssl判定が使えませんでした。&lt;br /&gt;その代わり、$_SERVER['HTTP_X_FORWARDED_PROTO']で出来ました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-6277105877691853567?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/6277105877691853567/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/02/phpfogssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/6277105877691853567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/6277105877691853567'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/02/phpfogssl.html' title='phpfogでssl判定。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1411408556885987309</id><published>2012-02-06T02:00:00.000+09:00</published><updated>2012-02-06T02:00:05.049+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><title type='text'>FacebookアプリでTesterがPending</title><content type='html'>FacebookアプリをSandBoxモードにしてTesterを追加。&lt;br /&gt;クローズドな環境で動作確認を進めたい。&lt;br /&gt;となった時、TesterがPendingとなり、&lt;br /&gt;Testerがアプリを利用ができない状態が発生しました。&lt;br /&gt;&lt;br /&gt;原因は、アプリの基本設定の"アプリの名前空間"が空だったから。みたいです。&lt;br /&gt;入力すると、Pendingの表示が消えて、正しく利用ができるようになりました。&lt;br /&gt;&lt;br /&gt;Facebookアプリはこの辺がなんかわかりにくい。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1411408556885987309?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1411408556885987309/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/02/facebooktesterpending.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1411408556885987309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1411408556885987309'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/02/facebooktesterpending.html' title='FacebookアプリでTesterがPending'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-591017708834487391</id><published>2012-01-28T23:03:00.000+09:00</published><updated>2012-01-28T23:03:06.109+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>DBViewerでUTF8をインサート</title><content type='html'>文字化けしたので、以下を参考にさせて頂き、解決。&lt;br /&gt;&lt;a href="http://memorandum-system.seesaa.net/article/151262007.html"&gt;http://memorandum-system.seesaa.net/article/151262007.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下、そのまま引用。&lt;br /&gt;--&lt;br /&gt;DBの文字コードがUTF-8で、SQL内に文字列を含むSQLを実行した場合、&lt;br /&gt;検索結果表示が文字化けする&lt;br /&gt;&lt;br /&gt;これを回避する為に、接続文字列に以下の文字列を追加する。&lt;br /&gt;?useUnicode=true&amp;characterEncoding=UTF8&lt;br /&gt;&lt;br /&gt;jdbc:mysql://:3306/&lt;データベース名&gt;?useUnicode=true&amp;characterEncoding=UTF8&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-591017708834487391?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/591017708834487391/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/dbviewerutf8.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/591017708834487391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/591017708834487391'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/dbviewerutf8.html' title='DBViewerでUTF8をインサート'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-4928545132129138930</id><published>2012-01-25T00:40:00.000+09:00</published><updated>2012-01-25T00:40:35.379+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>gitでファイルのパーミッション変更を無視する</title><content type='html'>gitはファイルパーミッションの変更を検知するようで&lt;br /&gt;--&lt;br /&gt;old mode xxxxxx&lt;br /&gt;new mode yyyyyy&lt;br /&gt;--&lt;br /&gt;とか出ました。&lt;br /&gt;&lt;br /&gt;これをoffにするには&lt;br /&gt;--&lt;br /&gt;git config core.filemode false&lt;br /&gt;--&lt;br /&gt;とするようです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-4928545132129138930?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/4928545132129138930/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/git.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4928545132129138930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4928545132129138930'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/git.html' title='gitでファイルのパーミッション変更を無視する'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2622530787330020050</id><published>2012-01-22T06:09:00.000+09:00</published><updated>2012-01-22T06:09:35.566+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>windows + gitでdifftoolやmergetoolをWinMergePortableにするメモ。</title><content type='html'>メモ。&lt;br /&gt;&lt;br /&gt;git config --global merge.tool winmerge&lt;br /&gt;git config --global mergetool.winmerge.cmd "C:/xxx/yyy/WinMergePortable/WinMergePortable.exe \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""&lt;br /&gt;git config --global mergetool.trustExitCode false&lt;br /&gt;&lt;br /&gt;trustExitCodeについて参考:&lt;br /&gt;http://progit.org/book/ja/ch7-1.html&lt;br /&gt;&lt;br /&gt;git difftool -y&lt;br /&gt;でdifftoolとしても反応した。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2622530787330020050?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2622530787330020050/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/windows-gitdifftoolmergetoolwinmergepor.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2622530787330020050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2622530787330020050'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/windows-gitdifftoolmergetoolwinmergepor.html' title='windows + gitでdifftoolやmergetoolをWinMergePortableにするメモ。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8571379298031075589</id><published>2012-01-22T06:08:00.000+09:00</published><updated>2012-01-22T06:08:53.013+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Chat&amp;Messengerの新着メッセージを他のマシンに通知する。</title><content type='html'>やっつけですが、以下の方法で出来ました。&lt;br /&gt;&lt;br /&gt;用意するもの。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;IP Messenger&lt;br /&gt;http://www.forest.impress.co.jp/lib/inet/msgchat/messenger/ipmsg.html&lt;br /&gt;* Chat&amp;amp;Messengerとは別に用意します。&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;フォルダ監視&lt;br /&gt;http://www.vector.co.jp/soft/dl/win95/net/se275168.html&lt;br /&gt;* このソフトで無くても良いですが、定期的に変更の監視と、&lt;br /&gt;変更検出時に任意のプログラム実行が可能である必要があります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下、手順。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;フォルダ監視で、Chat&amp;amp;Messengerのログファイルがあるフォルダを監視するように設定します。&lt;br /&gt;そして、以下のようなbatファイルを作成して、変更検出時に実行されるように設定します。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;xxx/yyy/IPMsg/ipmsg.exe /MSG /LOG xxx.xxx.xxx.xxx "New Message Received."&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8571379298031075589?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8571379298031075589/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/chat.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8571379298031075589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8571379298031075589'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/chat.html' title='Chat&amp;Messengerの新着メッセージを他のマシンに通知する。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2513870055801368027</id><published>2012-01-21T20:42:00.002+09:00</published><updated>2012-01-21T21:01:02.653+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><title type='text'>CakePHPで部分的にScaffoldを使う。</title><content type='html'>Controllerで public $scaffold を記述せずに、Scaffoldしたい場合。&lt;br /&gt;以下の方法で出来ました。&lt;br /&gt;&lt;pre class="brush:php"&gt;public function view($id = null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new Scaffold($this, $this-&amp;gt;request);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;表示や編集対象をAuthComponentでログインしているユーザに固定したい場合は&lt;br /&gt;&lt;pre class="brush:php"&gt;public function view() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;request-&amp;gt;params['pass'] = array($this-&amp;gt;Auth-&amp;gt;user('id'));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new Scaffold($this, $this-&amp;gt;request);&lt;br /&gt;}&lt;/pre&gt;で良いかも。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2513870055801368027?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2513870055801368027/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/cakephpscaffold.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2513870055801368027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2513870055801368027'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/cakephpscaffold.html' title='CakePHPで部分的にScaffoldを使う。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8185927483888254878</id><published>2012-01-16T00:55:00.002+09:00</published><updated>2012-01-16T01:12:51.358+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>growlのgrowlnotifyが作成するファイルメモ。</title><content type='html'>ざっと調べたところ、以下が見つかりました。&lt;br /&gt;&lt;br /&gt;/usr/local/bin/growlnotify&lt;br /&gt;/usr/local/share/man/man1/growlnotify.1&lt;br /&gt;/private/var/db/receipts/info.growl.growlnotify.growlnotify.pkg.bom &lt;br /&gt;/private/var/db/receipts/info.growl.growlnotify.growlnotify.pkg.plist &lt;br /&gt;/private/var/db/receipts/info.growl.growlnotify.manpage.pkg.bom&lt;br /&gt; /private/var/db/receipts/info.growl.growlnotify.manpage.pkg.plist&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8185927483888254878?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8185927483888254878/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/growgrowlnotify.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8185927483888254878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8185927483888254878'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/growgrowlnotify.html' title='growlのgrowlnotifyが作成するファイルメモ。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-5082744685527565869</id><published>2012-01-12T22:50:00.005+09:00</published><updated>2012-01-13T11:24:31.519+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>K-9 Mail UnreadCountのネタばらし。</title><content type='html'>Androidアプリで、K-9 Mail UnreadCountというアプリを作って公開しています。&lt;br /&gt;&lt;a href="https://market.android.com/details?id=net.madroom.k9uc"&gt;https://market.android.com/details?id=net.madroom.k9uc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このアプリ、メール受信時に、unread表示数が増えます。&lt;br /&gt;K-9 Mailに複数アカウントを設定している場合は、合計unread数を表示します。&lt;br /&gt;&lt;br /&gt;対して、unread数が減るタイミングなのですが、未読が既読になった瞬間。&lt;br /&gt;ではありません。&lt;br /&gt;&lt;br /&gt;通知領域から新着メールを開いて、home画面に戻っても、unread数は減りません。&lt;br /&gt;でも、WidgetからK-9 Mailを起動して、新着メールを開くと、unread数は減ります。&lt;br /&gt;&lt;br /&gt;この挙動について、簡単に、書いておきます。&lt;br /&gt;&lt;br /&gt;メール受信のタイミングは、BroadcastReceiverでキャッチできます。&lt;br /&gt;でも、未読が既読になった時は、無理でした。&lt;br /&gt;contentObserverでも、無理でした。&lt;br /&gt;もちろん、本当は出来るのだけど、僕の調査不足。という可能性もあります。&lt;br /&gt;&lt;br /&gt;では何故、WidgetからK-9 Mailを起動して、新着メールを開くとunread数が減るのか。&lt;br /&gt;となりますが、実はWidgetタップ時はK-9 Mailを起動していません。&lt;br /&gt;透明Activityを起動しています。&lt;br /&gt;そして、透明Activityが自動的に、K-9 Mailを起動しています。&lt;br /&gt;webのredirectみたいな感じです。&lt;br /&gt;&lt;br /&gt;こうすることで、K-9 Mailを終了した時、透明ActivityのonRestart()が呼ばれます。&lt;br /&gt;onRestart()は即座にfinish()して、onDestroy()でunread数の再取得、Widgetの更新。&lt;br /&gt;という実装になっています。&lt;br /&gt;&lt;a href="https://github.com/mp-android/K9MailUnreadCount"&gt;https://github.com/mp-android/K9MailUnreadCount&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Activityのライフサイクルを、うまく使えたかなー。みたいな感じのアプリです。&lt;br /&gt;でも、いつか、通知領域から開いても、ちゃんと更新されるようにしたいものです。&lt;br /&gt;&lt;br /&gt;開発の経緯は、Gmail公式アプリが外部アプリのアクセスを遮断して頭に来たから。&lt;br /&gt;ですかね。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-5082744685527565869?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/5082744685527565869/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2012/01/k-9-mail-unreadcount.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5082744685527565869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5082744685527565869'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2012/01/k-9-mail-unreadcount.html' title='K-9 Mail UnreadCountのネタばらし。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-4785227398297382766</id><published>2011-12-21T09:30:00.006+09:00</published><updated>2011-12-22T13:17:46.689+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><category scheme='http://www.blogger.com/atom/ns#' term='fpac2011'/><title type='text'>FuelPHPのTasks</title><content type='html'>&lt;a href="http://atnd.org/events/22380"&gt;FuelPHP Advent Calendar 2011&lt;/a&gt; 21日目です。&lt;br /&gt;&lt;a href="https://twitter.com/madmamor"&gt;@madmamor&lt;/a&gt; です。&lt;br /&gt;&lt;br /&gt;昨日は &lt;a href="https://twitter.com/kenji_s"&gt;@kenji_s&lt;/a&gt; さんの&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Kenji_s/20111220/1324353670"&gt;FuelPHP でのセキュリティ対策(1)&lt;/a&gt;&lt;br /&gt;でした。&lt;br /&gt;&lt;br /&gt;今日は、FuelPHPのTasksについて書きます。&lt;br /&gt;ドキュメントは、以下になります。&lt;br /&gt;&lt;br /&gt;公式:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/general/tasks.html"&gt;http://docs.fuelphp.com/general/tasks.html&lt;/a&gt;&lt;br /&gt;日本語:&lt;br /&gt;&lt;a href="http://press.nekoget.com/fuelphp_doc/general/tasks.html"&gt;http://press.nekoget.com/fuelphp_doc/general/tasks.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;早い話が、コマンドラインやcronで実行できるFuelPHPのクラスです。&lt;br /&gt;ローカルでも実行できますが、今回は、せっかくなのでサーバでやってみました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;尚、以下の方法でインストールを試みましたが、エラーが出てしまい、&lt;br /&gt;とりあえずwgetでDLして解凍しました。&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/installation/instructions.html"&gt;http://docs.fuelphp.com/installation/instructions.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://press.nekoget.com/fuelphp_doc/installation/instructions.html"&gt;http://press.nekoget.com/fuelphp_doc/installation/instructions.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DL/解凍する場所は、どこでも良いです。&lt;br /&gt;phpのバージョンが5.2系以前では動きませんので注意して下さい。FuelPHPは5.3.xで動作します。&lt;br /&gt;以下、FuelPHPに標準で入っているTasksのRobotsクラスを扱って話を進めます。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;%wget --no-check-certificate https://github.com/downloads/fuel/fuel/fuelphp-v1.1.zip&lt;br /&gt;%unzip fuelphp-v1.1.zip&lt;br /&gt;%cd fuelphp-v1.1&lt;br /&gt;%php oil refine robots&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;　&lt;br /&gt;                                        "KILL ALL HUMANS!"&lt;br /&gt;                                  _____     /&lt;br /&gt;                                 /_____\&lt;br /&gt;                            ____[\*---*/]____&lt;br /&gt;                           /\ #\ \_____/ /# /\&lt;br /&gt;                          /  \# \_.---._/ #/  \&lt;br /&gt;                         /   /|\  |   |  /|\   \&lt;br /&gt;                        /___/ | | |   | | | \___\&lt;br /&gt;                        |  |  | | |---| | |  |  |&lt;br /&gt;                        |__|  \_| |_#_| |_/  |__|&lt;br /&gt;                        //\\  &lt;\ _//^\\_ /&gt;  //\\&lt;br /&gt;                        \||/  |\//// \\\\/|  \||/&lt;br /&gt;                              |   |   |   |&lt;br /&gt;                              |---|   |---|&lt;br /&gt;                              |---|   |---|&lt;br /&gt;                              |   |   |   |&lt;br /&gt;                              |___|   |___|&lt;br /&gt;                              /   \   /   \&lt;br /&gt;                             |_____| |_____|&lt;br /&gt;                             |HHHHH| |HHHHH|&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;%php oil refine robots&lt;br /&gt;は&lt;br /&gt;%php oil r robots&lt;br /&gt;としても良いです。&lt;br /&gt;このコマンドにより、fuel/app/tasks/robots.phpのrunメソッドが実行されます。&lt;br /&gt;1つの処理だけなら、runメソッドのみ実装すれば良さそうです。&lt;br /&gt;&lt;br /&gt;%php oil r robots "Kill all Mice"&lt;br /&gt;とすれば、runメソッドに対して"Kill all Mice"を引数として与えることがでできます。&lt;br /&gt;&lt;br /&gt;また、fuel/app/tasks/robots.phpには、runメソッドとは別にprotectメソッドがあります。&lt;br /&gt;%php oil r robots:protect&lt;br /&gt;とすれば実行できます。&lt;br /&gt;runメソッド以外を実装して実行する場合はこの形になるようです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;　&lt;br /&gt;                                        "PROTECT ALL HUMANS"&lt;br /&gt;                                  _____     /&lt;br /&gt;                                 /_____\&lt;br /&gt;                            ____[\*---*/]____&lt;br /&gt;                           /\ #\ \_____/ /# /\&lt;br /&gt;                          /  \# \_.---._/ #/  \&lt;br /&gt;                         /   /|\  |   |  /|\   \&lt;br /&gt;                        /___/ | | |   | | | \___\&lt;br /&gt;                        |  |  | | |---| | |  |  |&lt;br /&gt;                        |__|  \_| |_#_| |_/  |__|&lt;br /&gt;                        //\\  &lt;\ _//^\\_ /&gt;  //\\&lt;br /&gt;                        \||/  |\//// \\\\/|  \||/&lt;br /&gt;                              |   |   |   |&lt;br /&gt;                              |---|   |---|&lt;br /&gt;                              |---|   |---|&lt;br /&gt;                              |   |   |   |&lt;br /&gt;                              |___|   |___|&lt;br /&gt;                              /   \   /   \&lt;br /&gt;                             |_____| |_____|&lt;br /&gt;                             |HHHHH| |HHHHH|&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;さらに、以下のように、フルパスでも実行可能です。結果は同じです。&lt;br /&gt;php /home/[username]/xxx/yyy/fuelphp-v1.1/oil r robots&lt;br /&gt;&lt;br /&gt;このような感じで、DLして即、実行できます。&lt;br /&gt;&lt;br /&gt;fuel/app/tasks/robots.phpを参考に、必要な処理(クラスとメソッド)を実装。&lt;br /&gt;これをcronで実行するようにしておけば、わりとあっさりいけそうです。&lt;br /&gt;&lt;br /&gt;尚、サーバによってはphpコマンドで反応するphpのバージョンが古い可能性があります。&lt;br /&gt;以下のようにしないといけないかもしれません。。。&lt;br /&gt;/usr/local/php/5.3.8/bin/php /home/[username]/xxx/yyy/fuelphp-v1.1/oil r robots&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;いろいろなライブラリを適当に寄せ集めてやっつけで作った&lt;br /&gt;cron用の各種プログラムをFuelPHPのTasksでリプレイスしたい。。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;明日は &lt;a href="https://twitter.com/kenji_s"&gt;@kenji_s&lt;/a&gt; さんの&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Kenji_s/20111222/1324526139"&gt;FuelPHP でのセキュリティ対策(2)&lt;/a&gt;&lt;br /&gt;の予定です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-4785227398297382766?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/4785227398297382766/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphptasks.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4785227398297382766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4785227398297382766'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphptasks.html' title='FuelPHPのTasks'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1123414601269676781</id><published>2011-12-20T22:47:00.000+09:00</published><updated>2011-12-20T22:47:05.918+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>gitのpost-receiveでメール送信メモ。</title><content type='html'>hooksにpost-receiveファイルを作成。&lt;br /&gt;&lt;br /&gt;hooks/post-receive&lt;br /&gt;--&lt;br /&gt;xxx/yyy/git-1.7.8/contrib/hooks/post-receive-email&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;送信設定&lt;br /&gt;--&lt;br /&gt;git config hooks.mailinglist "xxx &lt;[to]@gmail.com&gt;,yyy &lt;[to]@gmail.com&gt;"&lt;br /&gt;git config hooks.emailprefix "[git pushed]"&lt;br /&gt;git config hooks.envelopesender "xxx &lt;[from]@gmail.com&gt;"&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;hooksにpost-receive.sampleが無いのは何故だろう。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1123414601269676781?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1123414601269676781/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/gitpost-receive.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1123414601269676781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1123414601269676781'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/gitpost-receive.html' title='gitのpost-receiveでメール送信メモ。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1105496311668435491</id><published>2011-12-18T18:30:00.002+09:00</published><updated>2011-12-20T22:49:27.728+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>githubのアカウント作りました。</title><content type='html'>今更な感じもしますが。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/mp-android"&gt;https://github.com/mp-android&lt;/a&gt;&lt;br /&gt;になります。&lt;br /&gt;このアカウントには、AndroidアプリのRepositoryのみを作っていく予定です。&lt;br /&gt;&lt;br /&gt;これまで雑に使っていたgoogle code&lt;br /&gt;&lt;a href="http://code.google.com/p/madroom-project/"&gt;http://code.google.com/p/madroom-project/&lt;/a&gt;&lt;br /&gt;は空っぽにしました。&lt;br /&gt;&lt;br /&gt;幾つかのDLファイルは、githubに移して有ります。&lt;br /&gt;&lt;br /&gt;一人で使うので、中々しっかりバージョン管理出来るか心配ですが。&lt;br /&gt;&lt;br /&gt;assetsに.gitkeep置くのとか、空のREADME置くのは面倒なので、していません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1105496311668435491?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1105496311668435491/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/github.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1105496311668435491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1105496311668435491'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/github.html' title='githubのアカウント作りました。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-6840929168479023896</id><published>2011-12-18T18:25:00.001+09:00</published><updated>2011-12-18T18:41:57.608+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows7でPortableGitでgithubにpushしようとするとPermission denied (publickey).</title><content type='html'>"github Permission denied (publickey)."とかでググると色々と情報が出てきますが、&lt;br /&gt;僕の場合は、ちょっと原因が違いました。&lt;br /&gt;&lt;br /&gt;~/.ssh/known_hosts をいくらいじっても何の反応もなく、おかしいなーと思っていたら&lt;br /&gt;PortableGit/.ssh/known_hosts が有りました。。。&lt;br /&gt;&lt;br /&gt;これを編集したら、無事解決。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-6840929168479023896?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/6840929168479023896/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/windows7portablegitgithubpushpermission.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/6840929168479023896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/6840929168479023896'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/windows7portablegitgithubpushpermission.html' title='Windows7でPortableGitでgithubにpushしようとするとPermission denied (publickey).'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-5214755010170411994</id><published>2011-12-16T09:30:00.005+09:00</published><updated>2011-12-17T14:14:57.252+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><category scheme='http://www.blogger.com/atom/ns#' term='fpac2011'/><title type='text'>FuelPHPのcoreクラスを拡張してみる。</title><content type='html'>&lt;a href="http://atnd.org/events/22380"&gt;FuelPHP Advent Calendar 2011&lt;/a&gt; 16日目です。&lt;br /&gt;&lt;a href="https://twitter.com/madmamor"&gt;@madmamor&lt;/a&gt; です。&lt;br /&gt;&lt;br /&gt;先日の15日目は &lt;a href="https://twitter.com/eifuku"&gt;@eifuku&lt;/a&gt; さんの&lt;br /&gt;&lt;a href="http://anond.hatelabo.jp/20111215101716"&gt;cent osでのphp5.3環境のセットアップ with "yum"&lt;/a&gt; でした。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FuelPHPのcoreクラスを拡張したくなるケースは、色々と出てくると思います。&lt;br /&gt;以前、Logクラスを拡張したので、そのまとめ的な内容です。&lt;br /&gt;&lt;br /&gt;先に、ドキュメントは以下になります。&lt;br /&gt;公式:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/general/extending_core.html"&gt;http://docs.fuelphp.com/general/extending_core.html&lt;/a&gt;&lt;br /&gt;日本語:&lt;br /&gt;&lt;a href="http://press.nekoget.com/fuelphp_doc/general/extending_core.html"&gt;http://press.nekoget.com/fuelphp_doc/general/extending_core.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;私がLogクラスを拡張した理由は2つ有ります。&lt;br /&gt;&lt;br /&gt;(1) メソッド名の簡略化&lt;br /&gt;Log::info は Log::i で呼び出したい。&lt;br /&gt;Log::debug は Log::d で呼び出したい。&lt;br /&gt;Log::warning は Log::w で呼び出したい。&lt;br /&gt;Log::error は Log::e で呼び出したい。&lt;br /&gt;&lt;br /&gt;(2) 非スカラー型(配列等)の変数も直接渡してログ出力したい。&lt;br /&gt;&lt;br /&gt;となります。&lt;br /&gt;&lt;br /&gt;早速、拡張したソースを掲載しても良いのですが、その前に。&lt;br /&gt;そもそも、coreクラスがどこに有るのか。知っておいた方が良いはずです。&lt;br /&gt;&lt;br /&gt;coreクラスはその名の通り、core/classesの中に有ります。&lt;br /&gt;直下にはディレクトリとphpファイルがずらっと並んでいます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;14日目の &lt;a href="https://twitter.com/kenji_s"&gt;@kenji_s&lt;/a&gt; さんの記事( &lt;a href="http://d.hatena.ne.jp/Kenji_s/20111214/1323821985"&gt;FuelPHP の URL とコントローラの関係&lt;/a&gt; )にある通り、&lt;br /&gt;"クラス名の中の「_」はフォルダ区切りを意味する"&lt;br /&gt;という決まり事があります。&lt;br /&gt;&lt;br /&gt;ですので、ControllerクラスとController_Templateクラスはそれぞれ、以下のような配置になっています。&lt;br /&gt;core/classes/controller.php&lt;br /&gt;core/classes/controller/template.php&lt;br /&gt;&lt;br /&gt;これを知っているだけでも、coreのソースを追いやすくなると思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;では、Logクラス(core/classes/log.php)の拡張例を紹介してみます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【例1】&lt;br /&gt;クラス名をそのままにする場合。("コアクラスを拡張し、置き換える"場合。)&lt;br /&gt;&lt;br /&gt;app/classes/log.phpを作成。&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class Log extends Fuel\Core\Log&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function i($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::info($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function d($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::debug($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function w($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::warning($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function e($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::error($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;次に、app/bootstrap.phpを編集します。&lt;br /&gt;以下のような箇所が有るはずなので&lt;br /&gt;&lt;pre class="brush:php"&gt;Autoloader::add_classes(array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Add classes you want to override here&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Example: 'View' =&amp;gt; APPPATH.'classes/view.php',&lt;br /&gt;));&lt;/pre&gt;&lt;br /&gt;ここに、今回作成したLogクラスを追加します。&lt;br /&gt;&lt;pre class="brush:php"&gt;Autoloader::add_classes(array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Add classes you want to override here&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Example: 'View' =&amp;gt; APPPATH.'classes/view.php',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Log' =&amp;gt; APPPATH.'classes/log.php',&lt;br /&gt;));&lt;/pre&gt;これをしないと、先に作成したapp/classes/log.phpのLogクラスは無視されます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;使い方は、debugの場合&lt;br /&gt;&lt;pre class="brush:php"&gt;Log::d($msg);&lt;/pre&gt;となります。&lt;br /&gt;Log::dの中で&lt;br /&gt;&lt;pre class="brush:php"&gt;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;/pre&gt;しているので、$msgは配列でも構いません。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【例2】&lt;br /&gt;クラス名をMylog等としたい場合。("コアクラスを置き換えずに拡張する"場合。)その他は例1と同様。&lt;br /&gt;&lt;br /&gt;app/classes/mylog.phpを作成。&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class Mylog extends Fuel\Core\Log&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function i($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::info($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function d($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::debug($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function w($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::warning($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static function e($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return parent::error($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;使い方は、debugの場合&lt;br /&gt;&lt;pre class="brush:php"&gt;Mylog::d($msg);&lt;/pre&gt;となります。&lt;br /&gt;尚、この場合、app/bootstrap.phpの編集は不要です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上、coreクラスの拡張方法でした。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;17日目は &lt;a href="https://twitter.com/mataga"&gt;@mataga&lt;/a&gt; さんの&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/dix3/20111217/1324061321"&gt;FuelPHP動作実験 - oil console ＆ PHP Interactive改を使って マニュアルの例文コピペでいろんなメソッドを試してみよう☆彡&lt;/a&gt;&lt;br /&gt;です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-5214755010170411994?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/5214755010170411994/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphpcore.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5214755010170411994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5214755010170411994'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphpcore.html' title='FuelPHPのcoreクラスを拡張してみる。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-7862357685973866020</id><published>2011-12-11T02:08:00.012+09:00</published><updated>2011-12-13T21:11:47.659+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><category scheme='http://www.blogger.com/atom/ns#' term='fpac2011'/><title type='text'>FuelPHPでFacebookアプリを作ってみよう。実装編。</title><content type='html'>2011/12/11 追記&lt;br /&gt;当初、ソース内にValidation::factory()と記述をしていましたが、近々廃止予定とのことです。&lt;br /&gt;Validation::forge()を使うべきとご指摘を頂きました。有難うございます。&lt;br /&gt;当記事の該当箇所について、修正してあります。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;a href="http://atnd.org/events/22380"&gt;FuelPHP Advent Calendar 2011&lt;/a&gt; 11日目です。&lt;br /&gt;&lt;a href="https://twitter.com/madmamor"&gt;@madmamor&lt;/a&gt; です。&lt;br /&gt;&lt;br /&gt;前日の &lt;a href="https://twitter.com/kenji_s"&gt;@kenji_s&lt;/a&gt; さんの&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Kenji_s/20111210/1323475862"&gt;FuelPHP での Migration の使い方&lt;/a&gt;&lt;br /&gt;でもご紹介頂いたとおり、今回は、Facebookアプリの実装編です。&lt;br /&gt;&lt;br /&gt;尚、先にこちらをお読み下さるよう、お願いします。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/12/fuelphpfacebook.html"&gt;FuelPHPでFacebookアプリを作ってみよう。準備編。&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;今回実装する機能は&lt;br /&gt;* Facebookでのログイン/ログアウト機能&lt;br /&gt;* Facebook情報のDB保存(バリデーション付き)&lt;br /&gt;* Facebookのウォール投稿機能(バリデーション付き)&lt;br /&gt;です。&lt;br /&gt;各項にポイントを書いています。&lt;br /&gt;&lt;br /&gt;では、一気にいきましょう。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;【DBとテーブルを作成】&lt;br /&gt;MySQLを使います。DB名はfuelfb。テーブル名はusers。とします。&lt;br /&gt;尚、今回、Facebook情報はusersテーブルに保存するのみです。&lt;br /&gt;検索して使用する。という処理は組み込みませんが、DB周りの機能紹介を兼ねて、記載します。&lt;br /&gt;&lt;pre class="brush:sql"&gt;create database fuelfb;&lt;br /&gt;&lt;br /&gt;create table fuelfb.users&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;id int not null auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;created_at int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;updated_at int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;facebook_id varchar(255) not null unique,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;facebook_name varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;facebook_link varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;primary key (id)&lt;br /&gt;);&lt;/pre&gt;【ポイント】&lt;br /&gt;idはFuelPHPが定める主キーカラム名です。&lt;br /&gt;&lt;br /&gt;created_atはFuelPHPが定めるレコード作成時刻カラム名です。&lt;br /&gt;updated_atはFuelPHPが定めるレコード更新時刻カラム名です。&lt;br /&gt;created_atとupdated_atはデフォルトだとUNIXタイムスタンプとなります。&lt;br /&gt;datetime型にすることも可能ですが、今回はint(UNIXタイムスタンプ)で。&lt;br /&gt;&lt;br /&gt;その他のカラムは、Facebook認証時に取得するデータ用のカラムです。&lt;br /&gt;ユーザ入力ではありませんが、外部データなので、制約は緩めにしてあります。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;【ORMモデルを作成】&lt;br /&gt;前述のusersテーブルに対するモデルです。&lt;br /&gt;&lt;br /&gt;fuel/app/classes/model/user.phpを作成。&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;namespace Model;&lt;br /&gt;&lt;br /&gt;class User extends \Orm\Model&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('events'=&amp;gt;array('before_insert')),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('events'=&amp;gt;array('before_save')),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_Validation'=&amp;gt; array('events'=&amp;gt;array('before_save')),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_properties = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'created_at',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'updated_at',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'facebook_id' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'valid_string' =&amp;gt; array('integer'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'facebook_name' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'facebook_link' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;}&lt;/pre&gt;【ポイント】&lt;br /&gt;今回は、Orm\Modelを継承したモデルとします。&lt;br /&gt;&lt;br /&gt;$_observersで、様々な振る舞いを指定可能です。&lt;br /&gt;今回は、created_at値、updated_at値の自動登録と、&lt;br /&gt;insert or update前のバリデーション自動実行。を設定しています。&lt;br /&gt;&lt;br /&gt;$_propertiesでカラム毎にバリデーションを定義可能です。&lt;br /&gt;&lt;br /&gt;バリデーションは、"単一のStringを受け、Stringを返却するPHP関数"を指定可能です。&lt;br /&gt;今回は、trimを設定しています。&lt;br /&gt;&lt;br /&gt;$_propertiesには全てのカラムを記述して下さい。エラーとなります。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;【ORMパッケージの有効化】&lt;br /&gt;fuel/app/config/config.phpを修正&lt;br /&gt;&lt;pre class="brush:php"&gt;'packages'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//'orm',&lt;br /&gt;),&lt;/pre&gt;↓&lt;br /&gt;&lt;pre class="brush:php"&gt;'packages'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'orm',&lt;br /&gt;),&lt;/pre&gt;【ポイント】&lt;br /&gt;前述のORMモデルが使用可能となります。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;【DB接続情報を設定】&lt;br /&gt;fuel/app/config/development/db.phpを修正&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* The development database settings.&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'default' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'connection'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'dsn'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; 'mysql:host=localhost;dbname=fuel_dev',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'username'&amp;nbsp;&amp;nbsp; =&amp;gt; 'root',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'password'&amp;nbsp;&amp;nbsp; =&amp;gt; 'root',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;);&lt;/pre&gt;↓&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* The development database settings.&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'default' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'type'&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; 'mysql',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'connection'&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'hostname'&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; 'localhost',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'port'&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; '3306',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'database'&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; 'fuelfb',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'username'&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; 'root',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'password'&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; '',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;);&lt;/pre&gt;【ポイント】&lt;br /&gt;必要に応じて、接続情報は書き換えて下さい。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;【ビューの修正】&lt;br /&gt;fuel/app/views/index/index.phpを修正&lt;br /&gt;&lt;pre class="brush:html"&gt;&amp;lt;p&amp;gt;Index&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php if ($is_login): ?&amp;gt;&lt;br /&gt;&amp;lt;a href="http://127.0.0.1/fuelfb/public/index/logout"&amp;gt;Log out.&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;?php else: ?&amp;gt;&lt;br /&gt;&amp;lt;a href="http://127.0.0.1/fuelfb/public/index/login"&amp;gt;Login with Facebook.&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;?php endif; ?&amp;gt;&lt;/pre&gt;↓&lt;br /&gt;&lt;pre class="brush:html"&gt;&amp;lt;?php if ($is_login): ?&amp;gt;&lt;br /&gt;&amp;lt;?php echo(Form::open('index/index/'))?&amp;gt;&lt;br /&gt;&amp;lt;?php echo(Form::textarea('message'))?&amp;gt;&lt;br /&gt;&amp;lt;?php echo(Form::submit('submit','Post to Facebook'))?&amp;gt;&lt;br /&gt;&amp;lt;?php echo(Form::close())?&amp;gt;&lt;br /&gt;&amp;lt;a href="http://127.0.0.1/fuelfb/public/index/logout"&amp;gt;Log out.&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;?php else: ?&amp;gt;&lt;br /&gt;&amp;lt;a href="http://127.0.0.1/fuelfb/public/index/login"&amp;gt;Login with Facebook.&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;?php endif; ?&amp;gt;&lt;/pre&gt;【ポイント】&lt;br /&gt;ログインしていれば入力フォームとログアウトリンクを表示します。&lt;br /&gt;&lt;br /&gt;ログインしていなければログインリンクを表示します。&lt;br /&gt;&lt;br /&gt;判断基準の$is_loginは後述のコントローラでセットします。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;【コントローラに機能を実装】&lt;br /&gt;fuel/app/classes/controller/index.phpを修正&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;require_once APPPATH.'vendor/facebook-php-sdk/src/facebook.php';&lt;br /&gt;&lt;br /&gt;class Controller_Index extends Controller_Template {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private $fb;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function before()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;parent::before();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$this-&amp;gt;fb = new Facebook(Config::get('facebook.init'));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_index()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$this-&amp;gt;template-&amp;gt;title = 'Index » Index';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$data = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'is_login' =&amp;gt; $this-&amp;gt;fb-&amp;gt;getUser()?true:false,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$this-&amp;gt;template-&amp;gt;content = View::forge('index/index',$data);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_login()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit('TODO : login');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_callback()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit('TODO : callback');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_logout()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit('TODO : logout');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;↓&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;require_once APPPATH.'vendor/facebook-php-sdk/src/facebook.php';&lt;br /&gt;&lt;br /&gt;use Model\User;&lt;br /&gt;&lt;br /&gt;class Controller_Index extends Controller_Template {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private $fb;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function before()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent::before();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;fb = new Facebook(Config::get('facebook.init'));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function action_index()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;template-&amp;gt;title = 'Index » Index';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $is_login = $this-&amp;gt;fb-&amp;gt;getUser()?true:false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $data = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'is_login' =&amp;gt; $is_login,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($is_login and Input::method() == 'POST')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $v = Validation::forge();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $v-&amp;gt;add('message', 'message')-&amp;gt;add_rule('required');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!$v-&amp;gt;run())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session::set_flash('notice', $v-&amp;gt;errors('message')-&amp;gt;get_message());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $message = $v-&amp;gt;validated('message');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $res = $this-&amp;gt;fb-&amp;gt;api(array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'method' =&amp;gt; 'stream.publish',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'message' =&amp;gt; $message,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session::set_flash('notice', 'complete!!');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (FacebookApiException $e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session::set_flash('notice', $e-&amp;gt;getMessage());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response::redirect('index/index/');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;template-&amp;gt;content = View::forge('index/index',$data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function action_login()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $url = $this-&amp;gt;fb-&amp;gt;getLoginUrl(Config::get('facebook.login'));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response::redirect($url);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function action_callback()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $me = $this-&amp;gt;fb-&amp;gt;api('/me');&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user = User::find_by_facebook_id($me['id']);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!$user) $user = new User;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user-&amp;gt;facebook_id = $me['id'];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user-&amp;gt;facebook_name = $me['name'];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user-&amp;gt;facebook_link = $me['link'];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user-&amp;gt;save();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response::redirect('/index/index/');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Orm\ValidationFailed $e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception($e-&amp;gt;getMessage());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (FacebookApiException $e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception($e-&amp;gt;getMessage());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function action_logout()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $url = $this-&amp;gt;fb-&amp;gt;getLogoutUrl(Config::get('facebook.logout'));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;fb-&amp;gt;destroySession();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response::redirect($url);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;【ポイント】&lt;br /&gt;以下の順を想定して、各メソッドのポイントを記載します。&lt;br /&gt;(1) http://127.0.0.1/fuelfb/public/index/index/ にアクセス。&lt;br /&gt;(2) "Login with Facebook."をクリック。&lt;br /&gt;(3) Facebook認証をして http://127.0.0.1/fuelfb/public/index/index/ に戻ってくる。&lt;br /&gt;(4) Facebookのウォールへ投稿。&lt;br /&gt;(5) ログアウト。&lt;br /&gt;&lt;br /&gt;■before()&lt;br /&gt;Facebookオブジェクト($fb)の初期化。全アクションに対しての、事前処理みたいな感じです。&lt;br /&gt;&lt;br /&gt;■action_login()&lt;br /&gt;Facebook認証画面にリダイレクトします。&lt;br /&gt;fuel/app/config/custom.phpのfacebook.loginには、&lt;br /&gt;認証後のリダイレクト先とパーミッション設定が設定してあるはずです。&lt;br /&gt;&lt;br /&gt;■action_callback()&lt;br /&gt;Facebook認証後のリダイレクト先になります。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;$me = $this-&amp;gt;fb-&amp;gt;api('/me');&lt;/pre&gt;自身のFacebook情報を取得しています。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;$user = User::find_by_facebook_id($me['id']);&lt;/pre&gt;usersテーブルに対してFacebookのIDで検索を行なっています。&lt;br /&gt;find_by_[カラム名]はFuelPHPのORMが標準に提供する検索機能です。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;$user-&amp;gt;save();&lt;/pre&gt;前述のfind_by_facebook_idでデータがヒットしなければinsert。&lt;br /&gt;ヒットすればupdateを行います。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;Response::redirect('/index/index/');&lt;/pre&gt;action_index()へリダイレクトします。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;catch (Orm\ValidationFailed $e)&lt;/pre&gt;ORMモデルにバリデーションルールを書きましたが、それに反する場合、ここに入ります。&lt;br /&gt;今回はユーザ入力データでは無いので、実質発生しないはずです。&lt;br /&gt;なので、画面表示はしていません。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;catch (FacebookApiException $e)&lt;/pre&gt;$this-&amp;gt;fb-&amp;gt;api('/me'); でエラーが発生した場合、ここに入ります。&lt;br /&gt;その他、FacebookのAPIでエラーが発生した場合も、FacebookApiExceptionが発生します。&lt;br /&gt;&lt;br /&gt;■action_logout()&lt;br /&gt;Facebookのセッションを破棄してリダイレクトします。&lt;br /&gt;リダイレクト先はfuel/app/config/custom.phpのfacebook.logout.nextに書いてあるはずです。&lt;br /&gt;&lt;br /&gt;■action_index()&lt;br /&gt;&lt;pre class="brush:php"&gt;if($is_login and Input::method() == 'POST')&lt;/pre&gt;フォームに入力してsubmitボタンを押すと、この中に入ります。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;$v = Validation::forge();&lt;br /&gt;$v-&amp;gt;add('message', 'message')-&amp;gt;add_rule('required');&lt;br /&gt;if(!$v-&amp;gt;run())&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::set_flash('notice', $v-&amp;gt;errors('message')-&amp;gt;get_message());&lt;br /&gt;}&lt;/pre&gt;必須チェックを行なっています。&lt;br /&gt;入力が空だった場合、エラーメッセージを表示します。&lt;br /&gt;具体的には、fuel/app/views/template.phpの&lt;br /&gt;Session::get_flash('notice')&lt;br /&gt;の箇所で表示されます。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;$message = $v-&amp;gt;validated('message');&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$res = $this-&amp;gt;fb-&amp;gt;api(array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'method' =&amp;gt; 'stream.publish',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'message' =&amp;gt; $message,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::set_flash('notice', 'complete!!');&lt;br /&gt;}&lt;br /&gt;catch (FacebookApiException $e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::set_flash('notice', $e-&amp;gt;getMessage());&lt;br /&gt;}&lt;br /&gt;Response::redirect('index/index/');&lt;/pre&gt;バリデーション完了後のデータを取得して、Facebookのウォールに投稿(stream.publish)します。&lt;br /&gt;FacebookApiExceptionについてはaction_callback()に記載した通りとなります。&lt;br /&gt;最後にリダイレクトしているのは、リロード対策です。&lt;br /&gt;&lt;br /&gt;■その他&lt;br /&gt;再現性が乏しいのですが、Facebookの証明書エラーが発生するケースがありました。&lt;br /&gt;その場合、ブラウザの関連するキャッシュをクリアして下さい。&lt;br /&gt;また、XAMPPのApacheを再起動してみて下さい。&lt;br /&gt;これで、私の場合、エラーが発生しなくなりました。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;以下、画面キャプチャを掲載しておきます。&lt;br /&gt;&lt;br /&gt;まずは、この画面が表示されるはずです。&lt;br /&gt;Login with Facebook.をクリックして、Facebook側に飛びます。&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="http://3.bp.blogspot.com/-WpUEl1d4oio/TuOWiFrFpSI/AAAAAAAAAvs/ArtUWWPWdJU/s1600/1.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="189" width="320" src="http://3.bp.blogspot.com/-WpUEl1d4oio/TuOWiFrFpSI/AAAAAAAAAvs/ArtUWWPWdJU/s320/1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Facebook側の認証画面です。&lt;br /&gt;認証が済むと、今回作成したプログラム側に戻ります。&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="http://2.bp.blogspot.com/-OTdjnrpWZCE/TuOW2p5y9LI/AAAAAAAAAv4/_ZKUxMMsaVo/s1600/2.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="192" width="320" src="http://2.bp.blogspot.com/-OTdjnrpWZCE/TuOW2p5y9LI/AAAAAAAAAv4/_ZKUxMMsaVo/s320/2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;正しく実装されていると、この画面に戻るはずです。&lt;br /&gt;textareaとpostボタンが表示されます。&lt;br /&gt;postが正常に行われると、"complete!!"と表示されます。&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="http://3.bp.blogspot.com/-EJZ8YWFUCdA/TuOXCmMv8sI/AAAAAAAAAwE/tkaLmfYnzU8/s1600/3.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="189" width="320" src="http://3.bp.blogspot.com/-EJZ8YWFUCdA/TuOXCmMv8sI/AAAAAAAAAwE/tkaLmfYnzU8/s320/3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;この後、ログアウトをして、最初の画面に戻れば、一通りOKと思います。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;以上、実装編でした。&lt;br /&gt;&lt;br /&gt;fuel/app/classes/welcome.php等のゴミファイルが残っていたり&lt;br /&gt;fuel/app/config/config.phpのbase_urlが空だったり&lt;br /&gt;その他、色々とやり残したことはありますが、ミニマムな手順は、こんな感じと思います。&lt;br /&gt;&lt;br /&gt;有難うございました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;明日の12日目は &lt;a href="https://twitter.com/mataga"&gt;@mataga&lt;/a&gt; さんです。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/dix3/20111212/1323660316"&gt;FuelPHP動作実験 - 実験くんソースをModulesに閉じ込めてモジュール分割してみる。&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;次回は、軽めのネタでいきます。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-7862357685973866020?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/7862357685973866020/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphpfacebook_11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7862357685973866020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7862357685973866020'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphpfacebook_11.html' title='FuelPHPでFacebookアプリを作ってみよう。実装編。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-WpUEl1d4oio/TuOWiFrFpSI/AAAAAAAAAvs/ArtUWWPWdJU/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2218213562636992772</id><published>2011-12-10T23:59:00.007+09:00</published><updated>2011-12-12T10:50:18.948+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>nyaosを起動するbatファイル</title><content type='html'>aptanaはgitを使うことでターミナルが使えるようになり、各種コマンドの入力に不便は無いのですが、&lt;br /&gt;eclipseやmotodevだと少々、不便。&lt;br /&gt;&lt;br /&gt;gitにしてもsvnにしても、ガツガツと作業をする時は、やはりコマンドを使いたい。&lt;br /&gt;ただ、そのためだけにaptanaプラグインを入れるのは。。。&lt;br /&gt;コマンドプロンプトは大嫌いだし。。。&lt;br /&gt;&lt;br /&gt;というワケで、愛用のnyaosを起動するbatファイルを作ってみました。&lt;br /&gt;3行ですが。。。&lt;br /&gt;このbatファイルを実行した場所を開きます。そのままダブルクリックで起動できました。&lt;br /&gt;&lt;br /&gt;--nyaos.bat--&lt;br /&gt;%~d0&lt;br /&gt;cd %~p0&lt;br /&gt;C:\xxx\nyaos-3.2.0_0-win\nyaos.exe&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;nyaosのDLはこちらから。&lt;br /&gt;&lt;a href="http://www.nyaos.org/"&gt;http://www.nyaos.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2218213562636992772?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2218213562636992772/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/nyaosbat.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2218213562636992772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2218213562636992772'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/nyaosbat.html' title='nyaosを起動するbatファイル'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2711418514848130368</id><published>2011-12-10T23:18:00.003+09:00</published><updated>2012-01-17T11:50:05.362+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Subclipseのsvn:ignoreについてメモ。</title><content type='html'>参考:&lt;br /&gt;&lt;a href="http://techracho.bpsinc.jp/baba/2009_12_08/727"&gt;http://techracho.bpsinc.jp/baba/2009_12_08/727&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ポイントは、ディレクトリを先にcommit。&lt;br /&gt;その後、そのディレクトリの右クリから&lt;br /&gt;"プロパティを設定" &gt; "svn:ignore" &gt; "*"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2711418514848130368?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2711418514848130368/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/subclipsesvnignore.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2711418514848130368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2711418514848130368'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/subclipsesvnignore.html' title='Subclipseのsvn:ignoreについてメモ。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1192659947683751210</id><published>2011-12-10T19:12:00.003+09:00</published><updated>2012-01-17T11:50:59.106+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>SubclipseでSSHメモ。</title><content type='html'>Windows &gt; Preferences &gt; Team &gt; SVN &gt; SVNインターフェス &gt; SVNKit (Pure Java) SVNKit v[バージョンNO]&lt;br /&gt;にする。&lt;br /&gt;&lt;br /&gt;svn+ssh://xxxのリポジトリロケーションを追加するとダイアログが出るので、必要事項を入力。&lt;br /&gt;鍵はOpenSSH形式であること。&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://symfony.jobweb.jp/?p=646"&gt;http://symfony.jobweb.jp/?p=646&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1192659947683751210?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1192659947683751210/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/subclipsessh.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1192659947683751210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1192659947683751210'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/subclipsessh.html' title='SubclipseでSSHメモ。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-420237093444503093</id><published>2011-12-05T21:38:00.006+09:00</published><updated>2011-12-05T21:57:52.847+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>created_atやupdated_atの型をdatetimeやtimestampにする。</title><content type='html'>FuelPHPのORMはcreated_atやupdated_atというカラムに対して&lt;br /&gt;* レコード作成時刻&lt;br /&gt;* レコード更新時刻&lt;br /&gt;をUNIXタイムスタンプで自動登録してくれる機能があります。&lt;br /&gt;&lt;br /&gt;UNIXタイムスタンプとなると、カラムの型は必然的に整数値型になるわけですが、&lt;br /&gt;datetime型やtimestamp型にしたい場合もあるはずです。&lt;br /&gt;&lt;br /&gt;これは、以下の方法で、簡単に解決できました。&lt;br /&gt;&lt;pre class="brush:php"&gt;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Orm\Observer_CreatedAt' =&amp;gt; array('events'=&amp;gt;array('before_insert'), 'mysql_timestamp' =&amp;gt; true,),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Orm\Observer_UpdatedAt' =&amp;gt; array('events'=&amp;gt;array('before_save'), 'mysql_timestamp' =&amp;gt; true,),&lt;br /&gt;);&lt;/pre&gt;詳細は&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/packages/orm/observers/included.html"&gt;http://docs.fuelphp.com/packages/orm/observers/included.html&lt;/a&gt;&lt;br /&gt;になります。&lt;br /&gt;&lt;br /&gt;ドキュメントを見ると、同じ要領で、created_atやupdated_atというカラム名&lt;br /&gt;を変えることも容易なようです。(未確認ですが。。。)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-420237093444503093?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/420237093444503093/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/createdatupdatedatdatetimetimestamp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/420237093444503093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/420237093444503093'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/createdatupdatedatdatetimetimestamp.html' title='created_atやupdated_atの型をdatetimeやtimestampにする。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-7444104462837718460</id><published>2011-12-05T09:50:00.021+09:00</published><updated>2011-12-11T14:15:14.926+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><category scheme='http://www.blogger.com/atom/ns#' term='fpac2011'/><title type='text'>FuelPHPでFacebookアプリを作ってみよう。準備編。</title><content type='html'>&lt;a href="http://atnd.org/events/22380"&gt;FuelPHP Advent Calendar 2011&lt;/a&gt; に参加させて頂きます。&lt;br /&gt;&lt;a href="https://twitter.com/madmamor"&gt;@madmamor&lt;/a&gt; です。&lt;br /&gt;&lt;br /&gt;5日目の本日は、FuelPHPでFacebookアプリのサンプル作成手順を紹介します。&lt;br /&gt;FuelPHPのルールを意識しつつ、Facebookでの認証とウォールへの投稿を実装します。&lt;br /&gt;要、Facebookアカウント。です。&lt;br /&gt;&lt;br /&gt;とは言うものの、FuelPHPはまだまだ未知数な部分も多く、&lt;br /&gt;もしかすると、よろしくない書き方が含まれているかもしれません。&lt;br /&gt;その辺り含め、ディスカッションのネタになれば幸いです。&lt;br /&gt;&lt;br /&gt;今回は、準備編です。敷居の低い環境を想定して話を進めます。&lt;br /&gt;* windows + XAMPP(1.7.7)&lt;br /&gt;* XAMPPはクリーンな状態。php.ini等、設定は一切触っていない。&lt;br /&gt;* FuelPHPのバージョンは1.1-RC1&lt;br /&gt;&lt;br /&gt;では、始めましょう。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;【先に】&lt;br /&gt;掲載するソースは、oilコマンドで自動生成されたファイルを基にしています。&lt;br /&gt;但し、今回は、oilコマンド無しで作成出来る内容です。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;【FuelPHPの配置】&lt;br /&gt;(1)&lt;br /&gt;XAMPPのドキュメントルート(htdocs下)に今回のアプリを配置するディレクトリを作成します。&lt;br /&gt;"fuelfb"とします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;以下からFuelPHPをDL、解凍。fuelfb下に配置します。&lt;br /&gt;&lt;a href="http://fuelphp.com/"&gt;http://fuelphp.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;必要なものは&lt;br /&gt;* fuelディレクトリ以下&lt;br /&gt;* publicディレクトリ以下&lt;br /&gt;* oilファイル(今回は不必要ですが、一応。)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;xampp/&lt;br /&gt;├ htdocs/&lt;br /&gt;&amp;nbsp;├ fuelfb/&lt;br /&gt;&amp;nbsp;&amp;nbsp;├ fuel/&lt;br /&gt;&amp;nbsp;&amp;nbsp;├ public/&lt;br /&gt;&amp;nbsp;&amp;nbsp;├ oil&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;以下にアクセスできれば、ここまでの話はクリアです。&lt;br /&gt;http://127.0.0.1/fuelfb/public/&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://1.bp.blogspot.com/-WFb7gLeUcmg/TtwVe_TvNlI/AAAAAAAAAvM/WvZsJuhQPYA/s1600/1-1.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="320" src="http://1.bp.blogspot.com/-WFb7gLeUcmg/TtwVe_TvNlI/AAAAAAAAAvM/WvZsJuhQPYA/s320/1-1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr/&gt;【Facebookにアプリ登録】&lt;br /&gt;(1)&lt;br /&gt;Facebookにログインして、以下にアクセス。&lt;br /&gt;&lt;a href="https://developers.facebook.com/apps"&gt;https://developers.facebook.com/apps&lt;/a&gt;&lt;br /&gt;* 初回アクセス時は開発者登録が必要なので、"許可する"をクリック。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;* 右上の"+新しいアプリケーションを作成"をクリック&lt;br /&gt;* "App Display Name:" にアプリ名を入力。(お好きな名前で。"face"とか"fb"とかは使えないようです。)&lt;br /&gt;* "App Namespace:" は、とりあえず空で良いと思います。&lt;br /&gt;* "I agree to the Facebook Platform Policies." にチェック。&lt;br /&gt;* "続行"をクリック、セキュリティチェックを行い"送信"をクリック。&lt;br /&gt;* "App ID:"と"App Secret:"の内容を控える。&lt;br /&gt;* "アプリをFacebookに結合する方法を選択してください"で"ウェブサイト"をクリック。&lt;br /&gt;* "サイトURL:"に、今回作成するWEBアプリのURLを入力。&lt;br /&gt;... 今回は http://127.0.0.1/fuelfb/public/ になります。&lt;br /&gt;* 一番下の"変更を保存"をクリック。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4)&lt;br /&gt;* 左上の"詳細設定"をクリック。&lt;br /&gt;* "Sandbox Mode:"を"有効"にする。&lt;br /&gt;... WEBに配置して公開する。となったら、"無効"にすることを忘れずに。&lt;br /&gt;* 一番下の"変更を保存"をクリック。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Facebookのアプリ登録は、以上。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;【Facebook PHP SDKのDLと配置】&lt;br /&gt;認証やウォール投稿に必要となります。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;Facebook PHP SDK&lt;br /&gt;&lt;a href="https://github.com/facebook/php-sdk"&gt;https://github.com/facebook/php-sdk&lt;/a&gt;&lt;br /&gt;アーカイブは、以下からDL可能です。&lt;br /&gt;&lt;a href="https://github.com/facebook/php-sdk/downloads"&gt;https://github.com/facebook/php-sdk/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;必要なのはsrcディレクトリ以下です。&lt;br /&gt;今回は、fuel/app/vendor下に"facebook-php-sdk"というディレクトリを作成。&lt;br /&gt;その下に、DLしたsrcディレクトリを配置することにしましょう。&lt;br /&gt;&lt;pre&gt;fuel/&lt;br /&gt;├ app/&lt;br /&gt;&amp;nbsp;├ vendor/&lt;br /&gt;&amp;nbsp; ├ facebook-php-sdk/[新規作成]&lt;br /&gt;&amp;nbsp;&amp;nbsp; ├ src/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├ base_facebook.php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├ facebook.php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├ fb_ca_chain_bundle.crt&lt;/pre&gt;&lt;br /&gt;&lt;hr/&gt;【自分用のコンフィグファイルを作成】&lt;br /&gt;色々と触りやすくする為、自分用のコンフィグファイルを作ります。&lt;br /&gt;以下、次回用の設定を含みます。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;fuel/app/config/custom.phpを作成します。&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'facebook' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'init' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'appId'&amp;nbsp; =&amp;gt; 'YOUR_FACEBOOK_APP_ID',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'secret' =&amp;gt; 'YOUR_FACEBOOK_APP_SECRET',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'login' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'redirect_uri' =&amp;gt; 'http://127.0.0.1/fuelfb/public/index/callback/',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'scope' =&amp;gt; array('publish_stream',),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'logout' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'next' =&amp;gt; 'http://127.0.0.1/fuelfb/public/index/index/',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;/* End of file custom.php */&lt;/pre&gt;'appId'と'secret'の値は、予め控えておいた、FacebookアプリのApp IDとApp Secretを書いて下さい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;fuel/app/config/config.phpを修正します。&lt;br /&gt;下の方(214行目辺り)の&lt;br /&gt;&lt;pre class="brush:php"&gt;'config'&amp;nbsp; =&amp;gt; array(),&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="brush:php"&gt;'config'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'custom' =&amp;gt; null,&lt;br /&gt;),&lt;/pre&gt;にして下さい。&lt;br /&gt;先に作成した、fuel/app/config/custom.phpが自動で読み込まれるようになります。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;【コントローラとビューの作成】&lt;br /&gt;次に、ファイルを3つ、作成します。&lt;br /&gt;* fuel/app/classes/controller/index.php&lt;br /&gt;* fuel/app/views/template.php&lt;br /&gt;* fuel/app/views/index/index.php (fuel/app/views/index/ディレクトリも併せて作成して下さい。)&lt;br /&gt;&lt;br /&gt;ソース内容は、以下の通りです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fuel/app/classes/controller/index.php&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;require_once APPPATH.'vendor/facebook-php-sdk/src/facebook.php';&lt;br /&gt;&lt;br /&gt;class Controller_Index extends Controller_Template {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private $fb;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function before()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;parent::before();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$this-&amp;gt;fb = new Facebook(Config::get('facebook.init'));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_index()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$this-&amp;gt;template-&amp;gt;title = 'Index » Index';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$data = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'is_login' =&amp;gt; $this-&amp;gt;fb-&amp;gt;getUser()?true:false,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$this-&amp;gt;template-&amp;gt;content = View::forge('index/index',$data);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_login()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit('TODO : login');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_callback()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit('TODO : callback');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_logout()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit('TODO : logout');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;import('facebook-php-sdk/src/facebook', 'vendor');&lt;br /&gt;としたかったのですが、どうも、fuel/core/vendor下に配置しないとエラーになるようです。&lt;br /&gt;なので今回は、require_onceの形を取っています。&lt;br /&gt;&lt;br /&gt;fuel/app/views/template.php&lt;br /&gt;&lt;pre class="brush:html"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;meta charset="utf-8"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;&amp;lt;?php echo $title; ?&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* { margin: 0; padding: 0; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;body { background-color: #EEE; font-family: sans-serif; font-size: 16px; line-height: 20px; margin: 40px; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;#wrapper { padding: 30px; background: #fff; color: #333; margin: 0 auto; width: 600px; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;a { color: #36428D; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;h1 { color: #000; font-size: 55px; padding: 0 0 25px; line-height: 1em; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.intro { font-size: 22px; line-height: 30px; font-family: georgia, serif; color: #555; padding: 29px 0 20px; border-top: 1px solid #CCC; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.notice { border: 1px solid #CCC; padding: 10px; background-color: #EEE; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;h2 { margin: 50px 0 15px; padding: 0 0 10px; font-size: 18px; border-bottom: 1px dashed #ccc; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;h2.first { margin: 10px 0 15px; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;p { margin: 0 0 15px; line-height: 22px;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;a { color: #666; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pre { border-left: 1px solid #ddd; line-height:20px; margin:20px; padding-left:1em; font-size: 16px; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pre, code { color:#137F80; font-family: Courier, monospace; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ul { margin: 15px 30px; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;li { line-height: 24px;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;label { display: block; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.footer { color: #777; font-size: 12px; margin: 40px 0 0 0; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;div id="wrapper"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;h1&amp;gt;&amp;lt;?php echo $title; ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;?php if (Session::get_flash('notice')): ?&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;div class="notice"&amp;gt;&amp;lt;p&amp;gt;&amp;lt;?php echo implode('&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;', (array) Session::get_flash('notice')); ?&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;?php echo $content; ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;p class="footer"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;a href="http://fuelphp.com"&amp;gt;Fuel&amp;lt;/a&amp;gt; is released under the MIT license.&amp;lt;br /&amp;gt;Page rendered in {exec_time}s using {mem_usage}mb of memory.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;なんだか良くわからない。。。と思われた方も、今回は、気にしなくて良いです。&lt;br /&gt;とりあえず、ベタ貼りで良いです。&lt;br /&gt;&lt;br /&gt;fuel/app/views/index/index.php&lt;br /&gt;&lt;pre class="brush:html"&gt;&amp;lt;p&amp;gt;Index&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php if ($is_login): ?&amp;gt;&lt;br /&gt;&amp;lt;a href="http://127.0.0.1/fuelfb/public/index/logout/"&amp;gt;Logout.&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;?php else: ?&amp;gt;&lt;br /&gt;&amp;lt;a href="http://127.0.0.1/fuelfb/public/index/login/"&amp;gt;Login with Facebook.&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;?php endif; ?&amp;gt;&lt;/pre&gt;&lt;br /&gt;これら3ファイルは、oilコマンドで自動生成して、若干の修正を施した内容です。&lt;br /&gt;(fuel/app/views/template.phpは、全くそのままです。)&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;【XAMPPのphp.ini修正】&lt;br /&gt;xampp/php/php.iniの&lt;br /&gt;;extension=php_curl.dll&lt;br /&gt;を&lt;br /&gt;extension=php_curl.dll&lt;br /&gt;にします。&lt;br /&gt;Facebook PHP SDKを使用する際に必要です。&lt;br /&gt;ここで、XAMPPのApacheを再起動して下さい。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;【確認】&lt;br /&gt;http://127.0.0.1/fuelfb/public/index/index/&lt;br /&gt;にアクセスして、以下が表示されれば、OKです。&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://2.bp.blogspot.com/-KPYyXjOqKpY/TtwVog-1TmI/AAAAAAAAAvY/rxQy31kv8io/s1600/1-2.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="211" width="320" src="http://2.bp.blogspot.com/-KPYyXjOqKpY/TtwVog-1TmI/AAAAAAAAAvY/rxQy31kv8io/s320/1-2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;fuel/app/classes/controller/index.phpのaction_index()が呼び出されました。&lt;br /&gt;"index"の部分がfuel/app/views/index/index.phpです。&lt;br /&gt;外枠にはfuel/app/views/template.phpが使用されています。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;今回は、ここまでです。&lt;br /&gt;とりあえず、ベタ貼りで動けばOKです。&lt;br /&gt;後で改造して挙動を伺って頂ければと思います。&lt;br /&gt;お疲れ様でした。&lt;br /&gt;&lt;br /&gt;次回は、&lt;br /&gt;DB(テーブル)作成、モデル作成、認証&amp;ウォール投稿機能作成。&lt;br /&gt;をバリデーション付きで、一気に行います。&lt;br /&gt;ポイントとなりそうな箇所の解説も併記します。&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;■4日目&lt;br /&gt;&lt;a href="https://twitter.com/fukata"&gt;@fukata&lt;/a&gt; さん&lt;br /&gt;&lt;a href="http://fukata.org/2011/12/04/fuelphp-usage-validation/"&gt;[FuelPHP]Validationの使い方&lt;/a&gt;&lt;br /&gt;次回予定している実装編の参考にさせて頂きます。&lt;br /&gt;&lt;br /&gt;■6日目&lt;br /&gt;&lt;a href="https://twitter.com/9ensan"&gt;@9ensan&lt;/a&gt; さん&lt;br /&gt;&lt;a href="http://9ensan.com/blog/php/fuelphp/fuelphp-login-auth/"&gt;FuelPHPで作るログイン管理&lt;/a&gt;&lt;br /&gt;ログイン周りはまだ見ていなかったので、助かります。&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;祝、10人突破!!&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;2011/12/11 追記&lt;br /&gt;実装編の記事は、こちらになります。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/12/fuelphpfacebook_11.html"&gt;FuelPHPでFacebookアプリを作ってみよう。実装編。 &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-7444104462837718460?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/7444104462837718460/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphpfacebook.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7444104462837718460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7444104462837718460'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/fuelphpfacebook.html' title='FuelPHPでFacebookアプリを作ってみよう。準備編。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-WFb7gLeUcmg/TtwVe_TvNlI/AAAAAAAAAvM/WvZsJuhQPYA/s72-c/1-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-9036053182629079356</id><published>2011-12-03T18:30:00.000+09:00</published><updated>2011-12-03T18:30:00.493+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='none'/><title type='text'>予約投稿のテストです。</title><content type='html'>2011/12/03 18:30に投稿されれば成功です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-9036053182629079356?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/9036053182629079356/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/9036053182629079356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/9036053182629079356'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/blog-post.html' title='予約投稿のテストです。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-6226624393005299056</id><published>2011-12-03T00:56:00.002+09:00</published><updated>2011-12-03T19:33:18.805+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>Orm\Modelが提供する検索機能。</title><content type='html'>以下のテーブルとOrm\Modelがあるとします。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;create table twitter_users&lt;br /&gt;(&lt;br /&gt;    id int not null auto_increment,&lt;br /&gt;    created_at int not null,&lt;br /&gt;    updated_at int not null,&lt;br /&gt;    twitter_user_id varchar(255) not null unique,&lt;br /&gt;    twitter_screen_name varchar(255) not null,&lt;br /&gt;    twitter_oauth_token varchar(255) not null,&lt;br /&gt;    twitter_oauth_token_secret varchar(255) not null,&lt;br /&gt;    primary key (id)&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;namespace Model;&lt;br /&gt; &lt;br /&gt;class Twitter_User extends \Orm\Model&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    protected static $_observers = array(&lt;br /&gt;        'Orm\Observer_CreatedAt' =&gt; array('events'=&gt;array('before_insert')),&lt;br /&gt;        'Orm\Observer_UpdatedAt' =&gt; array('events'=&gt;array('before_save')),&lt;br /&gt;    );  &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これだけで&lt;br /&gt;$twitter_user = Twitter_User::find_by_twitter_screen_name([screen_name]);&lt;br /&gt;のような感じで、検索出来るようです。&lt;br /&gt;&lt;br /&gt;Model_Crudだとどうなのだろう。個人的にはあまり使わなそうだけど。。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2011/12/03 追記&lt;br /&gt;Twitter_User::delete_by_twitter_screen_name([screen_name]);&lt;br /&gt;は出来なかった。&lt;br /&gt;この辺が実装されると、より強烈になる気がする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-6226624393005299056?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/6226624393005299056/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/ormmodel.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/6226624393005299056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/6226624393005299056'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/ormmodel.html' title='Orm\Modelが提供する検索機能。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-5902508935895151897</id><published>2011-12-03T00:09:00.003+09:00</published><updated>2011-12-03T00:29:27.898+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>Orm\Modelで$_observersを書く場合の注意</title><content type='html'>以前に書いた、以下2つの記事に関係します。&lt;br /&gt;&lt;br /&gt;▼Orm\Modelでバリデーションを定義する。 &lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/ormmodel_28.html"&gt;http://madroom-project.blogspot.com/2011/11/ormmodel_28.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;▼Orm\Modelでリレーショナル型データベースを表現する。 &lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/ormmodel.html"&gt;http://madroom-project.blogspot.com/2011/11/ormmodel.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;サンプルとして、以下のようなコードを記載しました。&lt;br /&gt;&lt;pre class="brush:php"&gt;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('before_insert'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('before_save'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_Validation'=&amp;gt; array('before_save'),&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;どうも、以下の形を取るべきなようです。&lt;br /&gt;&lt;pre class="brush:php"&gt;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('events'=&amp;gt;array('before_insert')),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('events'=&amp;gt;array('before_save')),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_Validation'=&amp;gt; array('events'=&amp;gt;array('before_save')),&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;以下のWarningがログに吐かれていました。&lt;br /&gt;--&lt;br /&gt;Orm\Model::observers - Passing observer events as array is deprecated, they must be&lt;br /&gt;inside another array under a key "events". Check the docs for more info.&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;慣れるまでは頻繁にログ見るようにしなくちゃな。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-5902508935895151897?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/5902508935895151897/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5902508935895151897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5902508935895151897'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html' title='Orm\Modelで$_observersを書く場合の注意'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-5257751824874147061</id><published>2011-11-29T22:10:00.002+09:00</published><updated>2011-12-02T16:45:06.090+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><category scheme='http://www.blogger.com/atom/ns#' term='fpac2011'/><title type='text'>FuelPHP Advent Calendar 2011</title><content type='html'>中々こういった機会も無いと思いますので、参加させて頂きます。&lt;br /&gt;&lt;br /&gt;▼FuelPHP Advent Calendar 2011&lt;br /&gt;&lt;a href="http://atnd.org/events/22380"&gt;http://atnd.org/events/22380&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;▼FuelPHP Advent Calendar 2011 が始まります！&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Kenji_s/20111129/1322565994"&gt;http://d.hatena.ne.jp/Kenji_s/20111129/1322565994&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;結果論になってしまいますが、フライングし過ぎた感がある。。。&lt;br /&gt;先にイベントを知っていたら、ネタを溜め込みまくって全然書いていなかった事でしょう。&lt;br /&gt;&lt;br /&gt;どうせだから、ココまでのまとめ的な記事を書こうかなー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-5257751824874147061?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/5257751824874147061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphp-advent-calendar-2011.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5257751824874147061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5257751824874147061'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphp-advent-calendar-2011.html' title='FuelPHP Advent Calendar 2011'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1439273024163235095</id><published>2011-11-28T23:31:00.009+09:00</published><updated>2011-12-03T00:11:21.728+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>Orm\Modelでバリデーションを定義する。</title><content type='html'>2011/12/03 追記&lt;br /&gt;こちらも併せて御覧ください。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html"&gt;http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;前回の記事に書いたモデルにバリデーションを追加してみます。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/ormmodel.html"&gt;http://madroom-project.blogspot.com/2011/11/ormmodel.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;\app\classes\model\twitter\user.php&lt;br /&gt;&lt;pre class="brush:php"&gt;namespace Model;&lt;br /&gt;&lt;br /&gt;class Twitter_User extends \Orm\Model&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('before_insert'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('before_save'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_Validation' =&amp;gt; array('before_save'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_properties = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'id', &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'created_at',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'updated_at',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'user_id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'twitter_user_id' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'valid_string' =&amp;gt; array('integer'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'twitter_screen_name' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'match_pattern' =&amp;gt; array('/^([a-zA-Z0-9_])+$/'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'twitter_oauth_token' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'match_pattern' =&amp;gt; array('/^([a-zA-Z0-9\-])+$/'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'twitter_oauth_token_secret' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'validation' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'trim',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'required',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'max_length' =&amp;gt; array(255),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'valid_string' =&amp;gt; array('alpha_numeric'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_belongs_to = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'user' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'key_from' =&amp;gt; 'user_id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'model_to' =&amp;gt; 'Model\User',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'key_to' =&amp;gt; 'id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'cascade_save' =&amp;gt; false, // trueにすると一切の変更がない場合のsave()でエラーとなる。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'cascade_delete' =&amp;gt; false, // trueにすると削除時に親も消してしまう。注意。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;}&lt;/pre&gt;match_patternの内容からrequired要らないじゃん。とかは、無しでお願いします。。。&lt;br /&gt;その他、ツイッタの認証情報に対する検証精度は保証出来ません。。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ポイントは&lt;br /&gt;* $_observersに'Orm\Observer_Validation' =&amp;gt; array('before_save')を追加すること。&lt;br /&gt;* $_propertiesにカラム毎の定義を書くこと。&lt;br /&gt;の二点と思います。&lt;br /&gt;尚、$_propertiesには、内部でしか使用しないidやcreated_atも書いておかないとエラーになりました。&lt;br /&gt;&lt;br /&gt;バリデーションの細かな使い方は&lt;br /&gt;\core\classes\validation.php&lt;br /&gt;を見て、なんとなく確認しました。&lt;br /&gt;&lt;br /&gt;で、気づいた方もいらっしゃるかと思いますが、各バリデーションに'trim'と書いています。&lt;br /&gt;CodeIgniterでは、以下のような事がバリデーションで可能です。&lt;br /&gt;&lt;a href="http://codeigniter.jp/user_guide_ja/libraries/form_validation.html"&gt;http://codeigniter.jp/user_guide_ja/libraries/form_validation.html&lt;/a&gt;&lt;br /&gt;&amp;gt; Note: また、 trim、htmlspecialchars、urldecode などの引数を1つだけとる&lt;br /&gt;&amp;gt; PHP の組み込み関数をどれでも使用することができます。&lt;br /&gt;&lt;br /&gt;FuelPHPでも見事、出来ました。&lt;br /&gt;恐らく、書いた順に実行されるはずなので、md5する場合とかは、一番最後に書きましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;追記:&lt;br /&gt;使い方を書いていなかったので、書いておきます。&lt;br /&gt;$twitter_userは前述のTwitter_Userモデルです。&lt;br /&gt;&lt;pre class="brush:php"&gt;try&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$twitter_user-&amp;gt;save();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// TODO: 成功時の処理&lt;br /&gt;}&lt;br /&gt;catch (Orm\ValidationFailed $e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// TODO: エラー時の処理(エラーメッセージは $e-&amp;gt;getMessage() で取得可。)&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/packages/orm/creating_models.html"&gt;http://docs.fuelphp.com/packages/orm/creating_models.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/packages/orm/observers/included.html"&gt;http://docs.fuelphp.com/packages/orm/observers/included.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1439273024163235095?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1439273024163235095/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/ormmodel_28.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1439273024163235095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1439273024163235095'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/ormmodel_28.html' title='Orm\Modelでバリデーションを定義する。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8944287110911961620</id><published>2011-11-28T22:57:00.009+09:00</published><updated>2011-12-03T00:11:40.002+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>Orm\Modelでリレーショナル型データベースを表現する。</title><content type='html'>2011/12/03 追記&lt;br /&gt;こちらも併せて御覧ください。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html"&gt;http://madroom-project.blogspot.com/2011/12/ormmodelobservers.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;まず、以下2つのテーブルがあることとします。&lt;br /&gt;usersが親。twitter_usersが子。&lt;br /&gt;users.id = twitter_users.user_idの関係です。&lt;br /&gt;&lt;pre class="brush:sql"&gt;create table users&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;id int not null auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;created_at int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;updated_at int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;primary key (id)&lt;br /&gt;);&lt;br /&gt;create table twitter_users&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;id int not null auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;created_at int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;updated_at int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;user_id int not null unique,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;twitter_user_id varchar(255) not null unique,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;twitter_screen_name varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;twitter_oauth_token varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;twitter_oauth_token_secret varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;primary key (id)&lt;br /&gt;);&lt;/pre&gt;一見、1:1なので、usersにまとめられそうですが、その辺りは大人の事情です。&lt;br /&gt;これをOrm\Modelで表現するにはどうするか。が今回の話です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まず、親となるusersテーブルに対するモデル。&lt;br /&gt;app\classes\model\user.php&lt;br /&gt;&lt;pre class="brush:php"&gt;namespace Model;&lt;br /&gt;&lt;br /&gt;class User extends \Orm\Model&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('before_insert'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('before_save'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_has_one = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'twitter_user' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'key_from' =&amp;gt; 'id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'model_to' =&amp;gt; 'Model\Twitter_User',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'key_to' =&amp;gt; 'user_id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'cascade_save' =&amp;gt; true, // true/falseどちらで有るべきか、要調査。とりあえずはドキュメント通り。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'cascade_delete' =&amp;gt; true, // falseにすると、削除時にtwitter_userが削除されなかった。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;次に、子となるtwitter_usersテーブルに対するモデル。&lt;br /&gt;\app\classes\model\twitter\user.php&lt;br /&gt;&lt;pre class="brush:php"&gt;namespace Model;&lt;br /&gt;&lt;br /&gt;class Twitter_User extends \Orm\Model&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('before_insert'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('before_save'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_belongs_to = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'user' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'key_from' =&amp;gt; 'user_id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'model_to' =&amp;gt; 'Model\User',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'key_to' =&amp;gt; 'id',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'cascade_save' =&amp;gt; false, // trueにすると一切の変更がない場合のsave()でエラーとなる。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'cascade_delete' =&amp;gt; false, // trueにすると削除時に親も消してしまう。注意。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;* 親のモデルは、子のモデルを$_has_oneで定義する。&lt;br /&gt;* 子のモデルは、親のモデルを$_belongs_toで定義する。&lt;br /&gt;みたいなニュアンスでしょうか。(果たして認識は正しいだろうか。。。)&lt;br /&gt;&lt;strike&gt;尚、'cascade_save'と'cascade_delete'については、実は良くわかっていません。。。&lt;br /&gt;とりあえずドキュメントのままです。(今度調べよう。名前からなんとなく憶測はできるけど。。。)&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;これで、例えば検索は&lt;br /&gt;$user = User::find_by_id(1);&lt;br /&gt;すると&lt;br /&gt;$screen_name = $user-&amp;gt;twitter_user-&amp;gt;twitter_screen_name;&lt;br /&gt;とか出来ます。&lt;br /&gt;$user-&amp;gt;twitter_userは、存在しない場合、nullになるようです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;saveする場合も、例えば&lt;br /&gt;$twitter_user = new Twitter_User;&lt;br /&gt;$twitter_user-&amp;gt;user = new User;&lt;br /&gt;して、&lt;br /&gt;$twitter_user-&amp;gt;twitter_user_id = [Twitterのuser_id];&lt;br /&gt;や、その他のカラム値をセットして&lt;br /&gt;$twitter_user-&amp;gt;save();&lt;br /&gt;すると、親を含めて一発登録出来ました。&lt;br /&gt;&lt;br /&gt;追記:(上記ソースには以下の対処を反映済。)&lt;br /&gt;上記の方法でsaveした時、一切の変更がない場合に、以下のエラーが発生しました。&lt;br /&gt;Orm\FrozenObject [ Error ]: No changes allowed.&lt;br /&gt;子のモデル(\app\classes\model\twitter\user.php)の$_belongs_toの&lt;br /&gt;'cascade_save'をfalseに変更したところ、発生はしなくなりましたが、&lt;br /&gt;一切の変更がない場合でも、updateが走るようになりました。&lt;br /&gt;(updated_atのみが更新されます。)&lt;br /&gt;とりあえず問題は無いですが、この辺りはしっかりと把握しておきたいなぁ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/packages/orm/relations/belongs_to.html"&gt;http://docs.fuelphp.com/packages/orm/relations/belongs_to.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/packages/orm/relations/has_one.html"&gt;http://docs.fuelphp.com/packages/orm/relations/has_one.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;それぞれのモデルで$_observersというのがありますが、&lt;br /&gt;これは、今回の話にはあまり関係有りません。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8944287110911961620?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8944287110911961620/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/ormmodel.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8944287110911961620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8944287110911961620'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/ormmodel.html' title='Orm\Modelでリレーショナル型データベースを表現する。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1523023842885633638</id><published>2011-11-28T21:25:00.006+09:00</published><updated>2011-12-21T23:42:28.477+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>FuelPHPでオリジナルconfigファイルの作成</title><content type='html'>FuelPHPの設定ファイルはcore/config/下に配置され、&lt;br /&gt;設定を変更する場合はapp/config/下にコピー。編集。&lt;br /&gt;が基本です。&lt;br /&gt;&lt;br /&gt;また、app/config/[環境別ディレクトリ]/下にコピーすれば、それが最優先されるはずです。&lt;br /&gt;&lt;br /&gt;以下の関係と認識しています。&lt;br /&gt;app/config/[環境別ディレクトリ]/ &amp;gt; app/config/ &amp;gt; core/config/&lt;br /&gt;&lt;br /&gt;最も基本となる設定ファイルはconfig.phpですが、&lt;br /&gt;例えば先日書いた記事のTwitterのOauth関係の設定をconfig.phpに追記したくはありません。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/fuelphp-zend-framework-twitteroauth.html"&gt;http://madroom-project.blogspot.com/2011/11/fuelphp-zend-framework-twitteroauth.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そこで、オリジナルの設定ファイルが欲しくなり、以下を参考に、やってみました。&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/classes/config.html"&gt;http://docs.fuelphp.com/classes/config.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;まず&lt;br /&gt;app/config/_custom.php&lt;br /&gt;を作成。&lt;br /&gt;ファイル名ソートの関係で先頭にアンダースコアを付与しています。&lt;br /&gt;この辺りは、当然、お好きに。&lt;br /&gt;&lt;pre class="brush:php"&gt;return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'_twitter' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'callbackUrl' =&amp;gt; '[callbackUrl]',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'siteUrl' =&amp;gt; 'http://twitter.com/oauth',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'consumerKey' =&amp;gt; '[consumerKey]',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'consumerSecret' =&amp;gt; '[consumerSecret]',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'authorizeUrl' =&amp;gt; 'http://twitter.com/oauth/authenticate',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;/* End of file _custom.php */&lt;/pre&gt;&lt;br /&gt;(2)&lt;br /&gt;config/config.phpの'always_load'の'config'を以下にする。&lt;br /&gt;&lt;pre class="brush:php"&gt;'config'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'_custom' =&amp;gt; null,&lt;br /&gt;),&lt;/pre&gt;valueにnullを指定してやらないと、どうも、ダメでした。&lt;br /&gt;この点については、後日、調査しよう。。。&lt;br /&gt;&lt;br /&gt;尚、手動でロードする場合は、コントローラのbeforeメソッドなどに、以下を記述。&lt;br /&gt;Config::load('_custom');&lt;br /&gt;&lt;br /&gt;これでConfig::getにて、app/config/_custom.phpの内容を取得できます。&lt;br /&gt;(1)の設定の取得は、Config::get('_twitter')です。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;2011/12/21 追記&lt;br /&gt;Config::get('_twitter.callbackUrl')といった感じで、ドット繋ぎで取得することも可能です。&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;一応、app/config/[環境別ディレクトリ]/_custom.phpも作成して確認しましたが&lt;br /&gt;期待通り、環境別の切り分けもOKでした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1523023842885633638?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1523023842885633638/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphpconfig.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1523023842885633638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1523023842885633638'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphpconfig.html' title='FuelPHPでオリジナルconfigファイルの作成'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2395707017252639239</id><published>2011-11-28T21:23:00.006+09:00</published><updated>2011-12-14T12:05:40.947+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>FuelPHPのLogクラスを使いやすくする</title><content type='html'>2011/12/14 追記&lt;br /&gt;拡張したLogクラスを改良して、掲載ソースを更新しました。&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;例えばdebugログの出力は&lt;br /&gt;Log::debug('DEBUG');&lt;br /&gt;&lt;br /&gt;となります。&lt;br /&gt;&lt;br /&gt;これでも良いのですが、Logクラスは頻繁に使用するはずなので&lt;br /&gt;Log::d('DEBUG');&lt;br /&gt;のようにして使いたい。&lt;br /&gt;&lt;br /&gt;という訳で、拡張します。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;app/classes/log.phpを作成。&lt;br /&gt;&lt;pre class="brush:php"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class Log extends Fuel\Core\Log&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static function i($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return parent::info($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static function d($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return parent::debug($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static function w($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return parent::warning($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static function e($msg, $method = null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(!is_scalar($msg)) $msg = print_r($msg,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return parent::error($msg, $method);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(2)&lt;br /&gt;app/bootstrap.phpのAutoloader::add_classesにapp/classes/log.phpを追加。&lt;br /&gt;&lt;pre class="brush:php"&gt;Autoloader::add_classes(array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Add classes you want to override here&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Example: 'View' =&amp;gt; APPPATH.'classes/view.php',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Log' =&amp;gt; APPPATH.'classes/log.php',&lt;br /&gt;));&lt;/pre&gt;&lt;br /&gt;(3)&lt;br /&gt;これで、&lt;br /&gt;Log::d('DEBUG');&lt;br /&gt;とかで使用出来ます。&lt;br /&gt;&lt;br /&gt;余談ですが、ログファイルへの出力ログレベルはapp/config/config.phpの'log_threshold'です。&lt;br /&gt;環境別に切り替えるには、app/[環境別ディレクトリ]/config.phpを作成すればOKです。&lt;br /&gt;&lt;pre class="brush:php"&gt;return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'log_threshold'&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; Fuel::L_DEBUG,&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;/* End of file config.php */&lt;/pre&gt;今回は書いていませんが、'base_url'とかもここに入ってくるでしょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/general/extending_core.html"&gt;http://docs.fuelphp.com/general/extending_core.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2395707017252639239?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2395707017252639239/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphplog.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2395707017252639239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2395707017252639239'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphplog.html' title='FuelPHPのLogクラスを使いやすくする'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-4524939940132560156</id><published>2011-11-27T05:21:00.006+09:00</published><updated>2011-12-01T12:05:02.773+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><category scheme='http://www.blogger.com/atom/ns#' term='zendframework'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>FuelPHP + Zend Framework でTwitterのOauthをする</title><content type='html'>中途半端な部分もありますが、コントローラのサンプルを書いておきます。&lt;br /&gt;&lt;br /&gt;Zendは1.11.10を使いました。(2にしたいな。。。)&lt;br /&gt;&lt;br /&gt;printしている箇所以降は、実際にはDB保存したり、&lt;br /&gt;認証完了後のURLにリダイレクトしたり。となります。&lt;br /&gt;&lt;br /&gt;バリデーションについては書いていませんが、実際には、当然、行いましょう。&lt;br /&gt;&lt;br /&gt;$accessToken-&amp;gt;user_idでツイッタAPIに問い合わせて、&lt;br /&gt;再度ユーザ情報を取得し直せば、より安全と思います。&lt;br /&gt;&lt;br /&gt;signinアクションにアクセスするとツイッタにリダイレクトされます。&lt;br /&gt;ツイッタでの認証後、callbackに戻る流れです。&lt;br /&gt;&lt;br /&gt;以下の3箇所は、適切な内容に書き換えて下さい。&lt;br /&gt;* [This Controller URL]&lt;br /&gt;* [consumerKey]&lt;br /&gt;* [consumerSecret]&lt;br /&gt;&lt;br /&gt;Session::set('twitter', array('accessToken' =&amp;gt; serialize($accessToken)));&lt;br /&gt;の箇所は、他所で&lt;br /&gt;$twitter = Session::get('twitter');&lt;br /&gt;$accessToken = unserialize($twitter['accessToken']);&lt;br /&gt;のようにして使用される想定です。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;class Controller_Twitter extends Controller_Template {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function before()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;parent::before();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;require_once 'Zend/Loader/Autoloader.php';&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Zend_Loader_Autoloader::getInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_signin()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$twitter = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'callbackUrl' =&amp;gt; '[This Controller URL]/callback/',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'siteUrl' =&amp;gt; 'http://twitter.com/oauth',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'consumerKey' =&amp;gt; '[consumerKey]',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'consumerSecret' =&amp;gt; '[consumerSecret]',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'authorizeUrl' =&amp;gt; 'http://twitter.com/oauth/authenticate',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$zoc = new Zend_Oauth_Consumer($twitter);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$requestToken = $zoc-&amp;gt;getRequestToken();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::set('zoc', $zoc);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::set('twitter', array('requestToken' =&amp;gt; serialize($requestToken)));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::write();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$zoc-&amp;gt;redirect();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function action_callback()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$sess = Session::get('twitter');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$zoc = Session::get('zoc');&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ($_GET &amp;amp;&amp;amp; $sess['requestToken'])&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$requestToken = unserialize($sess['requestToken']);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$accessToken = $zoc-&amp;gt;getAccessToken($_GET, $requestToken);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Session::set('twitter', array('accessToken' =&amp;gt; serialize($accessToken)));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print(' [user_id] : '.$accessToken-&amp;gt;user_id);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print(' [screen_name] : '.$accessToken-&amp;gt;screen_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print(' [oauth_token] : '.$accessToken-&amp;gt;oauth_token);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print(' [oauth_token_secret] : '.$accessToken-&amp;gt;oauth_token_secret);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Request::show_404();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-4524939940132560156?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/4524939940132560156/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphp-zend-framework-twitteroauth.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4524939940132560156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4524939940132560156'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphp-zend-framework-twitteroauth.html' title='FuelPHP + Zend Framework でTwitterのOauthをする'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-9190426786206389403</id><published>2011-11-27T01:11:00.003+09:00</published><updated>2011-12-01T12:02:11.468+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>oil generate scaffoldでOrm\Modelを継承したModelを生成</title><content type='html'>先日、以下の記事を書きました。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/windows-xamppfuelphp.html"&gt;http://madroom-project.blogspot.com/2011/11/windows-xamppfuelphp.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;この時、postsテーブルにはcreated_atというカラムと&lt;br /&gt;updated_atというカラムが作成されました。&lt;br /&gt;これらのカラムは、oil generate scaffoldで作成されたmigrationファイルに、&lt;br /&gt;デフォルトで含まれています。&lt;br /&gt;&lt;br /&gt;カラム名から察するに、insert時やupdate時に、自動でタイムスタンプがsetされるのだろう。&lt;br /&gt;と思っていましたが、どうも、0という値が入り、タイムスタンプが入りません。&lt;br /&gt;&lt;br /&gt;原因は、生成されたModelが、Model_Crudを継承していて、&lt;br /&gt;Orm\Modelを継承していないからでした。&lt;br /&gt;&lt;br /&gt;Orm\Modelを継承したModelを作成するには、&lt;br /&gt;"--orm"を付与してoil generate scaffoldを実行する必要があります。&lt;br /&gt;尚、"generate"は"g"と略せます。具体的には、以下のようなコマンドになります。&lt;br /&gt;$ php oil g scaffold post title:string summary:varchar[250] body:text --orm&lt;br /&gt;&lt;br /&gt;これで、Orm\Modelを継承したModelが作成されました。&lt;br /&gt;&lt;pre class="brush:php"&gt;namespace Model;&lt;br /&gt;&lt;br /&gt;class Post extends \Orm\Model&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static $_observers = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_CreatedAt' =&amp;gt; array('before_insert'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Orm\Observer_UpdatedAt' =&amp;gt; array('before_save'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;また、app/config.phpのalways_loadのpackagesで、ormを有効にする必要があります。&lt;br /&gt;&lt;pre class="brush:php"&gt;'always_load'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * These packages are loaded on Fuel's startup.&amp;nbsp; You can specify them in&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * the following manner:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * array('auth'); // This will assume the packages are in PKGPATH&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * // Use this format to specify the path to the package explicitly&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array('auth'&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; PKGPATH.'auth/')&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * );&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'packages'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'orm',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;/pre&gt;&lt;br /&gt;これでOKと思いきや、postsコントローラにアクセスすると、以下のエラーが発生。&lt;br /&gt;--&lt;br /&gt;Fuel\Core\Database_Exception [ 1054 ]: Unknown column 't0.' in 'where clause' [ SELECT `t0`.`id` AS `t0_c0`, `t0`.`title` AS `t0_c1`, `t0`.`summary` AS `t0_c2`, `t0`.`body` AS `t0_c3`, `t0`.`created_at` AS `t0_c4`, `t0`.`updated_at` AS `t0_c5` FROM `posts` AS `t0` WHERE `t0`.`id` = '0' OR ((`t0`.`` IS null)) LIMIT 1 ]&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;このエラーは、自動生成されたコントローラの&lt;br /&gt;&lt;pre class="brush:php"&gt;$data['posts'] = Post::find_all();&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="brush:php"&gt;$data['posts'] = Post::find('all');&lt;/pre&gt;にすることで解決出来ました。&lt;br /&gt;&lt;br /&gt;これでinsertやupdateをしてやると、無事、created_atやupdated_atに&lt;br /&gt;UNIXタイムスタンプが入るようになりました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/packages/oil/generate.html"&gt;http://docs.fuelphp.com/packages/oil/generate.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-9190426786206389403?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/9190426786206389403/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/oil-generate-scaffoldormmodelmodel.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/9190426786206389403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/9190426786206389403'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/oil-generate-scaffoldormmodelmodel.html' title='oil generate scaffoldでOrm\Modelを継承したModelを生成'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1447413451625476223</id><published>2011-11-26T21:33:00.000+09:00</published><updated>2011-11-26T21:33:12.996+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xampp'/><title type='text'>windows + xampp にPHPUnitをインストールする。</title><content type='html'>手順のメモ。&lt;br /&gt;&lt;br /&gt;* xamppはCドライブ直下にあることとする。&lt;br /&gt;* 以下のコマンドはxampp/php下で実行。&lt;br /&gt;* 管理者として実行。&lt;br /&gt;&lt;br /&gt;(1) pearチャンネルのアップデート&lt;br /&gt;pear update-channels&lt;br /&gt;&lt;br /&gt;(2) PEAR更新&lt;br /&gt;pear upgrade pear&lt;br /&gt;&lt;br /&gt;(3) 古いPHPUnit削除&lt;br /&gt;pear uninstall phpunit&lt;br /&gt;pear uninstall phpunit2&lt;br /&gt;&lt;br /&gt;(4) 一応、以下も手動で削除&lt;br /&gt;xampp/php/PEAR/PHPUnit&lt;br /&gt;xampp/php/PEAR/PHPUnit2&lt;br /&gt;&lt;br /&gt;(5) チャンネル追加&lt;br /&gt;pear channel-discover pear.phpunit.de&lt;br /&gt;pear channel-discover components.ez.no&lt;br /&gt;pear channel-discover pear.symfony-project.com&lt;br /&gt;&lt;br /&gt;(6) php.iniを編集&lt;br /&gt;extension=php_curl.dll&lt;br /&gt;を有効に。&lt;br /&gt;&lt;br /&gt;(7) PHPUnitをインストール&lt;br /&gt;pear install phpunit/PHPUnit&lt;br /&gt;&lt;br /&gt;(8) 確認&lt;br /&gt;phpunit --version&lt;br /&gt;でバージョンが表示されること。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■参考&lt;br /&gt;PHPUnitをXAMPPにインストール&lt;br /&gt;&lt;a href="http://lazesoftware.com/blog/11/0213/"&gt;http://lazesoftware.com/blog/11/0213/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1447413451625476223?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1447413451625476223/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xampp-phpunit.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1447413451625476223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1447413451625476223'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xampp-phpunit.html' title='windows + xampp にPHPUnitをインストールする。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2104985375453947914</id><published>2011-11-26T02:57:00.005+09:00</published><updated>2011-12-01T11:59:42.628+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>windows + xamppでFuelPHPのブログチュートリアル</title><content type='html'>oilコマンドの使用を前提にして書きます。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphpoil.html"&gt;http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphpoil.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下を参考にさせて頂きました。というか、途中までは殆どそのままです。&lt;br /&gt;FuelPHP のブログチュートリアル:&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Kenji_s/20111109/1320827056"&gt;http://d.hatena.ne.jp/Kenji_s/20111109/1320827056&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;では、手順をメモ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;development環境なので、app/config/development/db.phpを修正。&lt;br /&gt;&lt;pre class="brush:php"&gt;return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'default' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'type'&amp;nbsp;&amp;nbsp; =&amp;gt; 'mysql',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'connection' =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'hostname'&amp;nbsp; =&amp;gt; 'localhost',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'port'&amp;nbsp;&amp;nbsp; =&amp;gt; '3306',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'database'&amp;nbsp; =&amp;gt; 'fuel_sample_blog',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'username'&amp;nbsp; =&amp;gt; 'root',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'password'&amp;nbsp; =&amp;gt; '',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'persistent' =&amp;gt; false,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;br /&gt;);&lt;/pre&gt;* DBのfuel_sample_blogは予め作成しておくこと。&lt;br /&gt;(persistentって何だろう。。。)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;$ php oil generate scaffold post title:string summary:varchar[250] body:text&lt;br /&gt;を実行。以下が生成されました。&lt;br /&gt;app/classes/model/post.php&lt;br /&gt;app/migrations/001_create_posts.php&lt;br /&gt;app/classes/controller/posts.php&lt;br /&gt;app/views/posts/index.php&lt;br /&gt;app/views/posts/view.php&lt;br /&gt;app/views/posts/create.php&lt;br /&gt;app/views/posts/edit.php&lt;br /&gt;app/views/posts/_form.php&lt;br /&gt;app/views/template.php&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;$ php oil refine migrate&lt;br /&gt;を実行。&lt;br /&gt;fuel_sample_blogにmigrationテーブルとpostsテーブルが作成されました。&lt;br /&gt;app/config/migrations.phpも作成されました。(他にも何か作成される??)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4)&lt;br /&gt;Postsコントローラにアクセス。&lt;br /&gt;"Add new Post"で登録。&lt;br /&gt;"View"、"Edit"、"Delete"で表示、編集、削除。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(5)&lt;br /&gt;$ php oil refine migrate:down&lt;br /&gt;を実行すると、postsテーブルがDropされました。&lt;br /&gt;その後、(3)を実行すると再作成されました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ここからは実験的な内容です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(6)&lt;br /&gt;これだけだとあまり面白く無いので、試しに&lt;br /&gt;app/migrations/002_create_posts.php&lt;br /&gt;を作成。&lt;br /&gt;(自動で作る方法もあるのかな??というか、たぶんこの方法は誤った方法なのだと思う。)&lt;br /&gt;&lt;pre class="brush:php"&gt;namespace Fuel\Migrations;&lt;br /&gt;&lt;br /&gt;class Create_posts {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function up()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;\DBUtil::add_fields('posts', array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'add_field' =&amp;gt; array('type' =&amp;gt; 'text'),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public function down()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;\DBUtil::drop_table('posts');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;$ php oil refine migrate&lt;br /&gt;を実行してみると、insertしたレコードはそのままに、add_fieldカラムが追加されました。&lt;br /&gt;app/config/migrations.phpの内容も自動更新されるようです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(7)&lt;br /&gt;$ php oil refine migrate --version=1&lt;br /&gt;を実行すると&lt;br /&gt;Migrated app:default version: 1.&lt;br /&gt;と表示されましたが、postsテーブルがDropされていました。&lt;br /&gt;&lt;br /&gt;* app/migrations/001_create_posts.phpのdown()がコールされた??(version downのdown。か。)&lt;br /&gt;&lt;br /&gt;この後、以下のコマンドがどれも上手くいきません。&lt;br /&gt;$ php oil refine migrate&lt;br /&gt;$ php oil refine migrate --version=1&lt;br /&gt;$ php oil refine migrate --version=2&lt;br /&gt;尚、migrationテーブルのversionは0になっていました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(8)&lt;br /&gt;app/migrations/002_create_posts.php&lt;br /&gt;を削除して&lt;br /&gt;$ php oil refine migrate&lt;br /&gt;を実行すると、postsテーブルが再度作成されましたが、&lt;br /&gt;当然、レコードは0件です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(9)&lt;br /&gt;備考。&lt;br /&gt;app/migrations/002_create_posts.php&lt;br /&gt;に"DBUtil::add_fields"と書きましたが、これは&lt;br /&gt;fuel/core/classes/dbutil.phpを参考にしました。&lt;br /&gt;他にも色々ありますね。&lt;br /&gt;&lt;br /&gt;とりあえず、postsコントローラの内容を見ながら、&lt;br /&gt;FuelPHPにおけるDB周りの作法の基本を学びたい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/classes/database/introduction.html"&gt;http://docs.fuelphp.com/classes/database/introduction.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://press.nekoget.com/fuelphp_doc/general/migrations.html"&gt;http://press.nekoget.com/fuelphp_doc/general/migrations.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2104985375453947914?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2104985375453947914/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xamppfuelphp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2104985375453947914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2104985375453947914'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xamppfuelphp.html' title='windows + xamppでFuelPHPのブログチュートリアル'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2496433947256795887</id><published>2011-11-26T00:37:00.005+09:00</published><updated>2011-11-26T01:11:21.015+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>windows + xampp でFuelPHPのoilコマンド。</title><content type='html'>windows + xamppでoilコマンド使えないかなーということで。&lt;br /&gt;&lt;br /&gt;以下に書かれているコマンドに成功しました。&lt;br /&gt;&lt;a href="http://press.nekoget.com/fuelphp_doc/packages/oil/generate.html"&gt;http://press.nekoget.com/fuelphp_doc/packages/oil/generate.html&lt;/a&gt;&lt;br /&gt;具体的には "$ php oil g controller posts action1 action2 action3" です。&lt;br /&gt;&lt;br /&gt;手順をメモします。&lt;br /&gt;尚、以下のコマンドは全て"oil"ファイルがある場所で実行しています。&lt;br /&gt;すなわち、fuelディレクトリやpublicディレクトリがある場所です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;まず、php.exeにパスを通します。&lt;br /&gt;xampp/phpディレクトリになります。&lt;br /&gt;&lt;br /&gt;パスを通すのには、以下が便利です。&lt;br /&gt;■Redmond Path&lt;br /&gt;&lt;a href="http://www.forest.impress.co.jp/lib/sys/wincust/registry/redmondpath.html"&gt;http://www.forest.impress.co.jp/lib/sys/wincust/registry/redmondpath.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;また、コマンドプロンプトは個人的に使いにくく、NYAOSがおすすめです。&lt;br /&gt;UNIXライクです。現在の最新は"NYAOS 3.x"です。&lt;br /&gt;今回はwindowsの話なので"Windows binary"をDLすれば良いかと。&lt;br /&gt;&lt;br /&gt;■NYAOS&lt;br /&gt;&lt;a href="http://www.nyaos.org/index.cgi"&gt;http://www.nyaos.org/index.cgi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;ココまでの話での備考。&lt;br /&gt;&lt;br /&gt;実は今回はNYAOSではなく、Aptana + portablegitによる&lt;br /&gt;Aptanaのターミナルから実行して確認しています。&lt;br /&gt;尚、パスを通した後に再起動必要かも。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;とりあえずhelpを実行してみます。&lt;br /&gt;$ php oil help&lt;br /&gt;&lt;br /&gt;以下が表示されれば、めでたし。&lt;br /&gt;--&lt;br /&gt;Usage:&lt;br /&gt;php oil [cells|console|generate|help|test]&lt;br /&gt;&lt;br /&gt;Runtime options:&lt;br /&gt;-f, [--force]    # Overwrite files that already exist&lt;br /&gt;-s, [--skip]     # Skip files that already exist&lt;br /&gt;-q, [--quiet]    # Supress status output&lt;br /&gt;-t, [--speak]    # Speak errors in a robot voice&lt;br /&gt;&lt;br /&gt;Description:&lt;br /&gt;The 'oil' command can be used in several ways to facilitate quick development, help with&lt;br /&gt;testing your application and for running Tasks.&lt;br /&gt;&lt;br /&gt;Documentation:&lt;br /&gt;http://fuelphp.com/docs/packages/oil/intro.html&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4)&lt;br /&gt;$ php oil g controller posts action1 action2 action3&lt;br /&gt;も実行してみましょう。ごそごそとファイルが生成されればOKと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(5)&lt;br /&gt;上記、coreディレクトリやpackagesディレクトリを移動して無ければうまくいくはずですが、&lt;br /&gt;移動している場合、もう少し、やることがあります。&lt;br /&gt;&lt;br /&gt;私の場合、coreディレクトリやpackagesディレクトリは&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphp.html"&gt;http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphp.html&lt;/a&gt;&lt;br /&gt;のように、共通的な場所(各種ライブラリフォルダ)に移動させているので、&lt;br /&gt;前述のコマンドを実行するとエラーになりました。&lt;br /&gt;&lt;br /&gt;なので、oilファイルを修正します。&lt;br /&gt;とは言っても、coreディレクトリやpackagesディレクトリの移動に伴う&lt;br /&gt;public/index.phpの修正と似たような感じです。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;define('APPPATH', realpath(__DIR__.'/fuel/app/').DIRECTORY_SEPARATOR);&lt;br /&gt;&lt;/pre&gt;の下に&lt;br /&gt;&lt;pre class="brush:php"&gt;require_once(APPPATH.'config/config.localhost.php');&lt;br /&gt;&lt;/pre&gt;を記述。&lt;br /&gt;oilはローカルで実行できれば良いので、ハードコーディング。&lt;br /&gt;config/config.localhost.phpについては、前述のURLの記事を御覧ください。&lt;br /&gt;&lt;br /&gt;PKGPATHとCOREPATHの宣言部を修正。&lt;br /&gt;それぞれ、以下にする。&lt;br /&gt;&lt;pre class="brush:php"&gt;define('PKGPATH', realpath(ENV_PKGPATH).DIRECTORY_SEPARATOR);&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush:php"&gt;define('COREPATH', realpath(ENV_COREPATH).DIRECTORY_SEPARATOR);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで、コマンド実行時のエラーは発生しなくなりました。&lt;br /&gt;ローカル用のconfigファイルも共通化出来たし、良かった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2496433947256795887?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2496433947256795887/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphpoil.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2496433947256795887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2496433947256795887'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphpoil.html' title='windows + xampp でFuelPHPのoilコマンド。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-95471049826825635</id><published>2011-11-25T22:59:00.001+09:00</published><updated>2011-12-01T11:56:15.827+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>FuelPHPでSmartyの設定とかのカスタマイズについて。</title><content type='html'>FuelPHPでSmartyを動かすまでの手順は、以下を参考にして下さい。&lt;br /&gt;&lt;a href="http://madroom-project.blogspot.com/2011/11/fuelphpsmarty.html"&gt;http://madroom-project.blogspot.com/2011/11/fuelphpsmarty.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;まず、Smartyの設定は&lt;br /&gt;fuel/packages/parser/parser.php(以下、parser.php)&lt;br /&gt;に書いてありました。&lt;br /&gt;&lt;br /&gt;そして、この設定は&lt;br /&gt;fuel/packages/parser/classes/view/smarty.php(以下、smarty.php)&lt;br /&gt;で読み込まれるようです。&lt;br /&gt;&lt;br /&gt;smarty.phpを見るとわかるように、例えば&lt;br /&gt;$smarty-&amp;gt;auto_literal&lt;br /&gt;は有りません。&lt;br /&gt;&lt;br /&gt;設定する必要があるならば、smarty.phpに以下を追記。&lt;br /&gt;&lt;pre class="brush: php"&gt;static::$_parser-&amp;gt;auto_literal = \Config::get('parser.View_Smarty.auto_literal', false);&lt;/pre&gt;parser.phpの'View_Smarty'直下に'auto_literal'の設定を追加。&lt;br /&gt;といった具合でしょうか。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;尚、parser.phpには"app/config下にコピーして使ってください。"みたいなコメントがあります。&lt;br /&gt;が、少しハマりました。。。&lt;br /&gt;app/config/parser.phpを作成(オリジナルをコピー)して、&lt;br /&gt;例えば'View_Smarty'の'delimiters'を&lt;br /&gt;'delimiters'&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; array('{%', '%}'),&lt;br /&gt;にしても、全く変化が有りませんでした。&lt;br /&gt;&lt;br /&gt;どうも、オリジナルのparser.phpでの設定が強いように見えます。&lt;br /&gt;でも、'include'に関しては、オリジナルのparser.phpの'include'が無ければ、&lt;br /&gt;コピーしたparser.phpの'include'を見に行く。という挙動を取るように見えます。&lt;br /&gt;具体的には&lt;br /&gt;packages/parser/classes/view.php の&lt;br /&gt;&lt;pre class="brush:php"&gt;// Include necessary files&lt;br /&gt;foreach ((array) \Config::get('parser.'.$class.'.include', array()) as $include)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ( ! array_key_exists($include, static::$loaded_files))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;require $include;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;static::$loaded_files[$include] = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;に刺さるのかなと。&lt;br /&gt;&lt;br /&gt;うーん。出来ればオリジナルのファイルに手を加えたくない。&lt;br /&gt;最もクリーンに拡張できる方法は何だろう。。。&lt;br /&gt;&lt;br /&gt;そもそも、Smartyに大きな執着は有りませんが、調べ始めてしまったので、&lt;br /&gt;とりあえずココまでは調査してみました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-95471049826825635?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/95471049826825635/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphpsmarty_25.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/95471049826825635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/95471049826825635'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphpsmarty_25.html' title='FuelPHPでSmartyの設定とかのカスタマイズについて。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-3697481829896615134</id><published>2011-11-25T22:29:00.002+09:00</published><updated>2011-12-01T12:19:52.806+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>FuelPHPでSmartyを使ってみる。</title><content type='html'>とりあえず、必要最小限の手順をメモします。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;app/vendorにSmartyを配置。&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/-QjI2SqbNDF4/Ts-U4FPE4fI/AAAAAAAAAuE/YPsh0w2tai8/s1600/Smarty.jpg" imageanchor="1"&gt;&lt;img border="0" height="155" src="http://2.bp.blogspot.com/-QjI2SqbNDF4/Ts-U4FPE4fI/AAAAAAAAAuE/YPsh0w2tai8/s320/Smarty.jpg" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;app/config/config.phpの'always_load'の'packages'に'parser'を追加。&lt;br /&gt;&lt;pre class="brush: php"&gt;'always_load'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * These packages are loaded on Fuel's startup.&amp;nbsp; You can specify them in&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * the following manner:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * array('auth'); // This will assume the packages are in PKGPATH&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * // Use this format to specify the path to the package explicitly&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array('auth'&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; PKGPATH.'auth/')&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * );&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'packages'&amp;nbsp; =&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//'orm',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'parser',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;),&lt;/pre&gt;(3)&lt;br /&gt;アクセスするコントローラを修正。&lt;br /&gt;今回は、DLしたFuelPHPに入っているdefaultのコントローラである、&lt;br /&gt;app/classes/controller/welcome.phpを修正。&lt;br /&gt;&lt;pre class="brush: php"&gt;return Response::forge(View::forge('welcome/index'));&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="brush: php"&gt;$data = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'title' =&amp;gt; 'TITLE',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'body' =&amp;gt; 'BODY',&lt;br /&gt;);&lt;br /&gt;return Response::forge(View_Smarty::forge('welcome/index', $data));&lt;/pre&gt;にする。&lt;br /&gt;&lt;br /&gt;(4)&lt;br /&gt;viewファイルの作成。&lt;br /&gt;app/views/welcomeにindex.smartyを作成。&lt;br /&gt;&lt;pre class="brush: html"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;{$title}&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;{$body}&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(5)&lt;br /&gt;コントローラにアクセス。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-3697481829896615134?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/3697481829896615134/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphpsmarty.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/3697481829896615134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/3697481829896615134'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/fuelphpsmarty.html' title='FuelPHPでSmartyを使ってみる。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-QjI2SqbNDF4/Ts-U4FPE4fI/AAAAAAAAAuE/YPsh0w2tai8/s72-c/Smarty.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1116947677451668966</id><published>2011-11-24T22:02:00.001+09:00</published><updated>2011-11-24T22:06:55.823+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuelphp'/><title type='text'>windows + xamppにFuelPHPをインストールしてみる。</title><content type='html'>とりあえずローカルで触ってみよう。というわけで。&lt;br /&gt;インストールと、自分的な最低限の調整をメモ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■DL&lt;br /&gt;&lt;a href="http://fuelphp.com/"&gt;http://fuelphp.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;windowsのローカル環境にインストールするので、手動で。&lt;br /&gt;&lt;a href="http://docs.fuelphp.com/installation/instructions.html#/manual"&gt;http://docs.fuelphp.com/installation/instructions.html#/manual&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DLして解凍して配置してpublic/index.phpにアクセスするだけでとりあえず動きました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■環境別設定&lt;br /&gt;(1)&lt;br /&gt;まず、以下は、共通のライブラリフォルダに退避。&lt;br /&gt;fuel/core&lt;br /&gt;fuel/packages&lt;br /&gt;(packagesは退避すべきか??後日確認。。。)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;環境別の設定ファイルを作成。&lt;br /&gt;とりあえずローカルで動かすので&lt;br /&gt;fuel/app/config/config.localhost.php&lt;br /&gt;を作成。以下を記述。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;define('ENV_PKGPATH', 'xxx/fuel/packages/');&lt;br /&gt;define('ENV_COREPATH','xxx/fuel/core/');&lt;br /&gt;$_SERVER['FUEL_ENV'] = 'development'; // Fuel::DEVELOPMENT&lt;br /&gt;//$_SERVER['FUEL_ENV'] = 'test'; // Fuel::TEST&lt;br /&gt;//$_SERVER['FUEL_ENV'] = 'stage'; // Fuel::STAGE&lt;br /&gt;//$_SERVER['FUEL_ENV'] = 'production'; // Fuel::PRODUCTION&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;環境が増えるに連れて&lt;br /&gt;config.xxx.php&lt;br /&gt;config.yyy.php&lt;br /&gt;といった具合に環境別ファイルを用意。&lt;br /&gt;尚、xxxやyyyの箇所は$_SERVER['SERVER_NAME']を指します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;public/index.phpを修正。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;define('APPPATH', realpath(__DIR__.'/../fuel/app/').DIRECTORY_SEPARATOR);&lt;br /&gt;&lt;/pre&gt;の下に&lt;br /&gt;&lt;pre class="brush: php"&gt;require_once(APPPATH.'config/config.'.$_SERVER['SERVER_NAME'].'.php');&lt;br /&gt;&lt;/pre&gt;を追記。&lt;br /&gt;&lt;br /&gt;PKGPATH定数の宣言箇所を以下に変更。&lt;br /&gt;&lt;pre class="brush: php"&gt;define('PKGPATH', realpath(ENV_PKGPATH).DIRECTORY_SEPARATOR);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;COREPATH定数の宣言箇所を以下に変更。&lt;br /&gt;&lt;pre class="brush: php"&gt;define('COREPATH', realpath(ENV_COREPATH).DIRECTORY_SEPARATOR);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* 備考&lt;br /&gt;$_SERVER['FUEL_ENV']の値を変更するだけでapp/config下のdevelopmentとかproductionを&lt;br /&gt;自動で切り分けてくれると思われます。&lt;br /&gt;まだ未確認ですが、構成的に間違い無いでしょう。&lt;br /&gt;&lt;br /&gt;なので、環境別の設定は&lt;br /&gt;* FuelPHP依存のconfigファイルは、app/configの環境別ディレクトリで対応。&lt;br /&gt;* FuelPHP非依存のconfigファイルは、前述のconfig.*.phpで対応。&lt;br /&gt;を前提としています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1116947677451668966?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1116947677451668966/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1116947677451668966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1116947677451668966'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/windows-xampp-fuelphp.html' title='windows + xamppにFuelPHPをインストールしてみる。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2050448287529046789</id><published>2011-11-20T18:13:00.000+09:00</published><updated>2011-11-20T18:13:15.638+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>Activityを開いた時、ソフトウェアキーボードが自動で表示されないようにする。</title><content type='html'>Activityを開いた時、EditTextにフォーカスが当たっていると、&lt;br /&gt;ソフトウェアキーボードが勝手に開きます。&lt;br /&gt;&lt;br /&gt;以下をonCreate等に記述すると勝手に開かなくなりました。&lt;br /&gt;--&lt;br /&gt;getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);&lt;br /&gt;--&lt;br /&gt;LayoutParams は android.view.WindowManager.LayoutParams です。&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://y-anz-m.blogspot.com/2010/05/android_17.html"&gt;http://y-anz-m.blogspot.com/2010/05/android_17.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2050448287529046789?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2050448287529046789/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/activity.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2050448287529046789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2050448287529046789'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/activity.html' title='Activityを開いた時、ソフトウェアキーボードが自動で表示されないようにする。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2387472871959019692</id><published>2011-11-17T23:32:00.000+09:00</published><updated>2011-11-17T23:32:28.676+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>AndroidのWebViewでlocalhostにアクセスする場合のURL</title><content type='html'>例えばAndroid向けのWEBアプリをローカルのXAMPPで下ごしらえしている時とかに関係する話です。&lt;br /&gt;&lt;br /&gt;WebViewがloadUrlするURLは&lt;br /&gt;&lt;br /&gt;http://localhost/xxx&lt;br /&gt;ではなく&lt;br /&gt;http://10.0.2.2/xxx&lt;br /&gt;にしましょう。との事です。&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/4336394/webview-and-localhost"&gt;http://stackoverflow.com/questions/4336394/webview-and-localhost&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2387472871959019692?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2387472871959019692/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/androidwebviewlocalhosturl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2387472871959019692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2387472871959019692'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/androidwebviewlocalhosturl.html' title='AndroidのWebViewでlocalhostにアクセスする場合のURL'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-3909868286197253546</id><published>2011-11-17T23:31:00.000+09:00</published><updated>2011-11-17T23:31:59.594+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Xperia arcを2.3.4にしたらバッテリの減りが激速になった件</title><content type='html'>タイトルの通りですが、僕の場合はどうやらK9Mailが悪さをしていたらしく&lt;br /&gt;K9Mailをインスコしなおしたらアプデ前のような感じに戻りました。&lt;br /&gt;&lt;br /&gt;ちなみにどれくらいの速さで減ったかというと&lt;br /&gt;&lt;br /&gt;朝一(8:00くらい。)100%。&lt;br /&gt;通勤中の電車でツイッタみたり音楽聴いたり。&lt;br /&gt;会社に着いて(9:45くらい。)放置。&lt;br /&gt;で、14時頃には尽きる感じでした。&lt;br /&gt;&lt;br /&gt;もちろん、タスクキルアプリは入れているし&lt;br /&gt;アプデ前とアプデ後とで、K9Mailの設定は一切変えていません。&lt;br /&gt;&lt;br /&gt;細かな原因はわからないですが、良かった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-3909868286197253546?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/3909868286197253546/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/xperia-arc234.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/3909868286197253546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/3909868286197253546'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/xperia-arc234.html' title='Xperia arcを2.3.4にしたらバッテリの減りが激速になった件'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2899082080151824711</id><published>2011-11-14T22:55:00.001+09:00</published><updated>2011-11-14T22:55:40.020+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='muzik'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>ReverbNationのAPI</title><content type='html'>まだ公開されていませんが、ページ下部に"API"というリンクがあります。&lt;br /&gt;クリックするとemailの入力を促されます。&lt;br /&gt;&lt;a href="http://www.reverbnation.com/"&gt;http://www.reverbnation.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;非常に好きなサイトなので、email登録しておきました。&lt;br /&gt;APIが公開された時にメールが届くことでしょう。&lt;br /&gt;&lt;br /&gt;ReverbNationのAPIが公開されれば、WEBと音楽に関する開発が楽しくなりそうです。&lt;br /&gt;本来は、Myspaceがこういったアプローチをすべきだったのだとも思う。&lt;br /&gt;&lt;br /&gt;API公開と同時に公式アプリがリリースされて、Android/iOSの標準的なUIで&lt;br /&gt;各アーティストの曲を試聴できるようになったりしないかな。&lt;br /&gt;&lt;br /&gt;Androidだと管理者用のアプリは既に公式にリリースされているけど、&lt;br /&gt;やはりリスナー用のが欲しいですよね。&lt;br /&gt;&lt;br /&gt;と思ったら、そのアーティスト専用のアプリを生成してくれる機能があるっぽい。&lt;br /&gt;&lt;a href="http://www.reverbnation.com/main/overview_artist?feature=yourownapp"&gt;http://www.reverbnation.com/main/overview_artist?feature=yourownapp&lt;/a&gt;&lt;br /&gt;要、アーティスト側の有料登録。ですかね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2899082080151824711?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2899082080151824711/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/reverbnationapi.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2899082080151824711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2899082080151824711'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/reverbnationapi.html' title='ReverbNationのAPI'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1266124516779622227</id><published>2011-11-14T22:54:00.000+09:00</published><updated>2011-11-14T22:54:06.031+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>AndroidのタスクキルのIgnore Listメモ</title><content type='html'>【TasKillerのIgnore List】&lt;br /&gt;■Battery Widget&lt;br /&gt;更新されなくなるから。&lt;br /&gt;&lt;br /&gt;■GooCal Widget&lt;br /&gt;更新されなくなるから。&lt;br /&gt;&lt;br /&gt;■POBox Touch&lt;br /&gt;しぶとい為、ウィジェットが白くならないから。&lt;br /&gt;&lt;br /&gt;■Sony Ericssonホーム&lt;br /&gt;しぶとい為、ウィジェットが白くならないから。&lt;br /&gt;&lt;br /&gt;■TasKiller&lt;br /&gt;しぶとい為、ウィジェットが白くならないから。&lt;br /&gt;&lt;br /&gt;■カレンダーの保存&lt;br /&gt;しぶとい為、ウィジェットが白くならないから。&lt;br /&gt;&lt;br /&gt;■ミュージック&lt;br /&gt;再生が止まってしまうから。&lt;br /&gt;&lt;br /&gt;■Lock screen notifications&lt;br /&gt;しぶとい為、ウィジェットが白くならないから。&lt;br /&gt;&lt;br /&gt;■k9 mail&lt;br /&gt;メール受信しなくなるから。&lt;br /&gt;&lt;br /&gt;【Task ManagerのIgnore List】&lt;br /&gt;※理由は同上。&lt;br /&gt;■GooCal Widget&lt;br /&gt;■TasKiller&lt;br /&gt;■k9 mail&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1266124516779622227?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1266124516779622227/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/androidignore-list.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1266124516779622227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1266124516779622227'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/androidignore-list.html' title='AndroidのタスクキルのIgnore Listメモ'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1533803932456395262</id><published>2011-11-14T22:53:00.000+09:00</published><updated>2011-11-14T22:53:40.993+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>ERROR: Unknown command 'crunch'の解決方法</title><content type='html'>Android SDK ManagerでUpdate availableのものを一通り更新。&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://nek-blog.blogspot.com/2011/11/android-error-unknown-command-crunch.html"&gt;http://nek-blog.blogspot.com/2011/11/android-error-unknown-command-crunch.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1533803932456395262?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1533803932456395262/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/error-unknown-command-crunch.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1533803932456395262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1533803932456395262'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/error-unknown-command-crunch.html' title='ERROR: Unknown command &apos;crunch&apos;の解決方法'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-7043324097132013030</id><published>2011-11-12T14:54:00.000+09:00</published><updated>2011-11-12T14:54:56.725+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>Xperia arcの再生情報を取得する</title><content type='html'>DroidNPでXperia arcの再生情報を扱うためのプラグインをリリースしました。&lt;br /&gt;&lt;a href="https://market.android.com/details?id=net.madroom.dnp4sem"&gt;https://market.android.com/details?id=net.madroom.dnp4sem&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ソースは↓で公開しています。&lt;br /&gt;&lt;a href="http://code.google.com/p/madroom-project/source/browse/#svn%2Ftrunk%2FDroidNP4SEM"&gt;http://code.google.com/p/madroom-project/source/browse/#svn%2Ftrunk%2FDroidNP4SEM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ソース自体簡単ですが、一応、解説。&lt;br /&gt;&lt;br /&gt;receiverで以下を受け取るようにすれば反応します。&lt;br /&gt;(1) com.sonyericsson.music.playbackcontrol.ACTION_TRACK_STARTED&lt;br /&gt;(2) com.sonyericsson.music.playbackcontrol.ACTION_PAUSED&lt;br /&gt;(3) com.sonyericsson.music.TRACK_COMPLETED&lt;br /&gt;&lt;br /&gt;尚、DroidNPのプラグインでは(1)しか使っていません。他は必要なさそうだったので。&lt;br /&gt;というか、実は(2)と(3)の動作確認はしてません。悪しからず。&lt;br /&gt;どんなタイミングで発信されるか(そもそも、発信自体されるか)は、各自でご確認下さい。&lt;br /&gt;&lt;br /&gt;アーティスト名とかは、以下で取れます。&lt;br /&gt;intent.getExtras().getString("ARTIST_NAME")&lt;br /&gt;intent.getExtras().getString("ALBUM_NAME")&lt;br /&gt;intent.getExtras().getString("TRACK_NAME")&lt;br /&gt;&lt;br /&gt;この話、docomoのXperia arcでのみ確認しています。&lt;br /&gt;auのとかacroとかでもたぶん取れると思いますが、未確認。&lt;br /&gt;尚、X10では取得できませんでした。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Androidの標準プレイヤーや、それから派生した各種プレイヤーのネーミングルールから&lt;br /&gt;大きく逸脱していてグダグダな感じが凄くしましたが、取れて良かった。&lt;br /&gt;&lt;br /&gt;とゆーかarcはAndroid標準プレイヤーを載せてないのだから、&lt;br /&gt;arc標準プレイヤーはAndroid標準プレイヤーの仕様に沿っていて欲しい。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-7043324097132013030?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/7043324097132013030/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/xperia-arc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7043324097132013030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7043324097132013030'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/xperia-arc.html' title='Xperia arcの再生情報を取得する'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1629363005904677789</id><published>2011-11-07T22:20:00.011+09:00</published><updated>2011-11-20T03:19:13.351+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><title type='text'>GAE/J + Velocity メモ。</title><content type='html'>とりあえずミニマムで。&lt;br /&gt;&lt;br /&gt;■velocity/velocity-toolsのDL&lt;br /&gt;&lt;a href="http://velocity.apache.org/download.cgi"&gt;http://velocity.apache.org/download.cgi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■必要なjar&lt;br /&gt;* commons-beanutils-1.7.0.jar&lt;br /&gt;* commons-collections-3.2.1.jar&lt;br /&gt;* commons-digester-1.8.jar&lt;br /&gt;* commons-lang-2.4.jar&lt;br /&gt;* commons-logging-1.1.jar&lt;br /&gt;* velocity-1.7.jar&lt;br /&gt;* velocity-tools-view-2.0.jar&lt;br /&gt;&lt;br /&gt;■WEB-INF/velocity.propertiesを作成&lt;br /&gt;velocity-1.7/src/java/org/apache/velocity/runtime/defaults/velocity.properties&lt;br /&gt;をコピーして以下を変更。&lt;br /&gt;* input.encoding=UTF-8&lt;br /&gt;* output.encoding=UTF-8&lt;br /&gt;* file.resource.loader.path = WEB-INF/vm/page&lt;br /&gt;&lt;br /&gt;■web.xmlに以下を追記&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;filter&gt;&lt;br /&gt;    &lt;filter-name&gt;notFoundFilter&lt;/filter-name&gt;&lt;br /&gt;    &lt;filter-class&gt;gaeVelocityTest.servlet.NotFoundFilter&lt;/filter-class&gt;&lt;br /&gt;&lt;/filter&gt;&lt;br /&gt;&lt;filter-mapping&gt;&lt;br /&gt;    &lt;filter-name&gt;notFoundFilter&lt;/filter-name&gt;&lt;br /&gt;    &lt;url-pattern&gt;*.vm&lt;/url-pattern&gt;&lt;br /&gt;    &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;&lt;br /&gt;&lt;/filter-mapping&gt;&lt;br /&gt;&lt;servlet&gt;&lt;br /&gt;    &lt;servlet-name&gt;velocityServlet&lt;/servlet-name&gt;&lt;br /&gt;    &lt;servlet-class&gt;gaeVelocityTest.servlet.MyVelocityServlet&lt;/servlet-class&gt;&lt;br /&gt;&lt;/servlet&gt;&lt;br /&gt;&lt;servlet-mapping&gt;&lt;br /&gt;    &lt;servlet-name&gt;velocityServlet&lt;/servlet-name&gt;&lt;br /&gt;    &lt;url-pattern&gt;/velocity&lt;/url-pattern&gt;&lt;br /&gt;&lt;/servlet-mapping&gt;&lt;br /&gt;&lt;servlet&gt;&lt;br /&gt;    &lt;servlet-name&gt;velocity&lt;/servlet-name&gt;&lt;br /&gt;    &lt;servlet-class&gt;org.apache.velocity.tools.view.servlet.VelocityViewServlet&lt;/servlet-class&gt;&lt;br /&gt;    &lt;init-param&gt;&lt;br /&gt;        &lt;param-name&gt;org.apache.velocity.properties&lt;/param-name&gt;&lt;param-value&gt;/WEB-INF/velocity.properties&lt;/param-value&gt;&lt;/init-param&gt;&lt;br /&gt;&lt;/servlet&gt;&lt;br /&gt;&lt;servlet-mapping&gt;&lt;br /&gt;    &lt;servlet-name&gt;velocity&lt;/servlet-name&gt;&lt;br /&gt;    &lt;url-pattern&gt;*.vm&lt;/url-pattern&gt;&lt;br /&gt;&lt;/servlet-mapping&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;■appengine-web.xmlに以下を追記&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;sessions-enabled&gt;true&lt;/sessions-enabled&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;■NotFoundFilter(vmファイルへの直アクセスを防ぐ)&lt;br /&gt;&lt;pre class="brush: java"&gt;package gaeVelocityTest.servlet;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;import javax.servlet.Filter;&lt;br /&gt;import javax.servlet.FilterChain;&lt;br /&gt;import javax.servlet.FilterConfig;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.ServletRequest;&lt;br /&gt;import javax.servlet.ServletResponse;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;public class NotFoundFilter implements Filter {&lt;br /&gt;    @Override&lt;br /&gt;    public void destroy() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void doFilter (&lt;br /&gt;             ServletRequest req, ServletResponse res, FilterChain chain)&lt;br /&gt;             throws IOException, ServletException {&lt;br /&gt;         &lt;br /&gt;        ((HttpServletResponse)res).sendError(404, ((HttpServletRequest)req).getRequestURI());&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   public void init(FilterConfig conf) throws ServletException {&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;■MyVelocityServlet&lt;br /&gt;&lt;pre class="brush: java"&gt;package gaeVelocityTest.servlet;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;import org.apache.velocity.tools.view.VelocityViewServlet;&lt;br /&gt;&lt;br /&gt;public class MyVelocityServlet extends VelocityViewServlet {&lt;br /&gt;&lt;br /&gt;    private static final long serialVersionUID = -2215018323215813266L;&lt;br /&gt;&lt;br /&gt;    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {&lt;br /&gt;        try {&lt;br /&gt;            req.setAttribute("val", "テスト");&lt;br /&gt;            req.getRequestDispatcher("/test.vm").forward(req, res);&lt;br /&gt;        } catch (ServletException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;■WEB-INF/vm/page/test.vm&lt;br /&gt;--&lt;br /&gt;$val&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;■確認&lt;br /&gt;http://127.0.0.1:8888/velocity にアクセス。&lt;br /&gt;デプロイして同様にアクセス。&lt;br /&gt;&lt;br /&gt;■参考&lt;br /&gt;GAE/JでVelocity&lt;br /&gt;&lt;a href="http://blog.suz-lab.com/2009/12/gaejvelocity.html"&gt;http://blog.suz-lab.com/2009/12/gaejvelocity.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;GAE/Javaでウェブアプリ開発: Velocityテンプレートエンジン（２）&lt;br /&gt;&lt;a href="http://blog.livedoor.jp/ykohat/archives/50788389.html"&gt;http://blog.livedoor.jp/ykohat/archives/50788389.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;vmファイルへの直アクセスを防ぐ&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/paulownia/20090604/1244085243"&gt;http://d.hatena.ne.jp/paulownia/20090604/1244085243&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1629363005904677789?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1629363005904677789/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/gaej-velocity.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1629363005904677789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1629363005904677789'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/gaej-velocity.html' title='GAE/J + Velocity メモ。'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8588947689614207680</id><published>2011-11-07T21:17:00.002+09:00</published><updated>2011-11-20T03:20:07.030+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><title type='text'>GAE/JでUnsupportedClassVersionError</title><content type='html'>以下が原因でした。&lt;br /&gt;&lt;a href="http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/installing.html"&gt;http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/installing.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&gt;&gt; Google App Engine では、Java 5 と Java 6 がサポートされています。&lt;br /&gt;&gt;&gt; App Engine 上で実行される Java アプリケーションは、Java 6 仮想マシン（JVM）と&lt;br /&gt;&gt;&gt; 標準ライブラリを使用して動作します。&lt;br /&gt;&gt;&gt; ローカル サーバーを App Engine と同じように動作させるため、&lt;br /&gt;&gt;&gt; できる限り Java 6 でアプリケーションをコンパイルしてテストすることをおすすめします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8588947689614207680?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8588947689614207680/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/gaeunsupportedclassversionerror.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8588947689614207680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8588947689614207680'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/gaeunsupportedclassversionerror.html' title='GAE/JでUnsupportedClassVersionError'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2745791647922499845</id><published>2011-11-03T01:31:00.002+09:00</published><updated>2011-11-03T02:43:12.231+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>FindBugsの文字化けを直す</title><content type='html'>参考:&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/takahashikzn/20100127/1264537683"&gt;http://d.hatena.ne.jp/takahashikzn/20100127/1264537683&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;インストールディレクトリの&lt;br /&gt;plugins/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821/findbugs-plugin.jar&lt;br /&gt;の中にある&lt;br /&gt;messages_ja.xml&lt;br /&gt;を修正する。&lt;br /&gt;&lt;br /&gt;(1)&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;Shift_JIS&amp;quot;?&amp;gt;&lt;br /&gt;↓&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;全体をUTF-8で保存。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2745791647922499845?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2745791647922499845/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/11/findbugs.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2745791647922499845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2745791647922499845'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/11/findbugs.html' title='FindBugsの文字化けを直す'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-3658664886422270271</id><published>2011-10-29T17:35:00.002+09:00</published><updated>2011-11-20T03:20:29.777+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>PhoneGapで録音する場合の注意点</title><content type='html'>PhoneGapで録音する場合、Mediaを使用します。&lt;br /&gt;&lt;a href="http://docs.phonegap.com/en/1.1.0/phonegap_media_media.md.html#Media"&gt;http://docs.phonegap.com/en/1.1.0/phonegap_media_media.md.html#Media&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下、Androidでの話です。&lt;br /&gt;&lt;br /&gt;var media = new Media("xxx.mp3");&lt;br /&gt;とすると、録音ファイル名はxxx.mp3になります。&lt;br /&gt;&lt;br /&gt;ただ、厳密にはSDカード直下にテンポラリファイルとして録音。&lt;br /&gt;録音完了後に正式なファイル名(上の例ですとxxx.mp3)にリネーム。&lt;br /&gt;としているようです。&lt;br /&gt;&lt;br /&gt;録音停止直後にJavascriptからAndroid側のメソッドを呼び出してxxx.mp3にアクセスする処理を&lt;br /&gt;書いていたのですが、まだリネーム中なのか、xxx.mp3が存在しないケースが有りました。&lt;br /&gt;(存在するケースも有りました。)&lt;br /&gt;&lt;br /&gt;PhoneGap側を以下のように書きなおすと、この問題は収まりました。&lt;br /&gt;media = new Media("xxx.mp3", onSuccess);&lt;br /&gt;&lt;br /&gt;onSuccessは録音成功時に呼び出されるJavascriptの関数名になります。&lt;br /&gt;onSuccessの中で、Android側のメソッドを呼び出すように修正しました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-3658664886422270271?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/3658664886422270271/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/phonegap.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/3658664886422270271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/3658664886422270271'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/phonegap.html' title='PhoneGapで録音する場合の注意点'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-4794456536336398423</id><published>2011-10-29T02:34:00.005+09:00</published><updated>2011-10-29T14:54:29.274+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>PhoneGapでOptions Menuを表示させる</title><content type='html'>PhoneGap(1.1.0)でOptions Menuが表示されなかったので調べて見ました。&lt;br /&gt;どうやら、DroidGapを継承したActivityに以下の記述が必要らしいです。&lt;br /&gt;&lt;pre class="brush: java"&gt;@Override&lt;br /&gt;public boolean onKeyDown(int code,KeyEvent event){&lt;br /&gt;    // Note: http://madroom-project.blogspot.com/2011/10/phonegapoptions-menu.html&lt;br /&gt;    if(code==KeyEvent.KEYCODE_BACK) {&lt;br /&gt;        return super.onKeyDown(code, event);&lt;br /&gt;    }&lt;br /&gt;    return false;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;尚、return falseするのみだと、バックキーが反応しなくなりました。&lt;br /&gt;なので、この形にしています。&lt;br /&gt;&lt;br /&gt;参考:&lt;br /&gt;&lt;a href="http://groups.google.com/group/phonegap/browse_thread/thread/91e06087e7779344"&gt;http://groups.google.com/group/phonegap/browse_thread/thread/91e06087e7779344&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-4794456536336398423?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/4794456536336398423/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/phonegapoptions-menu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4794456536336398423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4794456536336398423'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/phonegapoptions-menu.html' title='PhoneGapでOptions Menuを表示させる'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-518666788603052833</id><published>2011-10-29T02:27:00.008+09:00</published><updated>2011-11-07T21:43:14.226+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>PhoneGap(JavaScript)からAndroidのメソッドを実行する</title><content type='html'>参考:&lt;br /&gt;&lt;a href="http://blog.livedoor.jp/hiroki0907/archives/51728780.html"&gt;http://blog.livedoor.jp/hiroki0907/archives/51728780.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--Java(Android)--&lt;br /&gt;&lt;pre class="brush: java"&gt;package com.phonegap.example;&lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;import com.phonegap.DroidGap;&lt;br /&gt;&lt;br /&gt;public class XxxActivity extends DroidGap {&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        super.init();&lt;br /&gt;        appView.addJavascriptInterface(new JavaScriptCallback(), "android");&lt;br /&gt;        super.loadUrl("file:///android_asset/www/index.html");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public class JavaScriptCallback {&lt;br /&gt;        public void callbackTest(String str) {&lt;br /&gt;            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;--JavaScript--&lt;br /&gt;&lt;pre class="brush: html"&gt;function callback_test() {&lt;br /&gt;    android.callbackTest("yyy");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-518666788603052833?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/518666788603052833/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/phonegapjavascriptandroid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/518666788603052833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/518666788603052833'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/phonegapjavascriptandroid.html' title='PhoneGap(JavaScript)からAndroidのメソッドを実行する'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-2506854534342268488</id><published>2011-10-21T21:24:00.007+09:00</published><updated>2012-01-22T15:31:02.938+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aptana'/><title type='text'>Aptana Studioの環境メモ 2011/10/21</title><content type='html'>Aptanaは主に、PHPでのweb開発用で使用しています。&lt;br /&gt;以下、構成のメモです。&lt;br /&gt;随時、ここに書き足します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■DL&lt;br /&gt;&lt;a href="http://www.aptana.com/"&gt;http://www.aptana.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■設定メモ&lt;br /&gt;▼FTPでファイル/ディレクトリUP時の標準permission&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; Aptana Studio &amp;gt; Remote &amp;gt; FTP&lt;br /&gt;&lt;br /&gt;▼新規ファイルの文字コード/改行コード&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; General &amp;gt; Workspace &amp;gt; New text file line delimiter&lt;br /&gt;&lt;br /&gt;▼フォントの変更&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; General &amp;gt; Appearance &amp;gt; Colors and Fonts &amp;gt; Basic &amp;gt; Text Font &amp;gt; Edit...&lt;br /&gt;&lt;br /&gt;▼行番号表示&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; General &amp;gt; Editors &amp;gt; Text Editors &amp;gt; Show line numbers&lt;br /&gt;&lt;br /&gt;▼エディタ配色の変更&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; Aptana Studio &amp;gt; Themes&lt;br /&gt;ExportファイルがImport出来ない場合、Exportファイルを開きUTF-8で再保存してImport&lt;br /&gt;&lt;br /&gt;▼.htaccess等の隠しファイルを表示&lt;br /&gt;Project Explorerの▼ &amp;gt; Customize View... &amp;gt; Filters&lt;br /&gt;".* files"と".* resources"のチェックを外す?&lt;br /&gt;何かファイルを開いている状態で行わないと反応しない?&lt;br /&gt;&lt;br /&gt;▼差分エディタ(?)の色&lt;br /&gt;Window &gt; Preferences &gt; General &gt; Appearance &gt; Colors and Fonts &gt; Text Compare &gt; Outgoing change color&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■plugin&lt;br /&gt;▼archive&lt;br /&gt;* JStyle 3.6.2(macでは正しく動作せず。)&lt;br /&gt;&lt;a href="http://mergedoc.sourceforge.jp/index.html#jstyle.html"&gt;http://mergedoc.sourceforge.jp/index.html#jstyle.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* DBViewer 1.2.3&lt;br /&gt;&lt;a href="http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/about_jp.html"&gt;http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/about_jp.html&lt;/a&gt;&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; DBViewer Plugin &amp;gt; SQL エディター&lt;br /&gt;予約語 ... 白&lt;br /&gt;関数 ... 白&lt;br /&gt;文字列 ... 水色&lt;br /&gt;コメント ... 黄色&lt;br /&gt;デフォルト ...　白&lt;br /&gt;背景色 ... 黒&lt;br /&gt;&lt;br /&gt;▼update site&lt;br /&gt;* ERMaster&lt;br /&gt;http://ermaster.sourceforge.net/update-site/&lt;br /&gt;Help &amp;gt; Install New Software &amp;gt; Available Software Sites &amp;gt; Eclipse Helios Update Site&lt;br /&gt;に一時的にチェックを入れる必要有。&lt;br /&gt;&lt;br /&gt;* RSS View&lt;br /&gt;http://www.junginger.biz/eclipse/&lt;br /&gt;&lt;br /&gt;* EGit&lt;br /&gt;http://download.eclipse.org/egit/updates&lt;br /&gt;&lt;br /&gt;* BzrEclipse&lt;br /&gt;http://verterok.com.ar/bzr-eclipse/update-site/&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; Team &amp;gt; Bazaar &amp;gt; Console&lt;br /&gt;でBazaar関係のコンソール出力設定&lt;br /&gt;&lt;br /&gt;* Subclipse&lt;br /&gt;http://subclipse.tigris.org/update_1.6.x&lt;br /&gt;&lt;br /&gt;* openextern&lt;br /&gt;http://openextern.googlecode.com/svn/trunk/openextern_update/&lt;br /&gt;Windowsはそのままで良さそう。&lt;br /&gt;Macは以下のように設定。&lt;br /&gt;open -a finder .&lt;br /&gt;open -a terminal .&lt;br /&gt;&lt;br /&gt;■備考&lt;br /&gt;Subclipseで最低限必要なものは&lt;br /&gt;* Subclipse&lt;br /&gt;* Subversion JavaHL Native Library Adapter&lt;br /&gt;* SSHで接続するには SVNKit Client Adapter&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■その他&lt;br /&gt;▼XAMPP&lt;br /&gt;&lt;a href="http://www.apachefriends.org/jp/xampp-windows.html"&gt;http://www.apachefriends.org/jp/xampp-windows.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;▼PortableGit&lt;br /&gt;&lt;a href="http://code.google.com/p/msysgit/downloads/list"&gt;http://code.google.com/p/msysgit/downloads/list&lt;/a&gt;&lt;br /&gt;インストーラでインストールしたmsysgitのgit.exeを指すと以下のエラーが出る。&lt;br /&gt;"This path is not a valid git v1.6.0 or higher binary"(1.7.4なのだけど。。。)&lt;br /&gt;なのでmsysgitはアンインストールしてPortableGitにした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-2506854534342268488?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/2506854534342268488/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/aptana-studio-20111021.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2506854534342268488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/2506854534342268488'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/aptana-studio-20111021.html' title='Aptana Studioの環境メモ 2011/10/21'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-4734951027545212847</id><published>2011-10-15T14:26:00.020+09:00</published><updated>2012-01-22T15:31:43.001+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>MOTODEVとeclipseの環境メモ 2011/10/15</title><content type='html'>MOTODEVとeclipseは以下で使い分けています。&lt;br /&gt;* MOTODEV ... 本開発用&lt;br /&gt;* eclipse ... プラグイン等の確認用&lt;br /&gt;&lt;br /&gt;以下、構成のメモです。(androidアプリ開発に特化した構成です。)&lt;br /&gt;随時、ここに書き足します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【共通】&lt;br /&gt;■Android SDK&lt;br /&gt;&lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■plugin&lt;br /&gt;▼update site&lt;br /&gt;* openextern&lt;br /&gt;http://openextern.googlecode.com/svn/trunk/openextern_update/&lt;br /&gt;Windowsはそのままで良さそう。&lt;br /&gt;Macは以下のように設定。&lt;br /&gt;open -a finder .&lt;br /&gt;open -a terminal .&lt;br /&gt;&lt;br /&gt;▼archive&lt;br /&gt;* JStyle(macでは正しく動作せず。)&lt;br /&gt;&lt;a href="http://mergedoc.sourceforge.jp/index.html#jstyle.html"&gt;http://mergedoc.sourceforge.jp/index.html#jstyle.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【MOTODEV Studio for Android】&lt;br /&gt;&lt;a href="http://developer.motorola.com/docstools/motodevstudio/"&gt;http://developer.motorola.com/docstools/motodevstudio/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■plugin&lt;br /&gt;▼update site&lt;br /&gt;* FindBugs&lt;br /&gt;http://findbugs.cs.umd.edu/eclipse&lt;br /&gt;* Subclipse&lt;br /&gt;http://subclipse.tigris.org/update_1.6.x&lt;br /&gt;* Egit&lt;br /&gt;http://download.eclipse.org/egit/updates&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【eclipse】&lt;br /&gt;&lt;a href="http://www.eclipse.org"&gt;http://www.eclipse.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■plugin&lt;br /&gt;▼update site&lt;br /&gt;* Android SDK用プラグイン&lt;br /&gt;http://dl-ssl.google.com/android/eclipse&lt;br /&gt;* RSS View&lt;br /&gt;http://www.junginger.biz/eclipse/&lt;br /&gt;&lt;br /&gt;▼Eclipse Marketplace&lt;br /&gt;* FindBugs&lt;br /&gt;* Subclipse&lt;br /&gt;* DBViewer&lt;br /&gt;Window &amp;gt; Preferences &amp;gt; DBViewer Plugin &amp;gt; SQL エディター&lt;br /&gt;予約語 ... 白&lt;br /&gt;関数 ... 白&lt;br /&gt;文字列 ... 水色&lt;br /&gt;コメント ... 黄色&lt;br /&gt;デフォルト ...　白&lt;br /&gt;背景色 ... 黒&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【備考】&lt;br /&gt;Subclipseで最低限必要なものは&lt;br /&gt;* Subclipse&lt;br /&gt;* Subversion JavaHL Native Library Adapter&lt;br /&gt;* SSHで接続するには SVNKit Client Adapter&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【設定メモ】&lt;br /&gt;行番号表示&lt;br /&gt;Window &gt; Preferences &gt; General &gt; Editors &gt; Text Editors&lt;br /&gt;&lt;br /&gt;Javaファイルのインデントをスペースにする&lt;br /&gt;Window &gt; Preferences &gt; Java &gt; Code Style &gt; Formatter&lt;br /&gt;&lt;br /&gt;XMLファイルのインデントをスペースにする&lt;br /&gt;Window &gt; Preferences &gt; XML &gt; XML Files &gt; Editor&lt;br /&gt;&lt;br /&gt;半角スペース可視化&lt;br /&gt;Window &gt; Preferences &gt; General &gt; JStyle&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-4734951027545212847?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/4734951027545212847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/motodeveclipse.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4734951027545212847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/4734951027545212847'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/motodeveclipse.html' title='MOTODEVとeclipseの環境メモ 2011/10/15'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-7084784633675230634</id><published>2011-10-15T14:24:00.000+09:00</published><updated>2011-10-15T14:24:08.935+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bazaar'/><title type='text'>bzr diffで"--using=xxx"を省略して外部ソフトを起動する</title><content type='html'>bazaar.&lt;wbr&gt;&lt;/wbr&gt;confを編集してコマンドのエイリアスを作成する。&lt;br /&gt;&lt;br /&gt;■bazaar.confの所在&lt;br /&gt;* XPの場合&lt;br /&gt;C:\Document settings\(ユーザー名)\Application Data\bazaar\2.0&lt;br /&gt;* Vsitaの場合&lt;br /&gt;C:\Users\(ユーザー名)\AppData\&lt;wbr&gt;&lt;/wbr&gt;Roaming\bazaar\2.0&lt;br /&gt;&lt;br /&gt;* 参考&lt;br /&gt;&lt;a href="http://tobysoft.net/wiki/index.php?Bazaar%2F%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB" target="_blank"&gt;http://tobysoft.net/wiki/&lt;wbr&gt;&lt;/wbr&gt;index.php?Bazaar%2F%A5%A4%A5%&lt;wbr&gt;&lt;/wbr&gt;F3%A5%B9%A5%C8%A1%BC%A5%EB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■bazaar.confに追記&lt;br /&gt;--bazaar.conf--&lt;br /&gt;[ALIASES]&lt;br /&gt;diff=diff --using=[使用するソフト名]&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;* 参考&lt;br /&gt;&lt;a href="http://doc.bazaar.canonical.com/latest/ja/user-guide/using_aliases.html" target="_blank"&gt;http://doc.bazaar.canonical.&lt;wbr&gt;&lt;/wbr&gt;com/latest/ja/user-guide/&lt;wbr&gt;&lt;/wbr&gt;using_aliases.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-7084784633675230634?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/7084784633675230634/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/bzr-diff-usingxxx.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7084784633675230634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/7084784633675230634'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/bzr-diff-usingxxx.html' title='bzr diffで&quot;--using=xxx&quot;を省略して外部ソフトを起動する'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-5234735714374860368</id><published>2011-10-01T17:34:00.014+09:00</published><updated>2011-11-20T03:23:28.442+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anddev'/><title type='text'>K-9 MailのCONTENT_URI</title><content type='html'>■K-9 Mailのgithub&lt;br /&gt;&lt;a href="https://github.com/jca02266/k9mail"&gt;https://github.com/jca02266/k9mail&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■アカウント関係のURI&lt;br /&gt;content://com.fsck.k9.messageprovider/accounts/&lt;br /&gt;以下、accountsのURI。&lt;br /&gt;&lt;br /&gt;■未読関係のURI&lt;br /&gt;content://com.fsck.k9.messageprovider/account_unread/&lt;br /&gt;以下、account_unreadのURI。&lt;br /&gt;&lt;br /&gt;■必要なuses-permission&lt;br /&gt;com.fsck.k9.permission.READ_MESSAGES&lt;br /&gt;&lt;br /&gt;■例&lt;br /&gt;(1)&lt;br /&gt;accountsのURIからデータ取得。結果行はN行。&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;(1)の結果行はaccountNumberというカラムを持っているので、&lt;br /&gt;account_unreadのURIとContentUris.withAppendedIdする。&lt;br /&gt;ContentUris.withAppendedIdしたURIからデータ取得。結果は1行。&lt;br /&gt;unreadというカラムを持っていて、これがそのアカウントの未読数。&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;合計未読数を知りたい場合は、(2)を(1)の行数分実行する。&lt;br /&gt;(一発で取る方法もあるのかも。未確認。)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-5234735714374860368?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/5234735714374860368/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/k-9-mailcontenturi.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5234735714374860368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/5234735714374860368'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/k-9-mailcontenturi.html' title='K-9 MailのCONTENT_URI'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-8406409871142677264</id><published>2011-10-01T14:56:00.004+09:00</published><updated>2011-11-15T21:51:02.837+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>K-9 Mailの設定メモ</title><content type='html'>■アカウントの登録&lt;br /&gt;"アカウントの名前を付けます(オプション):"は未入力&lt;br /&gt;"名前を入力します(送信メールの表示名):"に適切な内容を入力&lt;br /&gt;&lt;br /&gt;■グローバル設定&lt;br /&gt;表示設定 &amp;gt; 派手な視覚効果を使用する のチェックを外す&lt;br /&gt;表示設定 &amp;gt; アカウントのサイズ表示 のチェックを外す&lt;br /&gt;表示設定 &amp;gt; 検索結果の件数表示 のチェックを外す&lt;br /&gt;表示設定 &amp;gt; 特殊なアカウントを隠す をチェック&lt;br /&gt;表示設定 &amp;gt; 複数選択チェックボックス をチェック&lt;br /&gt;表示設定 &amp;gt; 連絡先の名前を表示 をチェック&lt;br /&gt;&lt;br /&gt;■各アカウント設定&lt;br /&gt;一般設定 &amp;gt; 標準アカウント を確認&lt;br /&gt;通知設定 &amp;gt; バイブレーション をチェック&lt;br /&gt;メール送信 &amp;gt; 本文構成 を適切に設定&lt;br /&gt;メール送信 &amp;gt; メッセージの形式 をテキストにする&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-8406409871142677264?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/8406409871142677264/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/10/k-9-mail.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8406409871142677264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/8406409871142677264'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/10/k-9-mail.html' title='K-9 Mailの設定メモ'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6895271190558144932.post-1756919053471932522</id><published>2011-09-30T19:41:00.001+09:00</published><updated>2011-10-15T14:40:05.076+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><title type='text'>CakePHPメモ</title><content type='html'>&lt;pre wrap=""&gt;自分メモ。&lt;/pre&gt;&lt;pre wrap=""&gt;&lt;/pre&gt;&lt;pre wrap=""&gt;■インストールと設定&lt;br /&gt;▼DL&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="https://github.com/cakephp/cakephp/downloads"&gt;https://github.com/cakephp/cakephp/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;▼初期メッセージと設定&lt;br /&gt;(1)&lt;br /&gt;Please change the value of 'Security.salt' in app/Config/core.php to a&lt;br /&gt;salt value specific to your application&lt;br /&gt;&amp;gt;&amp;gt; app/config/core.php の Security.salt 値を変更&lt;br /&gt;&lt;br /&gt;(2)&lt;br /&gt;Please change the value of 'Security.cipherSeed' in app/Config/core.php&lt;br /&gt;to a numeric (digits only) seed value specific to your application&lt;br /&gt;&amp;gt;&amp;gt; app/config/core.php の Security.cipherSeed 値を変更&lt;br /&gt;&lt;br /&gt;(3)&lt;br /&gt;Your database configuration file is NOT present.&lt;br /&gt;&amp;gt;&amp;gt; app/config/database.php.default を app/config/database.php としてコピー&lt;br /&gt;&lt;br /&gt;(4)&lt;br /&gt;Cake is NOT able to connect to the database.&lt;br /&gt;&amp;gt;&amp;gt; app/config/database.php を適切に設定&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;▼ドキュメント&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://book.cakephp.org/ja/"&gt;http://book.cakephp.org/ja/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;▼参考&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://cakephp-guide.com/install/edit"&gt;http://cakephp-guide.com/install/edit&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6895271190558144932-1756919053471932522?l=madroom-project.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://madroom-project.blogspot.com/feeds/1756919053471932522/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://madroom-project.blogspot.com/2011/09/cakephp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1756919053471932522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6895271190558144932/posts/default/1756919053471932522'/><link rel='alternate' type='text/html' href='http://madroom-project.blogspot.com/2011/09/cakephp.html' title='CakePHPメモ'/><author><name>mamor</name><uri>http://www.blogger.com/profile/01234258259781370945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
