モデルで定義したアソシエーション等をコントローラーで変更したい

CakePHP いまさらですが触ってます、、

今回は、モデルの使い回しをする際にはまってしまったTipsです。

例えば、商品画面では詳細な情報が必要だからと、ありとあらゆる関連テーブルをモデルでアソシエーションするとします。

検索画面で一覧表示したいからとそのモデルをそのまま使うと当然ですが件数が多くなってきたり、関連テーブルがたくさんあるとオモオモです。

そんな時は、Controller内の任意の関数も変更ができます。
これが出来ないと、検索用には SearchItem モデル、、なんていうのを作らなくてはならないです

続きを読む モデルで定義したアソシエーション等をコントローラーで変更したい

Vaio Fit13a SSDの実力

やっと、メインマシンの引っ越しが一段落しました

旧マシンは以下の構成
MacBookPro 15
CPU Core i7
HDD SSD512GB HDD750GB
MEM 16GB

ただ、仮想上でWindowsを動かして作業すると、どうしてもバッテリーが持たない。。 Visualstudioなどの開発でビルドをしていると、仮想化の影響なのか、プロセスのロックでビルド失敗という状況が起きてしまうことが最近頻発していてちょっと参っていたんです。

Mac+仮想化の恩恵もだいぶ受けていたのですが(バックアップの心配いらない)

一つ前の記事に書いたとおり SonyのVaio Fit13aに惚れてしまったので仕方ない。

続きを読む Vaio Fit13a SSDの実力

Sony Vaio Fit13a 入手

自分がキーボードマシンにもとめているコンセプトにマッチしたので、メインをMacBookProから乗り換えました

本当は MacBookAirにタッチパネルが付いて、Windowsの仮想マシンがバリバリ動いて、、しかもバッテリーを気にせず使えるぐらいだったらそのままMac信者のふりをしていてもよかったんだけど、、

なんだかな~最近のAppleさんは微妙に触手をずらしてきます。

ということで、導入時に思った所感や、トラブル(色々ある)を書こうと思いますが
ちょっと時間が無いので、また気が向いたらエントリーで。

MacからWindowsに出戻りした訳だけど、良きも悪きもあるかな。。

 

MANP+CakePHPではMySQLへの接続をソケットで

cake-logo

いやいや、ちょっとハマった。。

MANPで Apache 8888 MySQL 8889 に設定していて
CakePHP の database.php に以下の設定をしたら

bakeとブラウザで挙動が違う

問題点はポート

 

bake   繋がる
ブラウザ  繋がらない

 

bake 繋がらない
ブラウザ  繋がる

色々Webをあさったけど、一番の解決策はポートを使わずソケット通信をすることらしい。

そこで以下のように直してみた。

 

bake 繋がらない
ブラウザ 繋がる

まだ繋がらない、もう一つ工夫

 

これで見事繋がるようになりました。

ポートは関係なし、ソケット通信だから。

根本的な理由はコンソールとWebでコンフィグが異なってる
ことなんだろうなと思いつつ、作業をすすめる。

MacでCakePHPの開発環境を高速で作る2013

cake-logonekobean_normal_s

現時点で手に入る最新のバージョンで構築

DebugKitは解凍すると,DebugKit-master という名前になるので、リネームして /plugins/ 以下にコピー

その後、とりあえず以下の2箇所を変更することで動作可能

/app/Config/bootstrap.phpに

/app/Controller/AppController.php に

変化を受け止め、変化を求める

今年も!そんな年にしようと思う。

今までの自分とこれからの自分、同じ自分なんだけど今年はもっと広い視野で物事を考えたいと思う。

地震や近年の景気低迷、そして政権交代。。

誰もが思ってることだと思うけど、そんなことを自分も思った次第。

以前一度この世の中はネットが繋がったことによって多様化したんじゃなくて「画一化」へ向かっているんじゃないか、と思った時期もあったし事実、そのようになってる人たちもいるけど、中にはとんでもない変化をしている人たちもいるわけで、そんな人たちと出会っていければいいな!

前向きに顔張って行きましょう!

VMwareFusionのバックアップ方法は、TimeMachineとAutoProtectで完璧!

imgres

ネットなどで未だ良く分からなくて困ってる方がいるようなのでメモ書きしておきます。

今回は以下の環境で行いました。
Mountain Lion と VMware Fusion5

