アーカイブ

‘cakePHP’ タグのついている投稿

WindowsMobileなどなど

2010 年 5 月 13 日 Jiro コメントはありません

非常に長いことご無沙汰でした。4月に超短納期の仕事が入りまして、ばたばたしておりました。
それが片付いた後は、たちの悪い風邪にかかってしまい。GW明け近くまで臥せっていました。

今回のお仕事はWindowsCE上でEmbeddedVB3.0で作られたシステムをWindowsMobile6.0 VB2005に移行するものでした。仕様書はほとんどなし。データベースもサンプルにデータが入っていない。
データ構成の資料も無い。という状況で、すべては実機の動作とソースから作成する状況でした。しかも1ヶ月に満たない納期でw。

VB2008ならもう少し融通が利くようでしたが、2005のMobile環境はコントロールが異常に少ないことと、プロパティがほとんどの無いに等しいので一苦労でした。昔のEmbeddedの方がプロパティ多いんですよ。びっくりしました。
なんせClickイベントも拾えないのでGotFocusで擬似動作させたり、Activateイベントが思わぬところで動作してぐちゃぐちゃになったりと祭り状態でした。データベースも以前はCDBというモバイル用Accessでしたが今回はSQL-Serverのコンパクト版ですのでデータ型も再定義の必要がありました。

まあ救いといえばロジック部分はある程度流用できたのですが、随分たくさんの変数が使いまわされていることと、オブジェクトの破棄があまり明確で無い書き方をしていたので、その辺はリークのないように気を使いました。

.NET以降のVBはあまり使ったこと無かったのですが、まあ慣れればVSのIDEと共に、ある程度は使い安いかなと感じました。CakePHPもAptanaとFireFoxのデバッグ機能で随分楽にはなりますが、さすがにVSの便利さには追いつかないですね。

その前はVS2008でWPFを使ってC#で書くお仕事でしたが、こっちは新機能満載でググっても情報無くて苦労しました。

という具合にCakePHPは放置状態ですが新バージョンの安定版が出ているので試してみたいところです。
しかしAndoroidやってみたいのでEclipse+SDKをインストールしてJava勉強中です。
片手間で昔作りかけていた見積書システムをVB2008でいじくって遊んでます。せっかくVBやったので忘れないうちにすこし身につけておこうかなと。簡単なシステムですがある程度出来たらVectorあたりで配布しようかな。

まあ、今時あまりはやらないかもしれませんが、iPhoneとかモバイル端末とかいじってて感じたUIへの思いを少し入れてみようかなと。

カテゴリー: ブログ タグ: , , ,

cakePHP覚書#4

2010 年 3 月 4 日 Jiro コメントはありません

ひとつのモデルの中で関数を作成して簡単に利用したいと思ったのですが、結果を返す際に
他のモデルも参照しなくちゃいけなくなりました。
このあたりは、アソシエーションを使ったほうが良いのかもしれませんが、データベースの作成がまずくて
うまく出来そうに無いので、モデル内の関数で他のモデルを呼び出して見ました。

$this->loadModel('ModelA');

これは、やはりダメでした。

importでmodelを呼び出して使うみたい。

App::import('Model','modelA');
$modelA = new modelA;
$modelA->find($conditions,null,$orders);

こんな感じでいいようです。さて今から検証。

