CakePHPのドキュメントにpull requestした
まだ勝手がよく分からないので、とりあえずwarningつぶすのと左のメニューの並びを直すのをやりました。
https://github.com/cakephp/docs/pull/329
https://github.com/cakephp/docs/pull/330
どちらも無事に取り込まれてまずはよかったです。
もうひとつ、トップページのダウンロードリンクの追加もpull reqしたんですが、
https://github.com/cakephp/docs/pull/332
「日本語のPDFが無いよ」てツッコミが入ってしまいました。
@cakephperさんにアドバイスいただいて、いったん英語版のPDFにリンク先を切り替えました。
PDFファイルが無いってこと?これはどうすれば...URL
@okonomi とりあえず英語PDFのリンクを貼っておいて、括弧で英語版と書いておくとか。。 PDFの生成まであっちでやってもらうのはハードルが高いので難しいですね。 pLatex入れたりパッチいれたりしないと日本語PDFできないので
2012-08-06 10:26:06 via TweetDeck to @okonomi
どうなるかなー。
CakePHPのログシステムを理解する
Cakeのログまわりはあまり使ってなかったので、調べてまとめてみました。
※CakePHP 2.0のコードを元に書いていますが、1.3とか2.1とかでもだいたい同じみたいです。
ログシステムの構成
- CakeLog
- CakeLogInterface
の二つのクラスで構成されています。
「CakeLogInterface」は長いし意味が分かりにくいので、以降は「LogEngine」と呼ぶことにします。
基本的なログ出力方法
- Object::log($msg, $type)
- CakeLog::write($type, $message)
どちらかを使います。
Object::log()はCakeLog::write()を呼び出しているだけなので、どちらでもいいと思います。
<?php // Object::log() $this->log('message', 'debug'); // CakeLog::write() CakeLog::write('debug', 'message');
ログ出力の流れ
- Object::log($msg, $type)
- CakeLog::write($type, $message)
- CakeLogInterface::write($type, $message)
の流れで処理が進みます。
LogEngine
CakeLogはLogEngineに処理を委譲するのみで、実際のログ出力は各LogEngineが行います。
LogEngineは、CakeLogから受け取ったログメッセージとログタイプをもとに、どこにどういうログを出力するかを判断し実行します。
デフォルトでは、ログメッセージをファイルに出力するFileLogが用意されています。
type ≠ level
CakePHPのログシステムは、ログの出力レベルについては関知しません。
ログ出力のメソッドの引数で"debug"とか"error"とかを渡せるので、デバッグレベルと連動してログ出力レベルを切り替えてくれそうな気がしますが、あくまでもただの分類(type)なのでとくになにもしてくれません。
ログを出力するかどうかの判断は基本的にはユーザーにゆだねられているみたいです。
複数のLogEngineを設定できることの意味
CakeLogにはLogEngineを複数設定できます。
しかし、CakeLogは設定されているすべてのLogEngineに対して等しくログ出力を委譲するので、特定のログタイプだけ特定のLogEngineで出力する、というような機能は、CakePHPのログシステムにはありません。
呼び出し側でも、ログ出力時にLogEngineを指定することはできません。
CakeLogとLogEngineの関係は、イベントディスパッチャーとイベントリスナーのような雰囲気になっています。
まとめ
- CakePHPのログシステムはCakeLogとLogEngineで構成される
- ログタイプはログレベルではない
- LogEngineはイベントリスナーみたいな雰囲気
感想
CakePHPのログシステムはわりと簡素な作りで、デフォルトではメッセージをログファイルに書き出すだけです。
でもLogEngineでそれなりに自由に拡張できるので、もの足りないときは自分でLogEngineつくるのがいいのかなーという感じです。
なにか間違ってたり足りないことがありましたらツッコミよろしくお願いします!
気になるプロダクトなど
ChiliProject
Redmineから派生したやつ。アップデートが早そう?
CandyCane
RedmineのPHP移植。設置が簡単なのが魅力。REST API対応したらいろいろ夢が広がりそう。
Pivotal Tracker
タスク管理するやつ?iPhoneとかにも対応してるらしい。
Amon2
PerlのWEBアプリケーションフレームワーク。なんとなくとっつきやすそうな雰囲気。
enchant.js
JavaScriptのゲームライブラリ。ライトなゲーム作成ならネイティブアプリでやるより効率よさそう。
fluent
イベントログ収集ツール。ソーシャルゲームとかでユーザーの行動ログとるのにいいかも。
WebSocket
なにやらいろいろ夢が広がるらしいけど、あまりよくわかってない。
Travis CI
githubのリポジトリでCIしてくれる。
Sismo
シンプルなCIサーバ。
なんとなく「Redmineの次」というのがそろそろ来るのかなーとか思ったりしますが、どうなんでしょう。
そのへんの話を今度のRxTstudyで聴けるのかな。
個人的には手元に簡単に設置できるようなタスク管理ツールがほしくて、その点でCandyCaneには期待しています。
5.2でprivateとかprotectedなプロパティを取得する方法
5.3ならReflectionProperty::setAccessible()でいけるけど、5.2では定義されてない。
PHP Manualの下のコメントに解決方法がかいてあったので、参考にしてやってみた。
http://jp2.php.net/manual/ja/reflectionproperty.setaccessible.php#98383
対象のクラスを継承した、非公開プロパティへのアクセサを持った子クラスを生成する方法。
でもこれだと子クラスのインスタンスを毎回生成するので、対象の内部状態が変わってた場合うまく取れないと思う。
どうしようかと思ってたら、その上のコメントで「arrayにキャストしたらいいよ」みたいなこと書いてあった。
http://jp2.php.net/manual/ja/reflectionproperty.setaccessible.php#100441
こちらの記事を参考にやってみた。
http://d.hatena.ne.jp/shimooka/20090608/1244428241
いいんじゃないかと。
HomebrewでPHP 5.3.8をインストール
HomebrewでMacにPHP 5.3.8をインストールした。
このまえとちょっと手順が違っているので改めてメモ。
https://github.com/adamv/homebrew-altで本家Homebrewには含まれていないソフトのFomulaが公開されてて、PHPもある。
まずオプションの確認。
$ brew options https://raw.github.com/adamv/homebrew-alt/master/duplicates/php.rb ######################################################################## 100.0% php --with-mysql Include MySQL support --with-pgsql Include PostgreSQL support --with-mssql Include MSSQL-DB support --with-fpm Enable building of the fpm SAPI executable (implies --without-apache) --without-apache Build without shared Apache 2.0 Handler module --with-intl Include internationalization support --without-readline Build without readline support
続いてインストール。
$ brew install https://raw.github.com/adamv/homebrew-alt/master/duplicates/php.rb --with-mysql --with-pgsql --with-intl
CLIのPHPを切り替え。
~/.zshenv
export PATH=/usr/local/Cellar/php/5.3.8/bin:$PATH
#LoadModule php5_module libexec/apache2/libphp5.so
LoadModule php5_module /usr/local/Cellar/php/5.3.8/libexec/apache2/libphp5.so
$ sudo apachectl restart
出来上がり。
PEARのパッケージとかはまた入れなおしみたい。
emo-framework日記 #2
emo-framework用のプロジェクトをXcodeで作ってみる。
プロジェクト作成
Xcodeの新規プロジェクト作成画面で、emo-frameworkの「An Application」という雛形があるのでそれを選ぶ。
次にプロジェクトの情報を入力する画面になるので、以下のようにした。
- Product Name
- hello-emo
- Company Identifier
- jp.ne.sakura.okonomi
最後に、プロジェクトを保存するディレクトリを聞かれるので、今回は ~/work/emo を指定。
そしたらXcodeのプロジェクトができた。
そのままビルドして実行したら、タッチした座標がデバッグログにてろてろ出力されるアプリができた。とりあえず動いてるみたい。
明日はSquirrelのコードをいじってみよう。
emo-framework日記 #1
iOS/Android両対応で2D特化のフレームワークを探してて、ニーズにぴったりだったので試してみることにした。
- emo-framework - Lightweight 2D game framework for Android and iOS - Google Project Hosting
- Android/iOSの両プラットフォームに対応した軽量2Dゲームフレームワーク「emo framework」|オープンソース・ソフトウェア、ITニュースを毎日紹介するエンジニア、デザイナー向けブログ
Squirrelでプログラムを記述するのが珍しい感じ。
検証項目としては
- メモリ使用量とか
- リソース管理の方法
- 動作速度とか
- テストの書き方どうやるのか
- アプリ内課金できるのか
というところ。
インストール
サイトからアーカイブを落としてきて、適当なところに解凍。今回は ~/local/lib に置いてみた。
$ ls -l ~/local/lib total 0 drwxr-xr-x@ 12 okonomi staff 408 8 11 08:56 emo-framework-0.1.3-source
まずはXcode用を、インストールガイドに従ってインストール。
$ cd ~/local/lib/emo-framework-0.1.3-source $ ./install-templates-Xcode4.sh emo-framework template installer for Xcode 4 ...creating emo-framework template directory Installing emo-framework template ...creating destination directory: /Users/okonomi/Library/Developer/Xcode/Templates/emo-framework/libemo.xctemplate/ ...copying template files ...copying runtime scripts ...copying framework files ...copying box2d files ...copying squirrel files ...copying libpng files done!
Xcodeを起動して、File > New > New Project で新規プロジェクト作成画面を出すと「emo-framework」という選択肢が増えてる。
今日はここまで。