Yii CGridViewで’where clause is ambiguous’が出た時の対処法

CGridViewでwith指定して、別テーブルを結合している場合、where句のカラム名にエイリアスがつかずエラーが出るケースがあります。

CGridViewはCActiveDataProviderを使用してデータ取得するため、Giiで焼いたModelクラスのseach()メソッドを呼んでインスタンス生成していると思います。

その際、Giiのデフォルトでは、

$criteria->compare('hoge',$this->hoge);

という実装になっており、大概の場合はこれが原因で’where clause is ambiguous’(where句があいまいだぞオラっ)って怒られます。

$criteria->compare('t.hoge',$this->hoge);

のように、カラム指定部分にテーブル名のエイリアス”t.”を付加してあげればOKです。
毎度付加するのは面倒なので、Giiのテンプレートをカスタマイズしておくといいんでしょうね。

エイリアスがtとか気に食わねぇよって方は、criteriaのaliasプロパティに好きな名称ブチ込んて、tの部分も変えてあげれば良いです。(tとなっているのは、Yiiが生成するSQLのデフォルトの仕様です)
その場合にしても、withに指定するrelation名とは被らないように注意しましょう。

 


MacBookProの移行アシスタントで躓いたこと

自宅用の黒MacBookがかなりヘタって来たこともあって、MacBookPro15インチ通常版(2012MID)への買い替えに踏み切りました。

Retinaを選ばなかった理由は、拡張性の乏しさ。
CTOでSSD最大、メモリ最大にしちゃうと結構とんでもない値段だし。あとゲームしたいので、ショボくてもちゃんとグラボが載ってるのが条件ということで、13インチProやAirも除外です。もうちょっと待てば13インチRetinaが出たのかもしれないけど、それは自宅用じゃなくて仕事用の置き換えで検討ですかね。

そんなこんなで15インチの下位版を価格コム最安値くらいで購入。店頭販売やってるところが職場の近くにあったので、そこにしました。
メモリは公式には8GBまで対応なんだけど、どうやら16GBまで認識するとのことで秋葉原の某店でADATAの8GBx2(DDR3 1600)を8000円弱で購入。ついでにDSPのWindows7 Professionalも。あとは自宅に1TBのHDDが余ってるので、それもブチ込みます。

で、黒MacBook(一応Lionにアップ済)のTime Machineバックアップからデータ移行しようとしたんだけど、とにかく躓きました。

何度やってもメインのユーザだけが移行できない。デフォルトで作成するユーザはおそらく内部的に’user’という名前で管理されており(ユーザフォルダの名前がuserで作成されている)、その名前が新Macと旧Macでかぶってしまっていたことが原因と思われます。

一旦新Macのユーザーを別名で作り直し、最初に作ってしまったユーザーを削除、その状態で移行アシスタントを実行したところ、ユーザの移行がうまくいきました。いや、ほんとに何回試したかわかりません。

あとこれとはおそらく全く別の問題で、MacBook AirのTime Machineデータ(MountainLionのもの)はまったく認識されませんでした。これは後々問題が起きるような気がしております。


VMware Fusion 5からBoot Camp領域のWindows7を実行する

act2.com

(追記)【注意】マイクロソフトの規約が変わり、Bootcamp領域を残したままのVMwareからの併用は1ライセンスでは違反となりました!追加でライセンス購入するか、仮想マシンにインポートしてしまいましょう。
 

VMware FusionはBoot Camp領域にインストールしたWindows7も標準で起動できてしまいます。
この方法だとVM上からの起動ではパフォーマンス的に不安がある場合(例えば3Dゲームの実行など)にBoot Campでフルの性能を使用できるので、そういったシーンが考えられるならオススメです。また、現在Boot Campを使っていて、ドキュメント等を確認したい程度でしたら、マシンを再起動せずに簡単にVMwareから起動出来ますし、Boot Camp領域から仮想マシンをインポートして、Boot Camp領域自体を削除してしまうという手も考えられます。
1点注意としては、VM起動のWindowsではSilverLightなどで著作権設定がされている動画・音楽が再生できないケースがありますので、そういった用途を考えられている場合はBoot Camp領域を残しておくのが良いでしょう。

