野鳥日記 野鳥と技術のブログ http://www.kiriya-system.com/ 2019-06-01T11:10:39+09:00 kiriya-system Hatena::Blog hatenablog://blog/12921228815717055823 Windows環境にvue naticveを入れる hatenablog://entry/17680117127179363313 2019-06-01T11:10:39+09:00 2019-06-01T11:10:39+09:00 http://sealegs.hatenablog.com/entry/2019/05/31/152411 <p><a href="http://sealegs.hatenablog.com/entry/2019/05/31/152411">http://sealegs.hatenablog.com/entry/2019/05/31/152411</a></p> kiriya-system unityでAmazonSNS経由でFCM使ってPUSH通知しようとしたら激ハマリしたでござるの巻 ログを見よう編 hatenablog://entry/10328749687191633824 2016-10-28T00:20:20+09:00 2016-10-28T00:20:20+09:00 試行錯誤の中で参考にしたログなど。 Unity側登録時のRegID(registration Id)の確認 regIDの確認は実機デバッグで確認した。 サンプルのGCM.csの116行目、regIDこれが空でうまく取得できていなかった。 実機をデバッグモードでつなぎ、VisualStudioCommunity2015を起動し、 Debug->Attach Unity Debuggerを選択 machineにつないだデバイスが表示される。このときややタイムラグがあるのでやや注意。 慌てず待つべし。 RegIDがNULLの場合、FCM(GCM)周りの設定が間違ってないか確認すべし AmazonSN… <p>試行錯誤の中で参考にしたログなど。</p> <p> </p> <h3>Unity側登録時のRegID(registration Id)の確認</h3> <p>regIDの確認は実機<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>で確認した。</p> <p>サンプルのGCM.csの116行目、regIDこれが空でうまく取得できていなかった。</p> <p> </p> <p>実機を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>モードでつなぎ、VisualStudioCommunity2015を起動し、</p> <p>Debug-&gt;Attach Unity Debuggerを選択</p> <p>machineにつないだデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>スが表示される。このときややタイムラグがあるのでやや注意。</p> <p>慌てず待つべし。</p> <p> </p> <p>RegIDがNULLの場合、FCM(GCM)周りの設定が間違ってないか確認すべし</p> <p> </p> <h3>AmazonSNS側のログ</h3> <p>AmazonSNSkのコンソールから</p> <p>Applications-&gt;ARNを選択-&gt;Platform Application action-&gt;<a class="keyword" href="http://d.hatena.ne.jp/keyword/Delivery">Delivery</a> status</p> <p>Create IAM rolesを選択</p> <p> </p> <p>IAM roleを作成し、設定を保存すると、配信後</p> <p>Cloud watch のログから配信ステータスを確認できるようになる。</p> <p> </p> <p>参考</p> <p><a href="http://dev.classmethod.jp/cloud/aws/sns-delivery-status-feature/">[Amazon SNS] 配送ステータスが CloudWatch で確認できるようになりました! | Developers.IO</a></p> <p> </p> <h3>端末側確認</h3> <p>通知が端末まで来ているものの、androidmanifestが間違ってると、</p> <p>何も表示されない。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>からadb logcatで端末のログを確認</p> <p>V/NotificationService(  774): pkg=pkg.hogehoge.com canInterrupt=false intercept=true</p> <p> </p> <p>こんな感じでログが出ていれば端末までは届いている</p> <p>その後にActivity見つからないよとかIntentないよとか言われている場合は</p> <p>AndroidManifestを確認すべし</p> <p> </p> <p><span class="pl-s">実際、GCMBroadcastReceiver</span>の</p> <p>GCMが大文字なのに"Gcm"と書いてて引っかかった・・・まぁ、探すの大変だった・・・</p> <p> </p> <h3>ステータスバーの通知を押してもIntentが起動しない</h3> <p>こちらもAndroidManifestの問題だった。</p> <p>サンプルのAndroidManifestでは<span class="pl-s">UnityPlayerNativeActivityのみ記載があるがこれではだめ。</span></p> <p>UnityPlayerProxyActivity、UnityPlayerActivityなども追記したら動いた。</p> <p>このへんはUnity側のバージョンアップと関係していそう。</p> <p> </p> <h3>タイトル変えられない</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>側ソースを見ると</p> <div class="breadcrumb js-zeroclipboard-target"> <div class="breadcrumb js-zeroclipboard-target"><span class="js-path-segment">/<a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>/gcmhelper-src/com/amazonaws/unity/Utils.<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a></span></div> <div class="breadcrumb js-zeroclipboard-target"> </div> <div class="breadcrumb js-zeroclipboard-target">を見るとタイトルが空で固定になってる。</div> <div class="breadcrumb js-zeroclipboard-target"> <div class="breadcrumb js-zeroclipboard-target">ここか、呼び出し元の</div> <div class="breadcrumb js-zeroclipboard-target"> /<a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>/gcmhelper-src/com/amazonaws/unity/GCMIntentService.<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a></div> </div> <div class="breadcrumb js-zeroclipboard-target">のどちらかを変更しないとタイトルが変えられない。</div> <div class="breadcrumb js-zeroclipboard-target"> </div> なんたることだ! <div class="breadcrumb js-zeroclipboard-target"> </div> <div class="breadcrumb js-zeroclipboard-target">おとなしく<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>環境を作りJarファイルを作るべし。</div> <div class="breadcrumb js-zeroclipboard-target"> </div> </div> kiriya-system unityでAmazonSNS経由でFCM使ってPUSH通知しようとしたら激ハマリしたでござるの巻 下準備編 hatenablog://entry/10328749687189350711 2016-10-14T14:38:53+09:00 2016-10-14T14:38:53+09:00 AmazonSNSにはUnity用のプラグインもあるので簡単かと思ったら、 結構、面倒くさかったでござる。 GoogleのPush通知は最近、GCMから新しくなりFCMと名前が変わっている。 このへんの事情で勘違いした部分もあり、時間かかってしまった。 基本的にはGCMと下位互換あるらしい。 下記、ドキュメントを参考に進める。 AWS Mobile SDK for Unity — Unity Developer Guide 接続サンプルがあるのでこれを入れる。 GitHub - awslabs/aws-sdk-unity-samples: This repository has samples… <p>AmazonSNSにはUnity用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>もあるので簡単かと思ったら、</p> <p>結構、面倒くさかったでござる。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>のPush通知は最近、GCMから新しくなりFCMと名前が変わっている。</p> <p>このへんの事情で勘違いした部分もあり、時間かかってしまった。</p> <p>基本的にはGCMと下位互換あるらしい。</p> <p> </p> <p>下記、ドキュメントを参考に進める。</p> <p><a href="http://docs.aws.amazon.com/mobile/sdkforunity/developerguide/">AWS Mobile SDK for Unity — Unity Developer Guide</a></p> <p> </p> <p>接続サンプルがあるのでこれを入れる。</p> <p><a href="https://github.com/awslabs/aws-sdk-unity-samples">GitHub - awslabs/aws-sdk-unity-samples: This repository has samples that demonstrate various aspects of the AWS Mobile SDK for Unity, you can get the SDK source on Github (https://github.com/aws/aws-sdk-net)</a></p> <p> </p> <h5>・ FCM設定</h5> <p>下記参照</p> <p><a href="http://mb.cloud.nifty.com/doc/current/tutorial/push_setup_android.html">チュートリアル (Android) : mobile backendとFCMの連携に必要な設定 | ニフティクラウド mobile backend</a></p> <p> </p> <p>送信者 IDをUnity側サンプルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> console projectIDに設定する。</p> <p><img class="hatena-fotolife" title="f:id:kiriya-system:20161014140045p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiriya-system/20161014/20161014140045.png" alt="f:id:kiriya-system:20161014140045p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:kiriya-system:20161014140623p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiriya-system/20161014/20161014140623.png" alt="f:id:kiriya-system:20161014140623p:plain" /></p> <p> </p> <p>FCM(Firebase console)のServerKeyを<a class="keyword" href="http://d.hatena.ne.jp/keyword/amazon">amazon</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/sns">sns</a>のCreate Platform applicationの<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> KEYに設定する。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:kiriya-system:20161014141120p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiriya-system/20161014/20161014141120.png" alt="f:id:kiriya-system:20161014141120p:plain" /></p> <p>作成した後、Application ARNを</p> <p>Unityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> Platform Application ARNに設定する。</p> <p> </p> <h5>・Cognitoを設定する</h5> <p>下記、参考に</p> <p><a href="http://dev.classmethod.jp/cloud/aws/aws-cli-credentials-using-amazon-cognito/">AWS CLIをAmazon Cognito(UnAuth)で認証して使用する | Developers.IO</a></p> <p><img class="hatena-fotolife" title="f:id:kiriya-system:20161014142526p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiriya-system/20161014/20161014142526.png" alt="f:id:kiriya-system:20161014142526p:plain" /></p> <p>MnageFederatedIdentitiesから新規作成する。</p> <p>cognito側Identity Pool IDをUnity側のIdentity Pool IDに設定する。</p> <p>IAM(Identity and <a class="keyword" href="http://d.hatena.ne.jp/keyword/Access">Access</a> Management)で</p> <p>できたIAMロールに対して、AmazonSNSFullAccess をアタッチする。</p> <p> </p> <p> </p> <p>サンプルを起動し登録ボタンを押すと、amazonSNS側に</p> <p>Applications-&gt;ARNクリック</p> <p>EndpointsにEndpointが増えているはず。</p> <p>publich to endpointで通知できる</p> kiriya-system macの/homeにディレクトリ作成 hatenablog://entry/12921228815729819463 2014-08-08T12:53:04+09:00 2014-08-08T12:53:04+09:00 macで開発環境を作ろうとして、/home以下にmkdirでディレクトリを作ろうとしたところ、 下記のようなメッセージが表示された。 Operation not supported 下記に対策が書かれていた。 https://discussions.apple.com/thread/2138336?tstart=0 原因は /etc/auto_masterの home auto_home -nobrowse,hidefromfinder この部分、この一行をコメントアウトし、再起動したら 作成できるようになった。 悪影響や副作用は不明・・・ <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>で開発環境を作ろうとして、/home以下にmkdirでディレクトリを作ろうとしたところ、</p> <p>下記のようなメッセージが表示された。</p> <p> </p> <blockquote> <p>Operation not supported</p> </blockquote> <p> </p> <p>下記に対策が書かれていた。</p> <p><a href="https://discussions.apple.com/thread/2138336?tstart=0">https://discussions.apple.com/thread/2138336?tstart=0</a></p> <p> </p> <p>原因は</p> <p>/etc/auto_masterの</p> <blockquote> <p>home                  auto_home       -nobrowse,hidefromfinder</p> </blockquote> <p> この部分、この一行を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a>し、再起動したら</p> <p>作成できるようになった。</p> <p> </p> <p>悪影響や副作用は不明・・・</p> kiriya-system fuelphpのscafold使ってみたら、migrationでtable doesn't existが出たの巻 hatenablog://entry/12921228815728136478 2014-07-14T18:01:09+09:00 2014-07-14T18:01:09+09:00 fuelphpのmigrationでtable doesn't existが出る scafoldを試そうとして、下記を実行したらエラーになった。 oil refine migrate エラーは↓な感じ Uncaught exception Fuel\Core\Database_Exception: Table 'hoge.migration' doesn't exist 結局、原因はわからなかったが、手動でmigrationテーブルを作成したらうまくいった。 他の環境では新規のときに自動で作成してくれたのに・・・ CREATE TABLE IF NOT EXISTS `migration` (… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>のmigrationでtable doesn't existが出る</p> <p>scafoldを試そうとして、下記を実行したらエラーになった。</p> <blockquote> <p>oil refine migrate </p> </blockquote> <p>エラーは↓な感じ</p> <blockquote> <p>Uncaught exception Fuel\Core\Database_Exception: Table '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>.migration' doesn't exist </p> </blockquote> <p> </p> <p>結局、原因はわからなかったが、手動でmigrationテーブルを作成したらうまくいった。</p> <p>他の環境では新規のときに自動で作成してくれたのに・・・</p> <p> </p> <blockquote> <p>CREATE TABLE IF NOT EXISTS `migration` (<br />  `type` varchar(25) NOT NULL,<br />  `name` varchar(50) NOT NULL,<br />  `migration` varchar(100) NOT NULL DEFAULT ''<br />) ENGINE=<a class="keyword" href="http://d.hatena.ne.jp/keyword/InnoDB">InnoDB</a> DEFAULT CHARSET=utf8;</p> </blockquote> <p> </p> <p>scafold自体はすげー便利。<a class="keyword" href="http://d.hatena.ne.jp/keyword/CMS">CMS</a>なんかはこれで作ると捗りそう。</p> <p> </p> <p>テンプレートも↓に入ってるので、カスタマイズするとさらに捗るはず。</p> <p>\<a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>\fuel\packages\oil\views\scaffolding</p> <p> </p> kiriya-system 整数型はLongです。(MiniJson) hatenablog://entry/12921228815724997898 2014-05-26T18:05:43+09:00 2014-05-26T18:05:43+09:00 整数型はLongです。(MiniJson) intにキャストしようとして、半日ハマってた・・・ http://neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FJSON%2FMiniJSON int型はlong型としてあつかわれる int型はlong型としてあつかわれる int型はlong型としてあつかわれる みんなマニュアル/記事はよく読もうな!!! <p>整数型はLongです。(MiniJson)</p> <p>intにキャストしようとして、半日ハマってた・・・</p> <p> </p> <p><a href="http://neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FJSON%2FMiniJSON">http://neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FJSON%2FMiniJSON</a></p> <p> </p> <blockquote> <p><strong>int型はlong型としてあつかわれる</strong></p> <p><strong>int型はlong型としてあつかわれる</strong></p> <p><strong>int型はlong型としてあつかわれる</strong></p> </blockquote> <p> </p> <p> </p> <p> </p> <p>みんなマニュアル/記事はよく読もうな!!!</p> kiriya-system ansible-playbookでエラー hatenablog://entry/12921228815722007720 2014-04-15T13:53:10+09:00 2014-04-15T13:53:10+09:00 ansibleでエラーが出た yumでansible本体を入れた後、 ansible-playbookを叩いたら下記エラーが出た。 Traceback (most recent call last): File "/usr/bin/ansible-playbook", line 22, in <module> import pkg_resourcesImportError: No module named pkg_resources 解決法は下記を参照しつつ、 http://ameblo.jp/g-pinchan-new/entry-11813410448.html yum -y instal… <p>ansibleでエラーが出た</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>でansible本体を入れた後、</p> <p>ansible-playbookを叩いたら下記エラーが出た。</p> <p> </p> <blockquote> <p>Traceback (most recent call last):<br />  File "/usr/bin/ansible-playbook", line 22, in &lt;module&gt;<br />    import pkg_resources<br />ImportError: No module named pkg_resources</p> <p> </p> </blockquote> <p> </p> <p>解決法は下記を参照しつつ、</p> <p><a href="http://ameblo.jp/g-pinchan-new/entry-11813410448.html">http://ameblo.jp/g-pinchan-new/entry-11813410448.html</a></p> <p> </p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a> -y install <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>-setuptools</p> </blockquote> <p> で解決</p> <p> </p> <p>はて、なんでansible本体と一緒に入れてくれんかったのか???</p> <p>前はこんなエラー出なかったような・・・</p> kiriya-system openSSL脆弱性、検索と対策 hatenablog://entry/12921228815721580743 2014-04-08T18:59:40+09:00 2014-04-09T00:30:50+09:00 openSSLに脆弱性が発見されました。 まずは検索 rpm -qa|grep ssl OpenSSLの1.0.1から1.0.1fまで ↑が対象 ※但し、Centosの場合はopenssl-1.0.1e-16.el6_5.7は対応済み ※RPMで入れてない場合は表示されません。 yumで対応版が提供されてるようなのでアップデート http://lists.centos.org/pipermail/centos-announce/2014-April/020249.html https://rhn.redhat.com/errata/RHSA-2014-0376.html yum update … <p>openSSLに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>が発見されました。</p> <p> </p> <p>まずは検索</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rpm">rpm</a> -qa|<a class="keyword" href="http://d.hatena.ne.jp/keyword/grep">grep</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/ssl">ssl</a></p> </blockquote> <p> </p> <blockquote> <p>OpenSSLの1.0.1から1.0.1fまで</p> </blockquote> <p>↑が対象</p> <pre>※但し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Centos">Centos</a>の場合はopenssl-1.0.1e-16.el6_5.7は対応済み</pre> <p>※<a class="keyword" href="http://d.hatena.ne.jp/keyword/RPM">RPM</a>で入れてない場合は表示されません。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>で対応版が提供されてるようなのでアップデート</p> <p><a href="http://lists.centos.org/pipermail/centos-announce/2014-April/020249.html">http://lists.centos.org/pipermail/centos-announce/2014-April/020249.html</a></p> <p> </p> <p><a href="https://rhn.redhat.com/errata/RHSA-2014-0376.html">https://rhn.redhat.com/errata/RHSA-2014-0376.html</a></p> <p> </p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a> update openssl</p> </blockquote> <p> </p> <p> 念の為、サーバも再起動しておく。</p> kiriya-system android sdk adtで起動エラー hatenablog://entry/12921228815720254269 2014-03-19T18:29:26+09:00 2014-03-19T18:29:26+09:00 android sdkと一緒にダウンロードしたadt(eclipse)で起動時に下記エラーが出た場合 「Failed to load the JNI shared library “C:\Program Files(x86)\Java\jre6\bin\client\jvm.dll”」 PCにjava32bitのみインストールされていて、java64bitバージョンが入っていない可能性がある。 java 64bitを別途インストールし、 eclipse.iniに -vmC:\Program Files\Java\jre7\bin\javaw.exe を追加すると起動できるようになる。 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a>と一緒にダウンロードしたadt(<a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>)で起動時に下記エラーが出た場合</p> <p> </p> <p>「Failed to load the JNI shared library “C:\Program Files(<a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>)\<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>\jre6\bin\client\<a class="keyword" href="http://d.hatena.ne.jp/keyword/jvm">jvm</a>.dll”」</p> <p> </p> <p>PCにjava32bitのみインストールされていて、java64bitバージョンが入っていない可能性がある。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a> 64bitを別途インストールし、</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>.iniに</p> <blockquote> <p>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/vm">vm</a><br />C:\Program Files\<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>\jre7\bin\javaw.exe</p> </blockquote> <p> </p> <p><strong> </strong></p> <p>を追加すると起動できるようになる。</p> <p> </p> kiriya-system fuelphpの例外処理で500エラーのページ出したらCrypto key errorも出たの巻 hatenablog://entry/12921228815720182301 2014-03-18T16:04:10+09:00 2014-03-18T16:04:10+09:00 fuelphpの例外処理で500エラーのページ出したらCrypto key errorも出たの巻 500エラーのページ下部にCrypto key errorの表記ががががが。 http://d.hatena.ne.jp/yutakikuchi/20130520/1369006349 fuel/app/config/crypt.php がないのが原因ぽい。エラーページにコードのサンプルも出ているので、それを貼り付け作成。 これでエラーが消えた。 しかしなぜこのタイミングでcrypt関連のエラーが出るんだろう? 例として表示されていたコードがコード規約に引っかかるのは秘密。(配列のアロー位置、メソ… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>の例外処理で500エラーのページ出したらCrypto key <a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>も出たの巻</p> <p> </p> <p>500エラーのページ下部にCrypto key <a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>の表記ががががが。</p> <p><a href="http://d.hatena.ne.jp/yutakikuchi/20130520/1369006349">http://d.hatena.ne.jp/yutakikuchi/20130520/1369006349</a></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuel">fuel</a>/app/config/crypt.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a></p> <p>がないのが原因ぽい。エラーページにコードのサンプルも出ているので、それを貼り付け作成。</p> <p>これでエラーが消えた。</p> <p>しかしなぜこのタイミングでcrypt関連のエラーが出るんだろう?</p> <p> </p> <p>例として表示されていたコードがコード規約に引っかかるのは秘密。(配列のアロー位置、メソッド後のスペース)</p> kiriya-system fuelPHPのユニットテストでNo tests found in class "Fuel\Core\TestCase".が出る。 hatenablog://entry/12921228815720124837 2014-03-17T17:40:33+09:00 2014-03-17T17:40:33+09:00 fuelPHPのユニットテストでNo tests found in class "Fuel\Core\TestCase".が出る。 こんなWarningが出たので原因をいろいろ調べてみた。 どうもファイル名とファイル内のクラス名を完全に一致させないとこれが出るようだ。 大文字小文字が違っていたために表示されていたらしい。 app本体モデルでは、そんなこといんだけどなぁ・・・謎。 あとエラーメッセージが不親切 どこで出ているか表示されない。 詳細を表示させるオプションがphpunit単体だとあるんだが、php oil経由だと・・・見つからない・・・ <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E6%A5%CB%A5%C3%A5%C8%A5%C6%A5%B9%A5%C8">ユニットテスト</a>でNo tests found in class "Fuel\Core\TestCase".が出る。</p> <p> </p> <p>こんなWarningが出たので原因をいろいろ調べてみた。</p> <p>どうもファイル名とファイル内のクラス名を完全に一致させないとこれが出るようだ。</p> <p>大文字小文字が違っていたために表示されていたらしい。</p> <p> </p> <p>app本体モデルでは、そんなこといんだけどなぁ・・・謎。</p> <p> </p> <p>あとエラーメッセージが不親切</p> <p>どこで出ているか表示されない。</p> <p>詳細を表示させるオプションが<a class="keyword" href="http://d.hatena.ne.jp/keyword/phpunit">phpunit</a>単体だとあるんだが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> oil経由だと・・・見つからない・・・</p> kiriya-system fuelPHP、jenkins、php_codesniffer連携 hatenablog://entry/12921228815719832490 2014-03-12T18:49:47+09:00 2014-03-14T18:08:55+09:00 fuelPHP、jenkins、php_codesniffer連携 fuelPHPのコード規約のチェックを自動化しつつ、結果をグラフで 見えるようにする。 http://oscasierra.net/2013/05/jenkins-to-redhat/ ここを参考にansibleのplaybookは以下のような感じ antとPHP_CodeSnifferも入れてる tasks: - name: install java yum: name=java-1.7.0-openjdk.x86_64 state=installed - name: install ant yum: name=ant st… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>、jenkins、<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>_codesniffer連携</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>のコード規約のチェックを自動化しつつ、結果をグラフで 見えるようにする。</p> <p> </p> <p><a href="http://oscasierra.net/2013/05/jenkins-to-redhat/">http://oscasierra.net/2013/05/jenkins-to-redhat/</a></p> <p> </p> <p>ここを参考にansibleのplaybookは以下のような感じ</p> <p>antと<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>_CodeSnifferも入れてる</p> <p> </p> <blockquote> <p>  tasks:<br />    - name: install <a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a><br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a>-1.7.0-openjdk.<a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>_64 state=installed<br />    - name: install ant<br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=ant state=installed<br />    - name: jenkins repo install <br />      shell: <a class="keyword" href="http://d.hatena.ne.jp/keyword/wget">wget</a> -O /etc/<a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>.repos.d/jenkins.repo <a href="http://pkg.jenkins-ci.org/redhat/jenkins.repo">http://pkg.jenkins-ci.org/redhat/jenkins.repo</a><br />    - name: jenkins repo install <br />      shell: <a class="keyword" href="http://d.hatena.ne.jp/keyword/rpm">rpm</a> --import <a href="http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key">http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key</a><br />    - name: install jenkins<br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=jenkins state=installed<br />    - name: jenkins enabled<br />      service: name=jenkins state=running enabled=yes<br />    - name: install <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>_CodeSniffer<br />      shell: <a class="keyword" href="http://d.hatena.ne.jp/keyword/pear">pear</a> install <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>_CodeSniffer</p> <p> </p> </blockquote> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>のコーディング規約をインストール</p> <blockquote> <p><span class="line">git clone <a href="https://github.com/eviweb/fuelphp-phpcs.git">https://github.com/eviweb/fuelphp-phpcs.git</a></span></p> <p><span class="line">mv <a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>-phpcs/Standards/<a class="keyword" href="http://d.hatena.ne.jp/keyword/FuelPHP">FuelPHP</a>/ /usr/share/<a class="keyword" href="http://d.hatena.ne.jp/keyword/pear">pear</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>/CodeSniffer/Standards/<br /></span></p> </blockquote> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>で実行は以下の通り</p> <p>実行場所はプロジェクト直下</p> <blockquote> <p>phpcs --standard=<a class="keyword" href="http://d.hatena.ne.jp/keyword/FuelPHP">FuelPHP</a> --extensions=<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> --ignore=hoge1.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>,hoge2.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> fuel/app/classes</p> </blockquote> <p>--ignoreに除外ファイルを指定できる。</p> <p>対象ディレクトリはapp/classesのみとした。</p> <p> </p> <p>詳細をみたい場合は、-v</p> <p>この場合はfuel/app/classes以下のパスも指定するのが吉</p> <p> </p> <p> jenkinsで新規ジョブ作成</p> <p>フリースタイルを選択</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>管理に使用している<a class="keyword" href="http://d.hatena.ne.jp/keyword/subversion">subversion</a>のアドレスを入力</p> <p>ビルドantを追加、ビルドファイルは<a class="keyword" href="http://d.hatena.ne.jp/keyword/build.xml">build.xml</a>とした。</p> <p> </p> <p>プロジェクト直下に<a class="keyword" href="http://d.hatena.ne.jp/keyword/build.xml">build.xml</a>を作成</p> <blockquote> <p>&lt;?<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a> version="1.0" encoding="<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a>"?&gt;<br /><br />&lt;project name="hogehoge project" default="build"&gt;<br /> &lt;target name="build" depends="phpcs"/&gt;<br /><br /><br /> &lt;target name="phpcs"<br />         description="Find coding standard violations using <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>_CodeSniffer and print human readable output. Intended for usage on the command line before committing."&gt;<br />  &lt;exec executable="/usr/bin/phpcs"&gt;<br />   &lt;arg value="--report=<a class="keyword" href="http://d.hatena.ne.jp/keyword/checkstyle">checkstyle</a>" /&gt;<br />   &lt;arg value="--report-<a class="keyword" href="http://d.hatena.ne.jp/keyword/checkstyle">checkstyle</a>=<a class="keyword" href="http://d.hatena.ne.jp/keyword/checkstyle">checkstyle</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>" /&gt;<br />   &lt;arg value="--standard=<a class="keyword" href="http://d.hatena.ne.jp/keyword/FuelPHP">FuelPHP</a>" /&gt;<br />   &lt;arg value="--extensions=<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>" /&gt;<br />   &lt;arg value="--ignore=hoge1.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>,hoge2.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>" /&gt;<br />   &lt;arg value="${basedir}/fuel/app/classes/" /&gt;<br />  &lt;/exec&gt;<br /> &lt;/target&gt;<br />&lt;/project&gt;</p> </blockquote> <p>jenkinsの管理画面から<a class="keyword" href="http://d.hatena.ne.jp/keyword/checkstyle">checkstyle</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>をインストール</p> <p>ビルド後の処理に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Checkstyle">Checkstyle</a>警告の集計を追加</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/checkstyle">checkstyle</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>を指定</p> <p> </p> <p>これでジョブに<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>_codesnifferの結果がグラフ化されるはず。</p> <p> </p> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/phpunit">phpunit</a>も入れてるが、その設定は後程。</p> kiriya-system fuelPHPでphp_codesnifferを使ってみた。 hatenablog://entry/12921228815719781048 2014-03-11T18:01:34+09:00 2014-03-12T15:56:28+09:00 http://madroom-project.blogspot.jp/2013/01/fuelphpgitlabjenkins-2.html インストールは↑を参考に。 で実際使ってみた。 そしたらエラーがいっぱい。ぐぬぬ。。。 最初から導入しておくべきだった・・・ 多いのが配列の整形ミス。 <error line="11" column="16" severity="error" message="Array double arrow not aligned correctly; expected 20 space(s) but found 1" source="FuelPHP.Arrays… <p><a href="http://madroom-project.blogspot.jp/2013/01/fuelphpgitlabjenkins-2.html">http://madroom-project.blogspot.jp/2013/01/fuelphpgitlabjenkins-2.html</a></p> <p> </p> <p>インストールは↑を参考に。</p> <p> </p> <p>で実際使ってみた。</p> <p> </p> <p>そしたらエラーがいっぱい。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%B0%A4%CC%A4%CC">ぐぬぬ</a>。。。</p> <p>最初から導入しておくべきだった・・・</p> <p> </p> <p>多いのが配列の整形ミス。</p> <p> &lt;<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a> line="11" column="16" severity="<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>" message="Array double arrow not aligned correctly; expected 20 space(s) but found 1" source="<a class="keyword" href="http://d.hatena.ne.jp/keyword/FuelPHP">FuelPHP</a>.Arrays.ArrayDeclaration.DoubleArrowNotAligned"/&gt;</p> <blockquote> <p>=&gt;</p> </blockquote> <p>こいつの位置をちゃんと揃えろとのこと。</p> <p>スペースのとこタブ入れてた・・・</p> <p>expected 20 space</p> <p>これは先頭から20文字必要ということらしい</p> <p> </p> <p>あと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%A8%B4%DD">秀丸</a>の自動変換でスペースをタブに変更していたのが問題で、</p> <p>えらいハマった・・・</p> <p> </p> <p><span style="text-decoration: line-through;">$_SERVERも引っかかるな・・・</span></p> <p><span style="text-decoration: line-through;">どうしてくれよう。。。</span></p> <p>3/12 追記</p> <p>Input::serverというのが用意されていた。こちらを使うのが正しい。</p> <p>ちなみにapp/bootstrap.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>でも$_SERVERが使われていたのでハックしておいた。</p> <p>ちなみにのちなみに、fuel/coreにphpcsをかけるとかなりの量が引っかかる。</p> kiriya-system fuelphpでoil紛失(ガス欠) hatenablog://entry/12921228815719003276 2014-02-25T19:01:20+09:00 2014-02-25T19:01:20+09:00 fuelphpでoil紛失(ガス欠) 環境移動やsvn導入などしていたら、 いつの間にかプロジェクト直下のoilファイルがなくなっていた! oil create hogehoge で適当なプロジェクトを作成し プロジェクト直下のoilファイルを該当プロジェクトにコピーして 給油完了。 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>でoil紛失(ガス欠)</p> <p> </p> <p>環境移動や<a class="keyword" href="http://d.hatena.ne.jp/keyword/svn">svn</a>導入などしていたら、</p> <p>いつの間にかプロジェクト直下のoilファイルがなくなっていた!</p> <p> </p> <blockquote> <p>oil create hogehoge</p> </blockquote> <p>で適当なプロジェクトを作成し</p> <p>プロジェクト直下のoilファイルを該当プロジェクトにコピーして</p> <p>給油完了。</p> kiriya-system mysqlのsumは該当レコードがない場合、nullを返す hatenablog://entry/12921228815718953266 2014-02-24T16:14:07+09:00 2014-02-24T16:14:07+09:00 mysqlのsumは該当レコードがない場合、nullを返す 該当レコードがない場合、countは0を返すので勘違いしてた。 sumの場合はnullが返ってくる。 countと同様に0を返してほしいときは下記のようにする。 SELECT IFNULL(SUM(`hoge`), 0) FROM test 参考URL http://code.ttsoft.jp/2012/12/mysql-sum-with-ifnull-method.html <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>のsumは該当レコードがない場合、nullを返す</p> <p> </p> <p>該当レコードがない場合、countは0を返すので勘違いしてた。</p> <p>sumの場合はnullが返ってくる。</p> <p>countと同様に0を返してほしいときは下記のようにする。<br /><br /></p> <p> </p> <blockquote> <p>SELECT IFNULL(SUM(`<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>`), 0) FROM test</p> </blockquote> <p> </p> <p>参考URL</p> <p><a href="http://code.ttsoft.jp/2012/12/mysql-sum-with-ifnull-method.html">http://code.ttsoft.jp/2012/12/mysql-sum-with-ifnull-method.html</a></p> kiriya-system fuelphpのSQLインジェクション対策とSQLインジェクションの機械的チェック hatenablog://entry/12921228815718682718 2014-02-19T18:03:11+09:00 2014-02-19T18:07:28+09:00 fuelphpのSQLインジェクション対策についていろいろ調べた。 http://d.hatena.ne.jp/Kenji_s/20111222/1324526139 Query Builderを使った場合はエスケープしてくれる。 DB::query()だけ注意。 DB::query()の場合もbindで値を渡す場合はエスケープしてくれる \DB::query('select * from hoge where id=' . $id)->execute(); こういう書き方がアウト そこで上記の書き方を検索する正規表現を作った。 /query\([^)]*?\$.*?\)/ query引数内に… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL%A5%A4%A5%F3%A5%B8%A5%A7%A5%AF%A5%B7%A5%E7%A5%F3">SQLインジェクション</a>対策についていろいろ調べた。</p> <p> </p> <p><a href="http://d.hatena.ne.jp/Kenji_s/20111222/1324526139">http://d.hatena.ne.jp/Kenji_s/20111222/1324526139</a></p> <p> </p> <p>Query Builderを使った場合はエスケープしてくれる。</p> <p> </p> <p>DB::query()だけ注意。</p> <p>DB::query()の場合もbindで値を渡す場合はエスケープしてくれる</p> <p> </p> <blockquote> <p>\DB::query('select * from <a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a> where id=' . $id)-&gt;execute();</p> </blockquote> <p>こういう書き方がアウト</p> <p>そこで上記の書き方を検索する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>を作った。</p> <blockquote> <p>/query\([^)]*?\$.*?\)/</p> </blockquote> <p> query引数内に$があればヒットする。\$とかにもヒットするけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>内で$は使わない・・・はず。</p> <p> </p> <p>これをJenkinsさんとかにビルド毎にソースを<a class="keyword" href="http://d.hatena.ne.jp/keyword/grep">grep</a>していただいて、</p> <p>見つかったらエラーにしてもらうと、とても便利な気がした。</p> <p> </p> <p>あとドライバがmysqliだと複文が使えなくなっててなお良し。</p> <p> </p> <p>※セキュリティチェックこそ自動化すべきだよね。デスマ中とかにセキュリティ意識したコードとか不可能。</p> kiriya-system AWS CLIでcloud watchのデータを取得する。 hatenablog://entry/12921228815718629872 2014-02-18T18:52:05+09:00 2014-02-18T18:52:05+09:00 http://aws.amazon.com/jp/cli/ ↑公式からダウンロード EC2インスタンス情報 aws ec2 describe-instances cloud watchからCPU情報取得 aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-hoge --statistics Average --period 60 --start-time 2014-02-17T09:15:00Z --e… <p><a href="http://aws.amazon.com/jp/cli/">http://aws.amazon.com/jp/cli/</a></p> <p> </p> <p>↑公式からダウンロード</p> <p> </p> <p>EC2<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>情報</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a> ec2 describe-instances</p> </blockquote> <p> </p> <p>cloud watchからCPU情報取得</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a> cloudwatch get-metric-statistics --namespace <a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a> --statistics  Average --period 60 --start-time 2014-02-17T09:15:00Z  --end-time 2014-02-17T09:20:00Z</p> </blockquote> <p> ※InstanceIdの複数指定の仕方がわからない・・・spaceで区切れって公式に書いてあるけど、書式が違うのかうまくいかない。誰か知ってる人、コメントお願いします。</p> kiriya-system fuelphpのas_arrayでのkey指定の制限 hatenablog://entry/12921228815718576428 2014-02-17T17:55:03+09:00 2014-02-17T18:00:42+09:00 fuelphpのas_arrayでのkey指定の制限 as_arrayで配列のキーを指定する場合、 キーのカラムがユニークである必要がある プライマリーキーが複数カラムの場合も対応してない。 またまたハマったのでメモ http://fuelphp.jp/docs/1.7/classes/database/usage.html#results オプションとして、as_arrayから返る配列のキーと値を指定することもできます。 $result = DB::select()->from('users')->execute(); $on_key = $result->as_array('id'); f… <p>fuelphpのas_arrayでのkey指定の制限</p> <p> </p> <p>as_arrayで配列のキーを指定する場合、</p> <p>キーのカラムがユニークである必要がある</p> <p>プライマリーキーが複数カラムの場合も対応してない。</p> <p> </p> <p>またまたハマったのでメモ</p> <p> </p> <p><a href="http://fuelphp.jp/docs/1.7/classes/database/usage.html#results">http://fuelphp.jp/docs/1.7/classes/database/usage.html#results</a></p> <p> </p> <blockquote> <p>オプションとして、<em>as_array</em>から返る配列のキーと値を指定することもできます。</p> <pre class="php"><code class="php" data-result="[object Object]"><span class="variable">$result</span> = DB::select()-&gt;from(<span class="string">'users'</span>)-&gt;execute(); <span class="variable">$on_key</span> = <span class="variable">$result</span>-&gt;as_array(<span class="string">'id'</span>); <span class="keyword">foreach</span>(<span class="variable">$on_key</span> <span class="keyword">as</span> <span class="variable">$id</span> =&gt; <span class="variable">$item</span>) { <span class="comment">// $id にはレコード ID が入る</span> <span class="comment">// $item またはその $id に関する処理</span> } <span class="variable">$key_value</span> = <span class="variable">$result</span>-&gt;as_array(<span class="string">'id'</span>, <span class="string">'email'</span>); <span class="keyword">foreach</span>(<span class="variable">$key_value</span> <span class="keyword">as</span> <span class="variable">$id</span> =&gt; <span class="variable">$email</span>) { <span class="comment">// ここで $email には電子メールのフィールドが入るので</span> <span class="comment">// $id や $email に関する処理ができる</span> }</code></pre> </blockquote> <p>as_arrayのソースを見てみる。<br />/fuel/core/classes/database/result.php</p> <p> </p> <blockquote> <p>        elseif ($value === null)<br />        {<br />            // Associative rows<br /><br />            if ($this-&gt;_as_object)<br />            {<br />                foreach ($this as $row)<br />                {<br />                    $results[$row-&gt;$key] = $row;<br />                }<br />            }<br />            else<br />            {<br />                foreach ($this as $row)<br />                {<br />                    $results[$row[$key]] = $row;<br />                }<br />            }<br />        }</p> </blockquote> <p> 上下は省略してます。</p> <p>$resultsが結果なんですが</p> <p>$results[$row[$key]] = $row;</p> <p>とキー指定されたレコードの値で変数にいれてます。</p> <p> </p> <p>つまりキー指定されたレコードの内容が同じになる場合は上書きされます。</p> <p>プライマリーキーor ユニークなカラムで使いましょう。ということなんでしょうね。</p> <p><span style="font-size: 50%;">ドキュメントに書いといてよ・・・</span></p> <p> </p> <p>プライマリーキーが複数カラムの場合もこれだと上書きされるので使えません。</p> <p> </p> <p>制限に引っかかる場合はキーの指定をせず</p> <p>自分で配列に詰めなおしましょう!</p> kiriya-system fuelphpのプロファイリングを有効にする方法 hatenablog://entry/12921228815718323945 2014-02-13T19:31:46+09:00 2014-02-13T19:31:46+09:00 fuelphpのプロファイリングを有効にする方法 http://fuelphp.jp/docs/1.7/general/profiling.html 公式ドキュメントでは config/config.php に設定追加すべしとあるが、せっかく環境ごとの設定ファイルを作れるので config/development/config.phpを作成し、 中身を下記のようにした。 <?phpreturn array( 'profiling' => true,); config/development/db.phpにも追加 'default' => array( 'connection' => array… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>のプロファイリングを有効にする方法</p> <p> </p> <p><a href="http://fuelphp.jp/docs/1.7/general/profiling.html">http://fuelphp.jp/docs/1.7/general/profiling.html</a></p> <p> </p> <p>公式ドキュメントでは</p> <p>config/config.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a></p> <p>に設定追加すべしとあるが、せっかく環境ごとの設定ファイルを作れるので</p> <p>config/development/config.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>を作成し、</p> <p>中身を下記のようにした。</p> <blockquote> <p>&lt;?<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a><br />return array(<br />    'profiling'  =&gt; true,<br />);</p> </blockquote> <p> </p> <p>config/development/db.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>にも追加</p> <blockquote> <p>     'default' =&gt; array(<br />        'connection'  =&gt; array(<br />            'hostname'         =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>.com',<br />            'port'             =&gt; '3306',<br />            'database'         =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>',<br />            'username'         =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>',<br />            'password'         =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>',<br />            'persistent'     =&gt; false,<br />            'compress'         =&gt; false,<br />        ),<br />        'profiling'  =&gt; true,<br />    ),</p> </blockquote> <p>※追加場所はconnection内ではなく、default直下なことに注意。最初、まんまと間違えた。。。</p> <p> </p> <p>これで開発環境のみプロファイリングしてくれる。</p> <p> </p> <p>このプロファイリング機能自体は<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>のexplainまでしてくれる優れもの。</p> kiriya-system unityでネストの深いJSONを扱ってみる(MiniJSON編) hatenablog://entry/12921228815718278648 2014-02-12T19:27:57+09:00 2014-02-12T19:27:57+09:00 unityでネストの深いJSONを扱ってみる(MiniJSON編) http://www.cho-design-lab.com/2013/08/15/unity-minijson-load-json/ ↑を見ながらMiniJSONを入れる 次に深ーいネストのJSONを読み込む 今回使ったのはこれ http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html あまりに深いので本体は乗せませんw それをパースするコードが↓ var jsonData = MiniJSON.Json.Deserialize(js… <p>unityでネストの深い<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>を扱ってみる(MiniJSON編)</p> <p> </p> <p><a href="http://www.cho-design-lab.com/2013/08/15/unity-minijson-load-json/">http://www.cho-design-lab.com/2013/08/15/unity-minijson-load-json/</a></p> <p> </p> <p>↑を見ながらMiniJSONを入れる</p> <p>次に深ーいネストの<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>を読み込む</p> <p>今回使ったのはこれ</p> <p><a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html">http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html</a></p> <p> </p> <p>あまりに深いので本体は乗せませんw</p> <p> </p> <p>それをパースするコードが↓</p> <blockquote> <p>var jsonData = MiniJSON.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Json">Json</a>.Deserialize(<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>) as Dictionary&lt;string,object&gt;;<br />List&lt;object&gt; Reservations=(List&lt;object&gt;)jsonData["Reservations"];<br />Dictionary&lt;string,object&gt; Instances=(Dictionary&lt;string,object&gt;) Reservations[0];<br />List&lt;object&gt; Instances_info=(List&lt;object&gt;) Instances["Instances"];<br />Dictionary&lt;string,object&gt; Instance_value=(Dictionary&lt;string,object&gt;) Instances_info[0];<br />print(Instance_value["InstanceId"]);</p> </blockquote> <p>キャストして代入しまくり。</p> <p> </p> <p>変数に代入せず直接アクセスを試みる</p> <blockquote> <p> var jsonData = MiniJSON.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Json">Json</a>.Deserialize(<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>) as Dictionary&lt;string,object&gt;;<br />        print(<br />            (<br />                ((Dictionary&lt;string,object&gt;)<br />                     ((List&lt;object&gt;)<br />                        ((Dictionary&lt;string,object&gt;)<br />                             ((List&lt;object&gt;)<br />                             jsonData["Reservations"])<br />                         [0])<br />                     ["Instances"])    <br />                 [0])<br />             ["InstanceId"])<br />        );</p> </blockquote> <p> </p> <p>もうなにがなにやら・・・</p> <p>他に書き方あるのかもしれませんが・・・</p> <p> </p> <p>まあ、単なるネタなんですが、</p> <p>MiniJSONを使うときはシンプルな<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>のほうがいいっぽいぞ!</p> kiriya-system フレームを使用したページでChrome Loggerが不安定 hatenablog://entry/12921228815718260856 2014-02-12T13:23:32+09:00 2014-02-12T13:23:32+09:00 フレームを使用したページでChrome Loggerが不安定 なぜか、たまに表示されなくなったり表示されたりします・・・ まあそもそも<frame>なんて使うなってことですかね・・・ HTML5では廃止予定とか書いてあるし。↓ http://www.htmq.com/html/frame.shtml <p>フレームを使用したページで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Loggerが不安定</p> <p> </p> <p>なぜか、たまに表示されなくなったり表示されたりします・・・</p> <p> </p> <p>まあそもそも&lt;frame&gt;なんて使うなってことですかね・・・</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/HTML5">HTML5</a>では廃止予定とか書いてあるし。↓</p> <p> </p> <p><a href="http://www.htmq.com/html/frame.shtml">http://www.htmq.com/html/frame.shtml</a></p> kiriya-system Unityテスト hatenablog://entry/12921228815718181659 2014-02-10T23:55:28+09:00 2014-02-10T23:55:28+09:00 http://www.youtube.com/watch?v=cW0XLQlK-kY UnityでCGのテストをしてみた。 無料素材とGIMPとUNITYフリー版を駆使して作りました。 なかなかのできに満足。 <p><a href="http://www.youtube.com/watch?v=cW0XLQlK-kY">http://www.youtube.com/watch?v=cW0XLQlK-kY</a></p> <p> </p> <p>UnityでCGのテストをしてみた。</p> <p>無料素材と<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>とUNITYフリー版を駆使して作りました。</p> <p> </p> <p>なかなかのできに満足。</p> kiriya-system fuelphpのdb.php設定する際、pdoとmysqliだと書き方が変わる hatenablog://entry/12921228815717863945 2014-02-05T13:42:49+09:00 2014-02-12T11:21:55+09:00 fuelphpのdb.php設定する際、pdoとmysqliだと書き方が変わる 大事なことなので、二回言いました。 pdoからmysqliにドライバ変更しようとして、ハマった。 最初は単純に 'type' => 'pdo', を↓に書き換えていた。 'type' => 'mysqli', これだと、 No MySQLi Connection の例外が発生し怒られる。 しかし、原因がさっぱりわからない。 そもそもエラーメッセージが不親切なので、原因がわかるように \fuel\core\classes\database\mysqliをハックする 135行目あたりの例外処理を下記のようにする。 th… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelphp">fuelphp</a>のdb.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>設定する際、pdoとmysqliだと書き方が変わる</p> <p> </p> <p>大事なことなので、二回言いました。</p> <p> </p> <p>pdoからmysqliにドライバ変更しようとして、ハマった。</p> <p>最初は単純に</p> <blockquote> <p>    'type'             =&gt; 'pdo',</p> </blockquote> <p>を↓に書き換えていた。</p> <blockquote> <p>    'type'             =&gt; 'mysqli',</p> </blockquote> <p> </p> <p>これだと、</p> <p>No MySQLi Connection</p> <p>の例外が発生し怒られる。</p> <p>しかし、原因がさっぱりわからない。</p> <p> </p> <p>そもそもエラーメッセージが不親切なので、原因がわかるように</p> <p>\fuel\core\classes\database\mysqliをハックする</p> <p>135行目あたりの例外処理を下記のようにする。</p> <p> </p> <blockquote> <p>            throw new \Database_Exception('No MySQLi Connection&lt;br&gt;\n'<br />                . $e-&gt;getMessage() . "&lt;br&gt;\n"<br />                . "hostname:" . $hostname . "&lt;br&gt;\n"<br />                . "username:" . $username . "&lt;br&gt;\n"<br />                . "password:" . $password . "&lt;br&gt;\n"<br />                . "database:" . $database . "&lt;br&gt;\n"<br />                . "port:" . $port . "&lt;br&gt;\n"<br />                , 0);</p> </blockquote> <p> これでようやく、設定の書き方が間違ってることに気が付いた。</p> <p>ちなみにパスワードまで表示してるので、</p> <p>本番公開の際は、例外を非表示にすることを前提にしている。</p> <p> </p> <p>追記:</p> <p>本番環境(FUEL_ENVがproductionの場合)は表示されない。ちゃんとFUEL_ENVを設定しましょう。</p> <p> <a href="http://mkkn.hatenablog.jp/entry/2013/12/04/120701">http://mkkn.hatenablog.jp/entry/2013/12/04/120701</a></p> <p> </p> <p> </p> <p>↓ちゃんと公式ドキュメントに2通りの書き方書いてあるね。</p> <p><a href="http://fuelphp.jp/docs/1.7/classes/database/introduction.html">http://fuelphp.jp/docs/1.7/classes/database/introduction.html</a></p> <p> </p> <p>抜き出すとこんな感じ</p> <p> </p> <p>pdo</p> <blockquote> <p><span class="string">'dsn'</span> =&gt; <span class="string">'pgsql:host=<a class="keyword" href="http://d.hatena.ne.jp/keyword/localhost">localhost</a>;dbname=fuel_db'</span>,</p> </blockquote> <p>mysqli</p> <blockquote> <p><span class="string">'hostname'</span> =&gt; <span class="string">'<a class="keyword" href="http://d.hatena.ne.jp/keyword/localhost">localhost</a>'</span>,</p> <p><span class="string">'port'</span> =&gt; <span class="string">'3306'</span>,</p> <p><span class="string">'database'</span> =&gt; <span class="string">'fuel_db'</span>,</p> </blockquote> <p> </p> kiriya-system apache stop;start;とrestartは違うの巻 hatenablog://entry/12921228815717757140 2014-02-03T15:25:50+09:00 2014-02-03T16:52:26+09:00 apache stop;start;とrestartは違うの巻 phpの再構築で すごいハマった。 http://blog.nomadscafe.jp/2013/02/apachectl--k-restart-stop-start.html apache restartしても親プロセスは実際には落ちてないのね・・・ PHPの再構築が反映されてないわけだよ・・・ apacheのstop;startしたらphp_infoの中身も変更がちゃんと反映された。 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/apache">apache</a> stop;start;とrestartは違うの巻</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>の再構築で</p> <p>すごいハマった。</p> <p> </p> <p><a href="http://blog.nomadscafe.jp/2013/02/apachectl--k-restart-stop-start.html">http://blog.nomadscafe.jp/2013/02/apachectl--k-restart-stop-start.html</a></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/apache">apache</a> restartしても親プロセスは実際には落ちてないのね・・・</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>の再構築が反映されてないわけだよ・・・</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/apache">apache</a>のstop;startしたら<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>_infoの中身も変更がちゃんと反映された。</p> <p> </p> kiriya-system やよいの青色申告で源泉徴収税を入力する hatenablog://entry/12921228815717542677 2014-01-30T17:45:23+09:00 2014-02-06T17:46:09+09:00 やよいの青色申告で源泉徴収税を入力する フリーランスで仕事をしていて、 売掛金で売上を入力し、売掛金振込を入力した場合に 振込みは源泉徴収分が引かれていて、決算内容に源泉徴収分が残ってしまう場合。 源泉徴収分の入力は振替伝票で入力するそうです。 http://tax.f-blog.org/yayoi/Withholding-taxes-Input.html ↑を参考にしつつ、 売掛帳の対象の銀行振込の行から振替伝票を作成し、 源泉徴収を入れたら残っていた分が消えました。 ※追記 ↑のサイトでは勘定項目を事業主貸にしてますが、厳密には仮払い金になるそうです。 今日税務署の無料指導にいったら下記の… <p>やよいの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C4%BF%A7%BF%BD%B9%F0">青色申告</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%BB%C0%F4%C4%A7%BC%FD">源泉徴収</a>税を入力する</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>で仕事をしていて、</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%E4%B3%DD%B6%E2">売掛金</a>で売上を入力し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%E4%B3%DD%B6%E2">売掛金</a>振込を入力した場合に</p> <p>振込みは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%BB%C0%F4%C4%A7%BC%FD">源泉徴収</a>分が引かれていて、決算内容に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%BB%C0%F4%C4%A7%BC%FD">源泉徴収</a>分が残ってしまう場合。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%BB%C0%F4%C4%A7%BC%FD">源泉徴収</a>分の入力は振替伝票で入力するそうです。</p> <p> </p> <p><a href="http://tax.f-blog.org/yayoi/Withholding-taxes-Input.html">http://tax.f-blog.org/yayoi/Withholding-taxes-Input.html</a></p> <p> </p> <p>↑を参考にしつつ、</p> <p> </p> <p>売掛帳の対象の銀行振込の行から振替伝票を作成し、</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%BB%C0%F4%C4%A7%BC%FD">源泉徴収</a>を入れたら残っていた分が消えました。</p> <p> </p> <p>※追記</p> <p>↑のサイトでは勘定項目を事業主貸にしてますが、厳密には仮払い金になるそうです。</p> <p>今日税務署の無料指導にいったら下記の正しいほうを教えてくれました。</p> <p> </p> <p><a href="http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1437777789">http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1437777789</a></p> <blockquote> <p>ただ、本来は国に対して先に仮払いしているということなので、<br /> 事業主貸ではなく「仮払金」につけるのが正しいのだそうです<br /> 「仮払金」にそのままつけても良いし、<br /> 「仮払<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%BB%C0%F4%C4%A7%BC%FD">源泉徴収</a>税」という補助科目を作れば良いでしょうか<br /> <br /> 還付されたら清算します</p> <p> </p> </blockquote> <p> </p> <p>決算書に補助項目のみの欄を表示できなかったので</p> <p>勘定項目で追加しました。</p> <p>以下、やよいでのやり方</p> <p>[他<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%AE%C6%B0%BB%F1%BB%BA">流動資産</a>]の下に「仮払源泉税」を作ります。</p> <p>振り替え伝票で仮払源泉税を入力</p> <p> </p> <p>さらに決算書の出力の際、資産の部の空き項目をダブルクリックし、</p> <p>決算項目所名「仮払源泉税」割り当て勘定科目を「仮払源泉税」にしました。</p> <p> </p> <p>このままだと次年度に資産の仮払い額がそのまま残りますので</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%EA%C6%C0%C0%C7">所得税</a>納付もしくは還付のタイミングで</p> <p>事業主貸/仮払源泉税で清算します。</p> <p> </p> <p> </p> <p>※間違ってる部分あればコメントで指摘してください。</p> kiriya-system やよいの青色申告で売掛帳が入力できない場合 hatenablog://entry/12921228815717541351 2014-01-30T17:17:40+09:00 2014-01-30T17:17:40+09:00 やよいの青色申告で売掛帳が入力できない場合 売掛金の補助科目を設定しましょう。 科目設定で売上債権のしたの売掛金の部分から補助科目の作成を選択 補助科目名は取引先などを入力して登録 これで売掛帳が使えるようになります。 ちなみに売掛金の簡単入力時に 補助科目を選択できるようにもなります。 <p>やよいの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C4%BF%A7%BF%BD%B9%F0">青色申告</a>で売掛帳が入力できない場合</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%E4%B3%DD%B6%E2">売掛金</a>の補助科目を設定しましょう。</p> <p> </p> <p>科目設定で売上債権のしたの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%E4%B3%DD%B6%E2">売掛金</a>の部分から補助科目の作成を選択</p> <p>補助科目名は取引先などを入力して登録</p> <p> </p> <p>これで売掛帳が使えるようになります。</p> <p> </p> <p>ちなみに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%E4%B3%DD%B6%E2">売掛金</a>の簡単入力時に</p> <p>補助科目を選択できるようにもなります。</p> kiriya-system mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': hatenablog://entry/12921228815717458285 2014-01-29T16:46:30+09:00 2014-01-29T16:46:30+09:00 mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': awsでEC2上からRDSへmysqldumpを実行しようとしたら、エラーが出て怒られた。原因はクライアントとサーババージョンの相違らしい↓参照 http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/ (メイドさんに注目) yumで最新版を入れる方法 http://qiita.com/kmats@github/items/48457b7e5046f3cdf4d8 まずは今入ってる古いものを削除 yum remove -… <blockquote> <p>mysqldump: Couldn't execute 'SET OPTION <a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>_QUOTE_SHOW_CREATE=1':</p> <p> </p> </blockquote> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>でEC2上からRDSへmysqldumpを実行しようとしたら、エラーが出て怒られた。原因はクライアントとサーババージョンの相違らしい↓参照</p> <p> </p> <p><a href="http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/">http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/</a></p> <p>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%A4%A5%C9%A4%B5%A4%F3">メイドさん</a>に注目)</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>で最新版を入れる方法</p> <p><a href="http://qiita.com/kmats@github/items/48457b7e5046f3cdf4d8">http://qiita.com/kmats@github/items/48457b7e5046f3cdf4d8</a></p> <p> </p> <p>まずは今入ってる古いものを削除</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a> remove -y <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a></p> </blockquote> <p> </p> <p>インストールはansibleを使ってるので、↓な感じにplaybook編集</p> <blockquote> <p>- hosts: <a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-server<br />  user: root<br />  tasks:<br />    - name: install repo<br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=<a href="http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm">http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm</a> state=installed<br /><br />    - name: install <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a><br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a> state=installed<br /><br />    - name: install <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>-server<br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>-server state=installed<br /><br />    - name: install <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>-devel<br />      <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a>: name=<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>-devel state=installed</p> <p><br />    - name: be sure <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a> is running and enabled<br />      service: name=mysqld state=running enabled=yes</p> </blockquote> <p> </p> <p>しかしっっっっ、mysqld起動でエラー</p> <p>rootで起動してたのがお気に召さないらしい</p> <p>あと↓も</p> <p><a href="http://blog.goo.ne.jp/puri69/e/c6192fa05b1a04239e380a912381833e">http://blog.goo.ne.jp/puri69/e/c6192fa05b1a04239e380a912381833e</a></p> <blockquote> <p> '--skip-locking'は将来のリリースで無くなるから<br />  '--skip-external-locking'を使ってくれといってるらしい</p> </blockquote> <p>my.cnfを変更</p> <blockquote> <p>[mysqld]<br />user            = <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a><br />skip-external-locking</p> </blockquote> <p> </p> <p>晴れて5.6のインストール終了</p> <blockquote> <p>  <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a> --version<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>  Ver 14.14 Distrib 5.6.14, for <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>_64) using  EditLine wrapper</p> </blockquote> <p> mysqldumpも通るようになった。</p> kiriya-system fuelPHPでMySQLのREPLICATION (Master-Slave)を使う hatenablog://entry/12921228815717409337 2014-01-28T19:55:53+09:00 2014-02-05T13:45:24+09:00 fuelPHPでMySQLのREPLICATIONを使う fuelPHPでMySQLのレプリケーション(REPLICATION )構成にアクセスする方法 ちなみに実際にはAWSのリードレプリカ(MySQL Read Replicas)を使ってます。 http://php6.tumblr.com/post/38309122629/fuelphp-advent-calendar-2012 http://fuelphp.com/forums/discussion/7061 http://d.hatena.ne.jp/Kenji_s/20130606/fuelphp_env_config ↑参考にした… <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a>の<span class="st"><em>REPLICATION</em></span>を使う</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>で<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3">レプリケーション</a>(<span class="st"><em>REPLICATION</em> </span>)構成にアクセスする方法</p> <p>ちなみに実際には<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>のリードレプリカ(<a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a> Read Replicas)を使ってます。</p> <p><br /> </p> <p><a href="http://php6.tumblr.com/post/38309122629/fuelphp-advent-calendar-2012">http://php6.tumblr.com/post/38309122629/fuelphp-advent-calendar-2012</a></p> <p><a href="http://fuelphp.com/forums/discussion/7061">http://fuelphp.com/forums/discussion/7061</a></p> <p><a href="http://d.hatena.ne.jp/Kenji_s/20130606/fuelphp_env_config">http://d.hatena.ne.jp/Kenji_s/20130606/fuelphp_env_config</a></p> <p>↑参考にしたページ</p> <p> </p> <p>db.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>の親子関係をちゃんと理解してなかった為にすごいハマった。</p> <p>だって、公式ドキュメントに書いてないし・・・</p> <p> </p> <p> </p> <p>まずはDB全環境共通設定を編集する</p> <p> </p> <p>DB全環境共通設定</p> <p>config/db.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a></p> <blockquote> <p>return array(<br />'default' =&gt; array(<br />    'type'             =&gt; 'mysqli',<br />    'connection'     =&gt; array(<br />        'hostname'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'port'             =&gt; '3306',<br />        'database'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'username'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'password'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'persistent'     =&gt; false,<br />        'compress'         =&gt; false,<br />    ),<br />    'identifier'     =&gt; '`',<br />    'table_prefix'     =&gt; '',<br />    'charset'         =&gt; 'utf8',<br />    'enable_cache'     =&gt; true,<br />    'profiling'      =&gt; false,<br />    'readonly'       =&gt; array('<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-slave1'),<br />),<br />'<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-slave1' =&gt; array(<br />    'type'             =&gt; 'mysqli',<br />    'connection'     =&gt; array(<br />        'hostname'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'port'             =&gt; '3306',<br />        'database'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'username'         =&gt; 'ここは上書きされるのでなんでもよし',<br />        'password'         =&gt; '',<br />        'persistent'     =&gt; false,<br />        'compress'         =&gt; false,<br />    ),<br />    'identifier'     =&gt; '`',<br />    'table_prefix'     =&gt; '',<br />    'charset'         =&gt; 'utf8',<br />    'enable_cache'     =&gt; true,<br />    'profiling'      =&gt; false,<br />    'readonly'       =&gt; false,<br />),<br />);</p> </blockquote> <p> </p> <p>次に環境ごとの設定ファイルを用意します。</p> <p>※環境について</p> <p>development:開発環境</p> <p>test:テスト環境</p> <p>staging:ステージング環境</p> <p>production:本番環境</p> <p> </p> <p>config/development/db.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a></p> <blockquote> <p> return array(<br />    'default' =&gt; array(<br />        'connection'  =&gt; array(<br />            'hostname'         =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>',<br />            'port'             =&gt; '3306',<br />            'database'         =&gt; 'hogedb',<br />            'username'     =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-san',<br />            'password'     =&gt; 'hogehoge',<br />        ),<br />    ),<br />    '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-slave1' =&gt; array(<br />        'connection'  =&gt; array(<br />            'hostname'         =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>',<br />            'port'             =&gt; '3306',<br />            'database'         =&gt; 'hogeslavedb',<br />            'username'     =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-san',<br />            'password'     =&gt; 'hogehoge',<br />        ),<br />    ),<br />);<br /><br /></p> </blockquote> <p> </p> <p>slaveに対して<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>を発行する</p> <p>model側</p> <blockquote><span class="comment"> </span> <p><span class="variable">$result</span> = DB::query(<span class="string">'SELECT * FROM `users`'</span>)-&gt;execute('<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>-slave1');</p> </blockquote> <p> </p> <p> </p> <h4>まとめ</h4> <p>共通設定はconfig/db.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>に書く</p> <p>環境ごとの値はconfig/development/db.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>などに書く</p> <p>設定項目のキーが一緒の部分だけ上書きされる。</p> <p><span style="font-size: 60%;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/fuelPHP">fuelPHP</a>の公式ドキュメントは役に立たない。</span></p> <p> </p> <p>※pdoとmysqliの書き方が混在してたので、mysqliに統一</p> kiriya-system MyDNSを設定しようとした話 hatenablog://entry/12921228815717336554 2014-01-27T17:52:24+09:00 2014-01-27T18:17:56+09:00 MyDNSを設定しようとした話 AWS環境の場合、インスタンス変更などでIPが変わってしまう為、hostsによる開発サーバのIP管理が非常に面倒くさい。 その為、簡単に作れるDNSサーバを探してみてMyDNSというのを見つけた。 MyDNS.jpという同名サービスもあるがこれは別もの。 インストールしてみたが、管理画面がうまく動作しない。 エラーログには下記が記録されていた Error creating new SOA record: Column count doesn't match value count at row 1 原因はmydns.conf内のrecursiveを設定した場合に… <h4>MyDNSを設定しようとした話</h4> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>環境の場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>変更などでIPが変わってしまう為、hostsによる開発サーバのIP管理が非常に面倒くさい。</p> <p> </p> <p>その為、簡単に作れる<a class="keyword" href="http://d.hatena.ne.jp/keyword/DNS">DNS</a>サーバを探してみてMyDNSというのを見つけた。</p> <p>MyDNS.jpという同名サービスもあるがこれは別もの。</p> <p> </p> <p>インストールしてみたが、管理画面がうまく動作しない。</p> <p>エラーログには下記が記録されていた</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Error">Error</a> creating new <a class="keyword" href="http://d.hatena.ne.jp/keyword/SOA">SOA</a> record: Column count doesn't match value count at row 1</p> <p> </p> </blockquote> <p> </p> <p> </p> <p>原因はmydns.conf内のrecursiveを設定した場合にadmin.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>内の2629行目あたり。</p> <p>insert文でエラーになる。</p> <blockquote> <p>  $active = ($<a class="keyword" href="http://d.hatena.ne.jp/keyword/soa">soa</a>_use_active ? ",active" : "");<br />  $recursive = ($<a class="keyword" href="http://d.hatena.ne.jp/keyword/soa">soa</a>_use_recursive ? ",recursive" : "");<br /><br />  $query = "INSERT INTO $<a class="keyword" href="http://d.hatena.ne.jp/keyword/soa">soa</a>_table_name" .<br />    " (origin,ns,mbox,serial,refresh,retry,expire,minimum,<a class="keyword" href="http://d.hatena.ne.jp/keyword/ttl">ttl</a>$active) VALUES (";<br /><br /></p> </blockquote> <p>$recursiveこれに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%E9%A5%E0%CC%BE">カラム名</a>を入れてるってぽいが、下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>文で使われていない・・・</p> <p> </p> <p>そもそもrecursive のテストすらしてないのでは?という疑念が出てきたので、</p> <p>MyDNS使うのをやめた。</p> <p> </p> <p>追記:素直にEIP振るのがよさそう。たいした額じゃないし・・・</p> <p> </p> kiriya-system Amazon ELBをうまくつかうには、KeepAliveを有効にしよう。Timeoutは60秒よりだいぶ長くしよう。 hatenablog://entry/12921228815717113025 2014-01-24T14:56:32+09:00 2014-01-24T14:56:32+09:00 Amazon ELBをうまくつかうには、KeepAliveを有効にしよう。Timeoutは60秒よりだいぶ長くしよう。その背景。 | debiancdn ApacheのKeepAliveは有効にすべし。ELBとの接続効率があがる。 Timeoutは120以上が推奨 httpd.confを下記のように編集 KeepAlive OnKeepAliveTimeout 120 <p><a href="http://debiancdn.wordpress.com/2012/06/14/amazon-elb%E3%82%92%E3%81%86%E3%81%BE%E3%81%8F%E3%81%A4%E3%81%8B%E3%81%86%E3%81%AB%E3%81%AF%E3%80%81keepalive%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%82%88%E3%81%86%E3%80%82timeout%E3%81%AF60/">Amazon ELBをうまくつかうには、KeepAliveを有効にしよう。Timeoutは60秒よりだいぶ長くしよう。その背景。 | debiancdn</a></p> <p> </p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>のKeepAliveは有効にすべし。ELBとの接続効率があがる。</p> <p>Timeoutは120以上が推奨</p> </blockquote> <p> </p> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/httpd">httpd</a>.confを下記のように編集</p> <blockquote> <p> </p> <p>KeepAlive On<br />KeepAliveTimeout 120</p> </blockquote> <p> </p> kiriya-system