TimeMachineとAutoProtectはどちらか一つを使うような関係ではなく、両者は補完しあってると言えます。

両者を使って初めて、Windows+VMwareWorkstationよりも「安心して使える仮想環境」が整うのです。

続きを読む VMwareFusionのバックアップ方法は、TimeMachineとAutoProtectで完璧!

VisualStudioの動作が遅い時(VS2010)

既によく知られた内容かも知れないけどメモメモ

Visualstudioで開発していると時々いきなりビルド等の作業が極端に遅くなる時がある。

そんなときは ソリューションディレクトリの *.suo ファイルを削除してみよう、あっさり解決する場合があるようだ。

φ(..)めもめも

MacのVMware Fusion 上で vSphere 上の仮想マシンから抜ける

メモ

vmware のサーバー仮想環境 vSphere 

Mac上での仮想環境を構築できる vmware Fusion

FusionからMacにマウスポインタを戻すのは Control + command キー

Fusion内に構築しているWindowsで実行している
vSphereクライアントからWindowsにマウスポインタを戻すのは Control + Option

分からなくて10分以上キーを押しまくってしまった。。。

TransactionScopeを使用した際にMS-DTCの昇格を防ぐ

Windowsばかりがある環境では Microsoftの.NETFRAMEWORK の開発環境は最強である、、恐ろしいほどの開発工数の削減が可能で、更新も簡単だ

今回は開発環境のうち問題になるポイントをば、、
トランザくショナルな処理を行いたい場合は幾つかの方法があるが、その中でも推薦されているのが以下のライブラリを使ったトランザクション処理だ
System.Transactions.TransactionScope

スコープというだけあり、その範囲内に記載されたデータベース処理を単一、複数サーバー問わずにアトミックに処理できる優れた仕組みであり、また記述方法もシンプルでモジュール化も行いやすい

と、、とても使いやすいんだけど難点がある、それはプログラムの記述方法により『分散トランザクション』が発生した際にMS-DTCの設定がDBサーバーと各クライアントに必要になること、、

MS-DTCの設定であるが少なくともWindows2003までのActiveDirectoryが提供するグループポリシーでは自動設定が出来ないために、個別にクライアントへの設定が必要になってくる。

ファイヤーウォールでのmsdtc.exe プログラムの通信を許可することも必要

また、厳密な処理をするためかNetBiosでクライアントからDBサーバーのIPアドレス、またサーバーからは逆引きでクライアントのIPアドレスを特定できる必要があるが、ケースにより逆引きが正しく行えないなど、運用面ではトラブルが起きやすい。

話をもとに戻すとそもそも『分散トランザクション』とは複数のDBサーバーをまたぐ際に一貫した処理を維持するための機構であり、『2層コミット』とも呼ばれる仕組みで、オール or ナッシングを実現している。

大規模なシステムでない限り1台の DBサーバーとの間では必要ない仕組で、単純にプログラムの記述を簡潔に行いたい場合においては『要らぬ世話』なのである。

だがしかし、1台のDBサーバーとやり取りをするプログラムであってもコネクションが複数になると自動的に『分散トランザクション』へ昇格してしまうことが今回の問題。

Visualstudioで開発しているならば型付データセット、テーブルアダプターは開発工数を劇的に下げる素晴らしい仕組みだが、TransactionScopeとは完全に相性がいいわけではない。

この状態では『分散トランザクション』へ昇格する
原因はDBサーバーへのコネクションが複数張られるため

幾つかのサイトで .NETFRAMEWORK2.0 SP1 とSQLServer2008である場合はこの制限がいくらか緩和されるようだが、あくまで1つのコネクションを共有する場合である。

緩和されているが、あまり劇的ではない。出来れば対象が一つのDBサーバーである場合スコープ内の処理方法問わず昇格しない様にしてほしいが、SQLServer2012のドキュメントをみてもこの辺りは改善されていないようだ。

またこの仕組、ローカル環境(プログラムとDBSQLServerが同一マシン)では一切昇格しないので、ネットワーク環境でテストして初めて直面する問題であり、自分としてはとても厄介だ。

この問題は、複数のコネクションが発生する場合に起きる、つまり単一コネクションを引き廻せば良いことになる。

これに対しての一つの解決策がコネクションをSingletonパターンで作成すること
これで”唯一のコネクション”を確保できMS-DTCへの昇格を防ぐことが出来る。

さて、実装していってみよう。