手順1 メニューもしくはウインドウ左上の追加ボタンからインポートを選択
手順2 「ライブラリをインポート」のウインドウでBoot Campのアイコンを選択
手順3 A.Boot Camp領域をそのまま活かす場合は「Boot Campボリュームを使用するVMware仮想マシンを作成します。」を選択、
B.Boot Camp領域からコピーして新規VMを作成する場合は、「Boot Campボリュームの内容をインポートし、それを使用してVMware仮想マシンを作成します。」を選択します。

Aの場合は上記で終了、Bの場合は新規VMの保存先を選択するダイアログが表示されますので、適宜名称をつけ、インポートを押してください。

以上です。

私はまだWindows7はあまり活用しておらず、CentOSをCUIモードで使用するのみですが、起動も早く、非常に快適に使用できています。
まっさらのLAMP開発環境のベースをVMで作成しておくと、新規案件の環境を作成する際にもコピーするだけで完了できますので、やはり便利ですよ。特にVMware FusionはMacOSのバージョンアップへの対応が早いので、安心できると思います。是非使用してみてください。
act2.com


MountainLionのバグ?

MountainLionのバグらしきを発見。

音声をミュートにした状態でしばらく使ってから、ヘッドホンをつなぐと、
それまでにメール送受信した際のSEがヘッドホンにすべて流れるようです。
ポン、ポン、ポン、ポン、ズギューン、ポン、ポン、ズギューン……、みたいな。

特に影響はないんですが、既知なんでしょうか。


VMware Fusion 5にアップグレードしてみた

act2.com

VMware Fusion 5がリリースされました。同時にVMware Fusion 5 Professionalという新たなバージョンも発表されております。
VMware Fusion 4からのアップグレードはProfessionalのみが提供されており、価格は通常版の新規購入額と一緒の$49.99です。
正直Professional版だけの機能はピンときてないので、通常版へのアップグレードを安く提供して欲しかったところですが、Professional版にアップグレードしました。

ちなみに10%5%オフクーポンも出まわっております(promo codeにvmf3affと入力)が、アップグレードには非対応のようで、入力しても空振りでした。(特にエラーは出ず、割引も適用されません)

導入後は各仮想マシンの最適化が必要になるようで、Bootcamp領域もリストから一旦ゴミ箱ボタンで削除、再度取り込む必要があります。

4と比べて動作が早くなっていたり、省電力化されていたりするようなので、しばらく使って使用感をレポートしたいと思います。

act2.com


MountainLionとWindows7でキーボード・マウス共有できた! Synergy

ここ最近は客先に常駐することが多いんですが、貸与される作業PC(Windows7 64)とMacBook Air両方で作業しているので、2つのキーボードを右へ左へと忙しい状態になります。
キーボードとマウスの切替器も売ってますが、このためだけに購入するのもなんだかなーってことで良い解決策を探したら、Synergyってのが目的にあってそうでした。
LAN経由でキーボードとマウスを共有でき、さらにコピペまでできてしまいます。

1.Macのキーボード・マウスを使用する
Mac側のキーボード・マウスを使用する設定にします。何しろキー慣れてますからね。
インストールしたのは、公式の最新バージョン(2012/08/20現在1.4.10)です。
ダウンロードはこちらから。

キーボード・マウスを使用する側は、サーバとして設定しないといけないようです。こんな感じです。



右上のモニタアイコンをPCの配置箇所にドラッグしてください。

クライアントの名称は、PC名とイコールになります。また、Macのキーボードでcapsをcontrolキー、commandをcapsキー、controlをcommandキーに割り当てていますので、上記のようなキー設定になっています。

2.Windows7をクライアントにする
Windows7は操作を受け付ける側=クライアントとして設定します。(感覚的には逆なんですが。。)
Macと同様、Windows7版のインストールを実施してください。
クライアント側では、サーバのIPを入力します。もしかするとファイアウォールにはじかれるかもしれませんが、自力解決してみてください。また、自動起動の設定も忘れずに。簡単なので割愛します。

