活動再開

http://d.hatena.ne.jp/kunit/20071129

長い沈黙をやぶってMapleが再開.以前議論してた設定ファイル周りとかDB関連とか強化されるとうれしいなぁ.今はほんといろんなフレームワークが乱立状態だからチャンスとも言えるし,苦境とも言える.なんかこう決定打って出ないのかなぁ.選択肢が多すぎるのも考えものだ.

紅葉フレームワークを試してみる2

ちょっと見てみたらDIContainerの設定方法がいまいち分からなかったorz.この辺はMapleの肝だと思ってたので,もうちょっと試してみるとする.後やはり昨今のフレームワークでDB周りのフォローがないとけっこう厳しいのかなぁと思ったりも.比較的軽量な点は取っ付きやすくていいとも思うけど.まだαだし,今後に期待したいと思うます.

人間って勝手な生き物で他にあるものをすぐ欲しがっちゃうな.ないものねだりはよくないよね.

追記:
細かいことだけど,チュートリアルページWEBアプリ構築基礎の丸数字がorz
Macだと順に!,",#,$,%,&になっちゃうよ><

紅葉フレームワークを試してみる

まずはインストール.最近の自分はgeneratorなしではめんどくさくなってるので,一緒に入れることにする.

# pear channel-discover pear.momiji-project.org
# pear install momiji/Momiji-alpha
# pear install momiji/Momiji_Generator-alpha

最初インストールいしようとしたら怒られたので,

# pear upgrade PEAR
# pear upgrade-channels

PEAR本体をアップグレード.

んで適当にディレクトリを作る.今回はMomijiそのもののソースも見たかったので,

 + momiji
   + app
   |  + momiji - ここにアプリケーションをつくる
   + libs - ここにMomijiのソースを入れる

とした.
次にSpycとSmartyを入れるみたいだけど,とりあえず今回はSmartyは使わない方向で.Spycを落としてきて,spyc.phpをcomponents配下に移動.これcomponentsに入れるのか….個人的にはlibとか作ってそこに入れたい気もするなぁ.

とまぁこれだけで準備が整ったのかな.早速momijiコマンドでactionを作ってみる.

$ momiji action Index
Nov 24 23:15:59 [create] /www/projects/momiji/app/momiji/webapp/modules/Index/Index.php
$ momiji entry index Index
Nov 24 23:19:22 [create] /www/projects/momiji/app/momiji/htdocs/index.php

ここでふと思った.actionを作ったときにテンプレートは自動生成されないのか.チュートリアルではテンプレートまで生成されてるみたいだからSmartyを入れてれば作られるのかな?
ってことでwebapp作成時にSmartyオプションを入れてみる.

$ momiji webapp --smarty
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/htdocs
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/cache
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/components
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/configs
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/files
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/logs
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/modules
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/templates
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/configs/momiji.inc.php
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/templates_c
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/smarty
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/smarty/plugins
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/smarty/filters
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/smarty/plugins/modifier.escape_string.php
Nov 24 23:29:15 [create] /www/projects/momiji/app/momiji/webapp/smarty/filters/smarty_window_outputfilter.php

ずらずらっと必要なファイルができる.
改めて

$ momiji action Index smarty
Nov 24 23:33:12 [create] /www/projects/momiji/app/momiji/webapp/modules/Index/Index.php
Nov 24 23:33:12 [create] /www/projects/momiji/app/momiji/webapp/modules/Index/momiji.yaml
Nov 24 23:33:12 [create] /www/projects/momiji/app/momiji/webapp/templates/Index.html
$ momiji entry index Index
Nov 24 23:34:11 [create] /www/projects/momiji/app/momiji/htdocs/index.php

今度はテンプレートまでできてる.

http://localhost/momoji
とかで見てみると

Hello Momiji!
Smarty Template

が表示された.

んーAction毎にディレクトリを作るというのがMapleのときにも感じた微妙な点ではあるから,この辺をなんとかできればなぁと思う.とはいえ設定ファイルの継承(上位階層の設定が下位階層にも反映される)っていう機能を考えたらしょうがないのかな.

後はRailsベースのCakeやらAkelosやら触った後の感想としては,LL言語で設定ファイルは非常にメンドクサイ.なんか最近はphpのことはphpでやっちょおうよ的な考えに染まっちゃってる自分がいる.

とりあえずここで力尽きるorz

AkActiveRecord::find

AkelosActiveRecordのメモ.

find()

基本のfind.

