2014/01/04

[Symfony2]プロファイラーのタイムラインへの独自項目追加方法

Symfony2 では xdebug を導入しなくても、簡易なプロファイラーを利用できます。

"タイムライン"で各処理が消費した時間を見ることができるのですが、コントローラーから呼び出された各処理については自動で時間を取得してはくれません。

Symfonyで提供しているプロファイラーのタイムライン

・・・というわけで独自項目をタイムラインへ追加する方法について調査しました。

タイムラインへの追加手順は次の通り。

  • タイムラインに追加したい処理を行うオブジェクトに "debug.stopwatch" を DI
  • $stopWatch = $this->get('debug.stopwatch'); $event = $stopWatch->start('hogehoge'); ...(任意の処理)...; $event->stop()
こんな感じになります
残念ながらドキュメントにはこのあたり書いてないのですよね。。。

以下、調査メモ

2013/11/04

[Symfony2]コンパイル使用&カスタマイズ方法について調べる - 使用方法

Symfony2では設定ファイルで定義したDIの内容を、キャッシュ時にコードとして埋め込む"コンパイル"を利用することができる。・・・のだけれど、実際使用方法とかカスタマイズ方法とかが今ひとつ理解しきれていないので、確認してみる。

多分その気になれば、かなり色々なことができるのではないかと期待しているのだけれど。。。
とりあえずは別途記載した SQL ファイルの内容をクラスに埋め込むというのを目標としてみる。

まずは公式ドキュメントを参考に概要と使用方法を確認してみる。


概要

  • 設定ファイルのタグに記載した設定をPHPコードとしてキャッシュできる
  • ChainOfResponsibility パターンなどで利用できる
  • 使用時にはタグを設定する
PHPコードにできるということはAPCの恩恵に預かれるということなので、できればぜひとも便利に使っていきたいところ。きっと ChainOfResponsibility パターン以外でも利用できる箇所は多い・・・よね?

使用方法

  1. コンパイルを利用するサービスクラスを作成、DI設定を記載
  2. 1で設定したサービスにぶち込むクラスを作成、DI設定を記載、タグを付ける
  3. Bundle クラスに build メソッドを追加、XxxxCompilerPass の利用を宣言
  4. XxxxCompilerPass クラスを作成、どのタグに対してどんな処理を行うのか記載
  5. サービス生成ロジックのキャッシュコード生成時に、2のDI設定がPHPコードとして固定で記載される
XxxxCompilerPass のあたりが肝のようなので、ここで他にどんな処理が可能なのか確認してみるつもり。
それにしても、これ結構手間だなぁ。。。

2013/07/25

シェルスクリプトでcutの代わりに配列を使ってみたはなし

久々にシェルスクリプトを書いた。

こんなのを書いたら結構遅かった。
区切り文字がもともとスペースだったので配列にしてみたら大分早くなった。
#!/bin/sh
MIN=$1

while read i; do
  # 入力文字中のスペース区切りのn番目の数値を判定してフィルタリング
  VAL=`echo $i | cut -d " " -f 11`
  if [ $VAL -ge $MIN ]; then
    echo $i
  fi
done

#!/bin/sh
MIN=$1

while read i; do
  items=($i)
  if [ ${items[10]} -ge $MIN ]; then
    echo $i
  fi
done

そっかー、配列かー
シェルスクリプトの配列って扱いづらくて苦手の感じある。
分岐をなくせばもっと早くなりそうだけど、、、それはちょっと難しそう。

2013/05/19

社内でKnockoutJSの紹介してきたよー

GWあたりに調べて社内でKnockoutJSの紹介をしてきたときの資料貼っときます!



KnockoutJSけっこう良さそうなんですけど、個人的には"data-bind"の濫用がどうにもキモくてキモくて。。。
でも(templateじゃなくて)こういう形にしてるおかげでjsなしの状態でデザインを確認できるっていうのは、きっとデザイナーさんと協業するような場合はやりやすい感じなのだろうなぁと感じます。

今日Sapporo.jsでember.jsの話を聞いてきて、ember.jsが目的は違えど、現時点で実現できていることは近いっぽく、プログラマ的には割りとそっちの方が性にあっていそうな雰囲気は感じました!
あと、tricknotes氏が"ie8でも動くようにしたよ!"って言ってたから次はember.js試してみる!

2013/04/29

[FuelPHP]ORM利用時のvalidation使用方法

Orm¥Modelでのsave時のvalidationの設定がハマりどころだったのでメモ。
Model_Crudを利用する場合とは全く有効化する方法が違うという話。


あと、Observer_Validationはoil create model --ormした時かなにかで見かけたので、気づいたんだけど、、、それがなければわからなかった気がします。。。
Model_Crudの方ではvalidation内容を`$_rule`に記載するのですが、、、
Orm¥Modelを使う場合は全くのムダ知識・・・(白目)

そもそもOrm¥ModelとModel_Crudってまるで継承関係ないし、使い方とかも似てるようで全然違っていて、、、ダックタイピングとか・・・そういう概念は、ないの?

[FuelPHP]1.5/masterのBelongs Toでの注意メモ

FuelPHP1.5系のOrm¥Modelでバグ(だよね?)を踏んでハマったのでメモ。

再現方法と事象

  • Belongs Toのrelationを設定するモデルでkey_fromにそのモデルのPK項目を指定
  • 上のモデルに対してdelete()を実行
  • `FuelException`(Primary key on model モデル名 cannot be changed.)をくらう
  • いぇーい

対応

1.6系では修正されていたので、ORMパッケージだけ1.6系を使うことにしました。
ちなみにOrm¥Model_Softを使う場合は上の事象は発生しません。

2013/03/11

FuelPHPのgit管理にorphanブランチ使ったらどうかねぇ?

FuelPHPをgit管理したいなぁって場合にorphanブランチを使ったら割とよいんじゃないかと以前思ったのでメモ。


`oil create ほげほげ`した後に次の手順を実施。


# orphanオプションで他のコミットとのつながりのないブランチを作成できる
# ちなみにFuelPHPではmasterという名前のブランチは使用されていない
git checkout --orphan master
git add .
git commit -m"Initial commit"
git rm *.md
git commit -m"Remove unnecessary documents for application"

# 次は必要に応じて実施、この時点で一番新しいstableなバージョンがデフォルトでpullされているはず
# "1.5/master"の部分は必要に応じて変更する
git submodule foreach 'git fetch'
git submodule foreach 'git checkout 1.5/master'

# 不要なremote、元々のブランチを削除
git br -D 1.5/master
git remode rm origin

FuelPHPはgithub上で開発されていて、"FuelPHPドキュメント"の"クイックインストール"の手順とかでインストールするとFuelPHP自体をまるっとgit cloneしてしまう様になっています。
  • 別にFuelPHPの開発履歴はいらない
  • submodule管理されているfuel/coreとかは同じくsubmodule管理したい
というのがそもそもやりたかったこと。

で、ぐぐってみるといっぺんgitの管理ファイルを削除してから手作業でgit submodule addするみたいな手順が引っかかって"もやっ"としたのでちょっと解決策を考えてみました。
もやっとした上に実際一回失敗したので解決策を考えてみました。
・・・というのが背景。

ちなみに"FuelPHPを適宜updateしたいぜー"って場合は上の方法じゃなくてこちらの方法でやるといいと思う。

参考