使用感としては、かなり快適です。コピペも問題なくできています。また、トラックパッドが下手するとBoot Campのドライバより良く動いてくれます。

同じような状況の方はぜひ試してみてください。

(追記)そのままでは日本語入力の切替ができない状態です。別途Windows側でgoogle日本語入力を使用してキーバインド設定で入力モードを切り替えるようにするといった回避策が必要です。
また、カーソルの速度が標準ではかなり早くなる、画面ロックのショートカットキーが使えない、といった問題がありますので、あくまで補助的なユーティリティとして使用することになりそうです。(結局キーボードは片付けられず。。)


Windows7でMountain Lionと同じ方向にスクロール(逆スクロール)

OS Xでは、LionからiOSライクな画面スクロール方法(スクロールバーではなく画面を直接操作するイメージのスクロール)が実装されています。

つまり標準ではWindowsとスクロール方向がまったく逆になってしまいます。

Mac側に慣れてしまっていることもあり、Windowsもスクロールを逆にするため、WindowsXPではZWheelというフリーウェアを使用していましたが、どうやらWindows7には正式対応しておらず、動作も微妙とのこと。

そこで他のツールを探していましたが、こちらのポストを参考にAutoHotKeyを使用することに。今のところ特に不都合なく使えています。


WindowsXPからWindows7への移行でやったこと

この度XPから7に環境を移行する機会があったので、設定移行したものだけ、ざっくりと記録を残しておきます。

Thunderbird
7にインストール後、下記フォルダの中身を入れ替え
XP側 C\Documents&Settings\hogeuser\Application Data\Thunderbird\Profiles\hogehoge.default

7側 C\Users\hogeuser\Appdata\Roaming\Thunderbird\Profiles\hogehoge.default

Chrome
XP側でChromeにログイン後、しばらくしてから7側でChromeにログイン。アドオンも移行されます。

Firefox
XP側でSynkを有効にする。同様に7側でも有効に。Chrome同様アドオンも移行されます。

VMware
VMイメージを任意のフォルダにおいて、VMwereから起動すればOK。

git/svn
こちらのポストを参照してインストール後、作業コピー自体はそのままXPからコピーしてくればOK。(たぶん)

osqledit
こちらのポストを参照してInstant Client(32bit)を使用。

起動用のバッチファイルは

set NLS_LANG=JAPANESE_JAPAN.AL32UTF8
start “” “(フルパス記載)\osqledit.exe”
exit

みたいな感じでOKかと。
さらに、osqleditの「オプション>設定」の「OCI.DLLのPATH」にInstant ClientのOCI.DLLを指定しましょう。このあとアプリケーション再起動でOK。

google日本語入力
こちらのポストを参照してください。事前に7側のタスクマネージャのプロセスから、GoogleIMEで始まるプロセスを終了させてから、コピーを実施してください。でないと上書きできません。

Excel2003→2010
アドインを使ってたので、こちらのサイトを参照しました。

こんなとこですね。


jQueryのシンプルなツールチッププラグイン”Simpletip”

ブラウザ標準のツールチップだとブラウザによって改行対応していなかったりするので、
jQueryプラグインに解を求めた結果、これに行き着きました。

Simpletip jQuery Plugin

単純なツールチップはリファレンス見ながら楽勝で追加できるんですが、動的なテーブルに組み込んだため、ちょっと工夫が必要でした。
tdタグにホバーすると、内部のdivタグの中身をブラウザ標準のtitle属性ツールチップみたいに表示するようにしてます。

HTML

<td class="target_td">
  <p>テーブルの表示内容</p>
  <div class="tooltip_caption">
    ツールチップの<br>
    表示内容
  </div>
</td>

JS

$(document).ready(function () {
  //ツールチップのコンテンツ取得
  var tooltipContents = new Array();
  $("td.target_td .tooltip_caption").each(function(){
   //コンテンツ配列に追加
   tooltipContents.push($(this).html());
  });

  //ツールチップの適用
  $("td.target_td").each(function(i){
    $(this).simpletip({
      fixed: true
     ,content: tooltipContents[i]
    });
  });
});

