contentdigape.com開発と毎日。comments.メインで使うPHPフレームワークをCakePHP1.3系→2系にしてから数ヶ月が立ちました。PHPUnitや、Pluginなどでも2系の恩恵を感じていますが、今回はより手軽にできるようになっていたjson形式のデータ出力方法をご紹介してみます。APIなどでよく使うjsonですが、1.3系までだと独自のwrapperメソッドを用意してstatusと結果を一緒に返すような仕組みをつくったりしていました。2系からはCakeResponseを使った方法など含め、簡単なやり方が増えているみたいですが、中でも以下のやり方が手軽で気に入っています。status=”complete”、message=””みたいな結果をjson形式のデータを、レスポンスとして返却する場合。コントローラ内のfunctionで以下のようにすればOKです。completed."}となります。$result変数の中身を、viewに渡して、_serialiseにセットしたresultを指定すると、cake標準のviewによってjson形式の出力結果を返してくれます。連想配列でもいけます。}結果は、{"status":"complete","fruits":["apple","orange","banana"]}となります。modelのデータ配列をそのまま渡して使うなど、実践的に使える場面もありそうです。viewClassの指定など、CakePHP2.1で超簡単にJSONを出力する方法を参考にさせてもらいました。comments.PerlやRubyには(“01”..”10′′);や[1..10]といったお馴染みのrange指定による配列の書き方があるのにPHPにはなくて残念、と思っていたPHPerです。10)という近い役割の関数があることを最近知りました。range指定が使えれば、一定数で回したい時などに直感的に書けて便利そうです(Rubyでは10.timesとかもありますが)。$i;}みたいな置き換えが考えられます(何も考えずに書けそう)。楽に書けるのはいいのですが、一般にforeachはforよりも処理速度が遅いという問題がネックになりそうです。いうことで、どれくらい速度差があるのか、検証して見ることにしました。"\nspend:{$spendTime}\n"計測結果それぞれ5回ずつ試行した結果の平均値をまとめてみます。3.074秒for文の方が遅いのは確かですが、件数が1万件、10万件の場合の差は10ミリ秒以下と意外と少なかったです。100万件だと200ミリ秒くらいの差が出てきますね。foreachがんばれないかなーということで、少しコードをいじってみます。forとforeach(改良版)で処理速度を計測してみるforeachに渡すrange関数の結果の値を先に変数に入れてから、やってみます。先ほどと同じように、それぞれ5回ずつ試行した結果の平均値をまとめてみます。0.050秒なんと、件数が1万件、10万件の場合はforeachの方がほんのちょっと速い結果になりました。100万件の場合だと若干for文のほう50ミリ秒速いものの、1/4まで差が縮まったことが見てとれます。まとめ思ってたよりもforeach文ががんばってくれた結果になりました。レスポンスにシビアな処理や、かなり大量のデータを扱う処理でない限り、range関数を使ったforeach文でもまったく問題ないのではないでしょうか。普段使いのバッチ処理や、テストコードなんかでは活躍する場面がありそうです。foreach文の改良版(range関数の結果の値を先に変数に入れておく)であれば、変数定義で多少手軽さは失われますが、誤差のレベルまで速度は縮まります。対象サーバで初めて使う場合や、インストール直後だと以下のようなメッセージが表示されることがあります。directory日本語環境だと以下の様なメッセージになると思います。そのようなファイルやディレクトリはありませんエラーメッセージは一見、権限の問題のようにも見えるのですがそうではなく、以下のコマンドを実行することで解決できます。updatedblocateコマンドはあらかじめ構築した検索インデックスのデータベース(ファイル)を元に高速に検索をします。このコマンドは、データベースを再構築してくれるので、なにかをインストールした直後などで、locateの検索にひっかからないファイルがある場合にも、コマンドを実行することで検索対象に含まれるようになります。仕組みを知っていればなんてことはないのですが、備忘録的に。ChromeのiOS版が出ました!http://itunes.apple.com/jp/app/chrome/id535886823?mt=8ブックマークをPCと同期できる個人的には、Safariがめちゃめちゃ使いにくいとは思わないのですが、PCではメインでChromeを使っているため、なんといってもブックマークの同期がPCとスマホでできない、というのがストレスでした。Chromeになったので、GoogleアカウントでログインすればPCのブックマークと自動で同期されます。入力履歴やパスワード(※設定している場合)も同期されるので、PCでさっきまで見ていたサイトのURLを一部入力してすぐに閲覧したり、かなりシームレスに使えるようになると思います。ブックマーク自体は一番上のフォルダがわかれていて、iPhoneのブックマークのデフォルトは「モバイルブックマーク」のフォルダになっているようです。ブックマーク時にフォルダは選択できました。複数タブもサクサク動くまだ使い込んではいないですが、複数タブ立ちあげ時の動きや、UIのわかりやすさなどは、Safariよりも上な感じがしています。複数タブから任意のタブを選択する際も、タブが重なって一部が見える状態で表示してくれ、小さい画面でも見やすいつくりになっています。全体的な動きも軽快に感じられ、十分にiPhoneのメインブラウザとして使っていけそうです。初日なので、引き続き使ってみて、機能や使い勝手など探っていきたいと思います。IDのメールアドレスを変更したところ、iPhone側でiTune、iCloudなどなどの認証時に、前のメールアドレス(固定)+パスワード入力を求められてしまう状態に。案内されるアカウント設定画面だとメールアドレスは変更できないようなので、どうやるのか調べたところあっさり解決しました。In」のボタンが表示され、新しいメールアドレス+パスワードで無事認証できました。わかればなんてことはないのですが、メールアドレス変更自体あまりない機会だけにハマる人もいるんじゃないかと思いメモ的に投稿。※英語表記のため、日本語表示の場合は読み替えてください。手順は変わらないはず。log(スロークエリーログ)の出力オフなのですが、パラメータの変更によりテーブルに出力することができます。DB負荷や、アプリ側のボトルネック調査に役立つので設定をしておきたいと思います。logをテーブルに出力する1秒以上かかっているクエリーが対象10,000行以上読み込んだクエリーが対象の設定をおこないます。Toolkit」を利用して設定を変更していきます。Linuxサーバで作業します。コマンドラインツール利用の準備コマンドラインツールを初めて使う場合はもろもろ設定です。Javaは/usr/bin下に配置ツール群を/usr/local/rds-tools下に配置アクセスキーペアの設定のファイルを/usr/local/rds-tools/.credentialに配置リージョンは日本(ap-northeast-1)アクセスキーペアの設定ファイルの中身は以下です。AWSAccessKeyId=<アクセスキー>AWSSecretKey=<シークレットキー>以下のように環境変数をセットします。EC2_REGION=ap-northeast-1新しいグループをつくるパラメータ設定用に新しいグループをつくります。MySQL5.5グループを作成したら、設定を変更します。method=immediate"インスタンスに新グループを適用する最後に、対象としたいインスタンスのグループを今回つくったグループに変更します。再起動なしでも反映されていました。確認する以下を実行します。in-syncMySQL上からも設定を確認します。sec)問題なく設定されていれば完了です。queryが発生したら、mysql.slow_logテーブルにレコードが登録されます。Groups」メニューからも確認できます(パラメータの検索も可能)。RDSのコマンドラインツールは初めて使ったのですが、今回のようなグループ追加、設定変更だけでなく、インスタンスの作成や削除などもできるので、使いこなすとかなり幅が広がりそうです。いずれはウェブコンソールからもさくっとできるようになるのかなと思います(実はもうできるとかあったら、教えて欲しいです)。今回は以下のブログを参考にさせてもらいました。http://blog.hori-uchi.com/2009/11/amazonrdsslow-query.html※パラメータなど一部古い情報の部分は変更しています。comments.WWDC2012が終わりいろいろ情報出てきていますが、iPhone開発まわりでうれしい情報が。これまでは、iPhone用のサイトをつくっても、写真をアップロードさせるにはiPhoneアプリ一択でしたが、Safari上のスマホサイトでもアップロードができるようになります。/>がサポートされるためで、ひとまずiPhone用にも機能を提供したいときなど、活躍しそうです。iOS6は2012秋から提供開始予定とのことです。15恵比寿ではたらく、プロダクトオーナー兼Webエンジニア。デザイナー、まれにインフラエンジニア。Paternoster.。