第一パラメータに"first","all"などの取得条件を指定.第二パラメータには配列でオプションを指定する.オプションは以下の通り.

  • conditions
    • SQLのWHERE区.いくつか指定方法あり
      • 配列 : キーと値がペアになった連想配列.基本的に"="で連結される.単純なデータ取得にはいいかも.
      • バインド形式 : 普通の配列で指定するが,0番目の値に"user_id = ?"などとSQLを書く.その後に続く値でuser_idの実値を書く."array("user_id = ?", 1)"とか
      • バインドその2 : 最初にSQLを書いて,その後にSQL中に埋め込んだキーワードと同じキーの値をバインドする.array("user_name = ':user_name'", ':user_name' => 'updoor');
  • limit
    • SQLのLIMIT区.何件分のデータを取得するかを指定.
  • offset
    • SQLのOFFSET区.取得するデータがどこから始まるかを指定
  • order
    • SQLのORDER区."id desc"みたいな.
  • include
    • アソシエーションを自動読み込み(後述)

ちなみに"find()"では単純にidを一つでも,複数並べた形でもデータの取得ができる.

$Model->find(1, 2, 3);

結果が複数ある場合には,モデルの配列で結果が返ってくる."first"を指定した場合には一番最初の結果のモデルが返ってくる.

findの"include"オプション

基本的にはアソシエーションを指定したモデルの名前を書く.例えばUserモデルとGroupモデルが繋がっている場合.Userは一つのGroupに属する,逆にグループには複数のUserが属するってなときは,
Userモデル

$belongs_to = 'group';

Groupモデル

$has_many = 'users';

な感じで結びつく.

このとき,とあるグループを取得するときについでに社員一覧とかを取るとすると

$group = $this->Group->find('first', array(
  'conditions' => array('id = ?', 1),
  'include' => 'users'
))

といった形で書ける.通常ならアソシエーションを読み込むときには"load"で読む必要があるけど,includeオプションをつけることで自動的に取ってきてくれる.

findAll()

"find('all')"のラッパー.内部的にもパラメータの一番最初に"all"指定を付け加えて,"find()"メソッドを実行.

findFirst()

"find('first')"のラッパー.内部的にもパラメータの一番最初に"first"指定を付け加えて,"find()"メソッドを実行.

findBy()

find()のconditionsオプションをいろいろ柔軟に指定できるよ.ってな感じっぽい.

コード中の例によると下記みたいな指定ができる.

findBy('username AND password', $username, $password);
findBy('age > ? AND name:contains', 18, 'Joe');
findBy('is_active = true AND session_id', session_id());

最初の引数に"all"か"first"をつける.付けない場合にはデフォルトで"all"が指定される.
これにfind()の時みたいにオプションを指定した場合には,引数の最後に配列で指定してあげる.

findAllBy(args)

findBy('all', args);

findBy

findFirstBy()

findBy('first', args);

findLastBy()

findFirstBy()の逆で最後のデータを取得.内部的に"findFirstBy()"を実行する前にorderに"desc"を指定している.

findBySql()

SQL直指定して結果を取得.
モデルに存在しないカラムは弾かれてるっぽい.


と簡単にまとめてみる.
これ違うとかこんな使い方もあるよってな突っ込みやらアドバイスお待ちしておりマス.

紅葉フレームワーク

http://www.momiji-project.org/
[via http://d.hatena.ne.jp/bobchin/20071120 ]

Mapleの思想を受け継いだフレームワークとして先日公開されたばっかりっぽい.個人的にはMapleDIContainerは好きだったので(phpに合うかどうかは別として),今後もがんばって開発していただきたいなぁと思う.

id:bobchin:20071120さんのところでの

あと、Mapleはまだ死んでないかも?
徐々に動きがあるような感じですよ。。。

この発言が気になる今日この頃.

溶けゆく日本人

http://sankei.jp.msn.com/life/lifestyle/071113/sty0711130811000-n1.htm

すごいな…
急ぐなら電話しろよと思うけど…どうなんだろ.電話するまでもない用事なら5分程度でいらいらとかどんだけ.
確かに通勤時間なんかに道行く人を見ると自転車乗りながら,携帯いじってる人とかいるし.同僚と二人でご飯食べに行ってもずっと携帯とにらめっこ.隣の席の人とかも二人して携帯いじって会話なんてない人たちもいるし.
携帯なんて電話と簡単なメールができりゃいいんじゃねって思うのは少数派なのかね.