検証の結果うまくいきました。上記App::import(‘model’と小文字になっていたところを訂正。

モデルの中で他のモデル呼び出すって、ちょっと邪道かなという気もします。

componentあたりに関数作成したほうがいいかもしれませんね。

また、コントローラの中でusesでたくさんのモデル定義していると使わなくてもSQLが走っているようです。

基本になるモデルひとつだけusesで定義しておくか、$uses=null;にしておいて、必要なアクションで必要なモデルを

loadModelしたほうが良い気がしますね。

まだパフォーマンスを上げる段階ではないですが、一通り動作するようになれば、次はパフォーマンス向上が大事だと思います。

現在はWindowsXPの非力なマシン上でXampp環境でのテストですが、ファンが唸ってますからねw

本番では随分昔のDellサーバーに乗せる予定です。こっちも非力ですからね。

カテゴリー: cakePHP タグ: ,

jQuery書籍購入

2010 年 3 月 4 日 Jiro コメントはありません

たまたま、本屋に行く機会があったのでちょっと立ち読みしてたらjQueryの本を見つけました。

基本的な使い方はWebで調べると色々出てくるのですが、この本はサンプル集が多くて「メニュー」「グリッド」「ツールチップ」などが

掲載されていたので思わず購入してしまいました。

プラグインの使い方はWebで調べるの結構面倒なんですよね。まあ、例に漏れずすべてのプロパティやアクションを紹介している

わけではないのですが、とりあえず使ってみるきっかけにはいいですよね。

それに、度忘れしちゃうことが多いので、さくっと引いてみて「ああ、そうだった。」って感じで使ってます。

カテゴリー: cakePHP タグ: , ,

cakePHP覚書#3

2010 年 3 月 2 日 Jiro コメントはありません

連想配列(modelの内容をDBからとってきたもの)の配列。要は複数レコードを入れた配列なんですが、

foreachで回して、項目を変更したのだけど、元の配列自体に変更が及んでいないようで、その後saveAllしても

DBに反映されていない。

for文で直接もとの配列を書き直してみよう。

foreach ($bs as $b){
	$b['model']['data'] = "test";
}

こういう風にすると「$bs」のなかみ$bs[0]['model']['data']は書き換えられなかった。

for ($i=0;$i<count($bs);$i++){
	$bs[$i]['model']['data']="test";
}

こうしたらうまく書き換えてくれた。

findなどでデータベースのレコードを取得する場合の条件の書き方でくだらないミス。

$conditions = array('nenrei>' => $nenrei);

フィールド名と比較演算子の間のスペース忘れると変なことになる。

where 'nenrei>' = 1

比較演算子がフィールド名の一部と誤認識される。つーか、空白で区切らないと当たり前のことですね。ww

カテゴリー: cakePHP タグ: ,

cakePHP覚書#2

2010 年 3 月 1 日 Jiro コメントはありません

ちょっと複雑なデータ更新が必要になってきたので、トランザクションを調べることにした。

ひとつのテーブルで更新と追加が同時発生、他のテーブルでも同様という風に二つのテーブルにまたがる処理ですが

アソシエーションでは定義できないようなもの。

まずMySQLのテーブルがMyISAMだとロールバックしても効かないので使えない。InnoDBに変更が必要となる。

show table  status;

で現状の確認をする。MyISAMで作っている既存テーブルもInnoDBに変更可能。

変更するには、phpMyAdminであればテーブルの「操作」で「ストレージエンジン」を「InnoDB」に変更して実行押すだけ。

alter table 'xxxx'  engine=InooDB;

が実行された。もちろんコマンドラインから、これを打ってもOKです。

さてさて、begin()  commit()  rollback() をどこで定義しておくか。

必要なテーブルのモデルだけで定義しておいてもいいけど面倒ですね。思い切ってapp_modelに書いとけば全部のモデルで継承してくれますから、これでいいかな。

いつものように、cake以下は触らないお約束で、cake/libs/modelのなかのapp_model.phpをapp/models以下にコピーしておいて追加します。

function begin() {
	$dbs = & ConnectionManager::getDataSource($this->useDbConfig);
	$dbs->begin($this);
}

function commit() {
	$dbs = & ConnectionManager::getDataSource($this->useDbConfig);
	$dbs->commit($this);

}

function rollback() {
	$dbs = & ConnectionManager::getDataSource($this->useDbConfig);
	$dbs->rollback($this);

}

これで、モデルの関数になるのでモデル名->begin()とかで使えます。

2つのモデルを同時更新なら

	ModelA->begin();

	ModelB->begin();

	処理ほにゃらら

	なんか問題あったら

	ModelA->rollback();

	ModelB->rollback();

	エラー無く終了。

	ModelA->commit();

	ModelB->commit();

こんな具合かな。それとsavaAllを使うときの注意もあった。saveAllの外側でトランザクション開始していてもループの途中でコミットされちゃうみたいです。対策としてはパラメータを追加しておくこと。

ModelA->saveAll($datas ,array('atomic'=>false);

こんなおまじないが必須だ。

追記:どうもModelA ModelB両方にbegin() rollback() commit()を行わなくても、ModelAだけやっておけば、両方に効力があるという記述を発見。まだ未検証です。

追記:検証しました。

実行されたSQLも確認しましたが、どれかひとつのモデルでトランザクション操作しておけばOKです。


カテゴリー: cakePHP タグ:
Get Adobe Flash playerPlugin by wpburn.com wordpress themes