CSS

 /* ツールチップ */
.tooltip_caption {
  display: none;
}
.tooltip{
  position: absolute;
  display: none;
  padding: 10px 13px;
  z-index: 3;
  color: #303030;
  background-color: #F5F5B5;
  border: 1px solid #DECA7E;
  line-height: 18px;
  text-align: center;
}

※業務で使ったコードの一部を抜粋、加工していますので、真似して動かなかったらごめんなさい!
プラグインをダウンロード、配置して、scriptタグで読み込むのもお忘れなく!


開発環境を晒す(MacBookAirでドヤァ編)

昨日は各方面で今話題になっている「俺のフレンチ」に行ってみました。

二人で、ワタミくらいの客単価で本格的なフレンチ(※ほぼ食ったこと無いのでよくわかりませんが)が食べれて大満足。L.O間際に行きましたが、日曜の夜にもかかわらずほぼ満席状態で、料理も品切れが多かったので、今度は早い時間に行ってみようと思います!

 

さて、全く話は変わりますが、ちょっと時間が空いたので今の開発環境を晒してみます。

客先では客先のPC(WinXP)で、自宅と外出先ではMacでドヤァしていますが、今回はMac側をまとめます。ざっくり書くので、あんまり参考にならないかも。

 

1.ハード MacBook Air11(2011)

去年11インチのフルカス版(i7、メモリ4G、SSD256G)をソフマップで買いました。ソフマップは結構Apple製品に力を入れており、CTOのバリエーションもそこそこ豊富に在庫があります。

アップルストアでも多分買えるんですが、ソフマップだとポイントがいくらか付くので、外付けドライブ買う時の足しにもなりますし、オススメです。

逆に全くノンカスでいいなら価格コムで最安値調べて買いに行くといいと思います。

OSは先日マーライオンMountainLionにUP済みです。

2.サーバ(仮想) VMWareFusion4 + CentOS5.7

Macで仮想マシンといえばVirtualBoxでもいいんですが、ここは安定性を優先してVMWareFusion4を使用してます。(個人的な話ですが、VirtualBoxはVMが壊れまくって苦労したので、あまり信用してません。)

ちなみにVMWareFusion4はよくクーポン配ってるので、オンラインで買う場合には事前にググっといたほうがいいでしょうね。私も確か30〜40%オフくらいで買ったと思います。多分年末にVMWareFusion5が出るので、その辺も考慮しましょう。

ゲストOSは客先に合わせてCentOS5.7を使ってます。

言語は主にPHPで、DBはMySqlとOracleが7:3くらいです。

PHPのフレームワークはYiiですね。Yiiは文字通りとってもイイですよ。そもそもYiiのこと書くのに始めたブログですが、ほぼYiiのこと書いてませんよね。。近いうちに書きます。

3.転送と実装 CyberDuck + CotEditor( or MacVim)

FTP(SFTP)はCyberDuckで、エディタはCotEditorがメインです。最近は気分でMacVimも使ってますが、正直あんまり慣れてません。

あと、リモートデバッグが必要な場合にはEclipse使うこともありますね。

CyberDuckはMacAppstoreだと有料ですが、サイトからのダウンロードだとフリーです。(寄付は求めてます)

 

4.バージョン管理(SVN) iTermからコマンド実行

WinだとTortoiseSVNでGUI管理できて楽ちんなんですが、MacだとGUI管理出来るまともなフリーウェアがない(あるのかな?)ので、コマンドぶっ叩くのが吉です。

ちなみにSVNは客先のサーバを使っておりますが、ローカルで完結させるような場合はGitが楽で良いと思います。Git使う場合もコマンドですね。

仮想ターミナルは標準でもいいと思いますが、iTerm2使ってます。(正直違いがあまりわかりませんが。。)

 

こんなところですが、正直Winのほうが仕事での使用歴が長い分やりやすいです。(昨年まではサーバもWinがメインでしたので。)今でもEMEditor使いてぇなってなります。

しかし、ドヤラーとしての地位を確立するためにも日々精進するのみ!