[Play Framework] 第一回 準備1.サーバーのJDK更新

java ver7をyumで入れる

sudo yum search jdk

============================================== N/S Matched: jdk ==============================================
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
icedtea-web.x86_64 : Additional Java components for OpenJDK
ldapjdk.x86_64 : The Mozilla LDAP Java SDK

Name and summary matches only, use “search all” for everything.

sudo yum install java-1.7.0-openjdk-devel.x86_64

==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
java-1.7.0-openjdk-devel x86_64 1:1.7.0.25-2.3.10.4.el6_4 updates 9.4 M
Installing for dependencies:
java-1.7.0-openjdk x86_64 1:1.7.0.25-2.3.10.4.el6_4 updates 26 M
ttmkfdir x86_64 3.0.9-32.1.el6 base 43 k
xorg-x11-fonts-Type1 noarch 7.2-9.1.el6 base 520 k

Transaction Summary
==============================================================================================================
Install 4 Package(s)

Total download size: 36 M
Installed size: 126 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): java-1.7.0-openjdk-1.7.0.25-2.3.10.4.el6_4.x86_64.rpm | 26 MB 00:00
(2/4): java-1.7.0-openjdk-devel-1.7.0.25-2.3.10.4.el6_4.x86_64.rpm | 9.4 MB 00:00
(3/4): ttmkfdir-3.0.9-32.1.el6.x86_64.rpm | 43 kB 00:00
(4/4): xorg-x11-fonts-Type1-7.2-9.1.el6.noarch.rpm | 520 kB 00:00

update-alternatives --config java

3 プログラムがあり ‘java’ を提供します。

選択 コマンド
———————————————–
1 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
2 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
*+ 3 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
/var/lib/alternatives/java.new の作成に失敗です: 許可がありません

java -version

java version “1.7.0_25”

javac -version

javac 1.7.0_25

引越しして200Mbpsから100Mbpsのプランになったけど、むしろ速くなった

というか、まあアレです。
前回のマンションはまともに速度が出ない仕様でした。

部屋の壁から硬めの線が生えてて、それを途中から柔らかい光ファイバーケーブルに変換して、NTTの端末に挿すタイプ。
そしてやっとLANケーブルに変換されるタイプ。
ってどんなタイプだよという話ですが、要は電話のラインを使わないタイプでした。

曲者は硬いケーブルで、今までの扱いが悪かったらしく線が痛んでて漏れがありロスが発生しており、
引越し直後はオンラインにならずNTTのサポートに電話してチェックを要請する羽目に。
ちなみに、月曜が引越しだったため、次の土曜までオフライン生活を余儀なくされて発狂ものでした。

で、チェックしてもらったわけですが、線をぎりぎり大丈夫なとこまでカットして端子を作り直し、
ようやくつながるようになったのですが、線の曲げ具合で速度のMAX値が変わるというアホすぎる仕様。
普段は40Mbpsがいいとこでした。
てことで、NTTは死んでくれ。

で、今日からコレ↓本当にありがとうございます。
speedtest_wired

[CakePHP2]CakePHP2.3.6がリリースされてCakeEmailのバグが修正された様子

http://bakery.cakephp.org/articles/markstory/2013/06/10/cakephp_2_3_6_released
CakePHP2.3.5でマルチバイトの取り扱いがやばくて文字化けというか文字消失が起こっていたのですが、
修正というか、マシになったようです。(軽くテスト済み)

  • Datetime comparisons in CakeTime are more accurate now.
  • FormHelper now correctly marks fields with error classes on forms that save multiple records.
  • Controller::$modelClass is now set before components are initialized.
  • The file reading features of CakeEmail are now available outside the class.
  • Email line wrapping compatibility with japanese messages has been improved.
  • HtmlHelper::tag() now returns the content when $tag is false.
  • Mocked components are now enabled when using ControllerTestCase::testAction().
  • The type attribute can now be set when using HtmlHelper::script() and HtmlHelper::scriptBlock().
  • Passing an empty array does not reset SmtpTransport’s configuration anymore.
  • Xml parse errors with SimpleXmlElement now throw XmlException.
  • FormHelper now disables options in multi-select elements now.
  • TranslateBehavior now always uses $name instead of alias when updating/inserting rows.
  • Cookie expiry times in the distant future now work on 32bit systems.
  • FileEngine now clears groups with differing prefixes correctly.

[CakePHP2]Null の含まれるカラムをPaginatorで思い通りにソートする

たとえば、priceカラムがあるとして、
nullが入ってるデータにソートをかけると、
一番低い値としてみなされます(mysqlの場合)。
安い順に並べたいのに、そんなわけの分からないデータが表示されたら困ります。
※かといって、逆に、高い順に並べたときにnullデータが最初に表示されても困ります。

そんな場合のテヒニク(ドイツ語?)

VirtualFieldsでサクッと解決する

予めソート対象のカラムに細工をして、空想列を作る。

1
2
3
4
5
6
        public $virtualFields = array(
                // 昇順の場合はnull を最大値として扱う
                'asc_price' => 'ifnull(price, 2147483647)', // 想定される上限より上の値
                // 降順の場合はnull を最小値として扱う
                'desc_price' => 'ifnull(price, -1)',	// 想定される下限より下の値
        );

View側では普通にPaginator::sortを

1
2
 echo $this->Paginator->sort('asc_price', '安い順', Array('direction' => 'asc'); // asc
 echo $this->Paginator->sort('desc_price', '高い順', Array('direction' => 'desc'); // desc

これで、

  • 安い順に並べた場合にnullが最後に出現
  • 高い順に並べた場合にもnullが最後に出現

が実現できます。

凄く無駄っぽい実装ですが、分かり易さ第一という事で。

[CakePHP2]CakePHP2.3.5にアップデートしたら必須エラーが出るようになった件の対応

いつの間にかバリデーションが強化されてた

Creating form elements

原文

Since 2.3 the HTML5 required attribute will also be added to the input based on validation rules.
You can explicitly set required key in options array to override it for a field.
To skip browser validation triggering for the whole form you can set option ‘formnovalidate’ => true for the input button you generate using FormHelper::submit() or set ‘novalidate’ => true in options for FormHelper::create().

翻訳

バージョン 2.3 から HTML5 の required属性が(Model等の)バリデーションルールに基づいて(自動で入力フィールドに)追加されるようになった。
この仕様をオーバーライド(上書き)したい場合は、入力フィールドのオプション(配列)にrequireキーをセットすればよい
(⇒ 必須:’required’ => true , 必須でない:’required’ => false)
フォーム全体に対してのバリデーションをスキップしたい場合は以下のどちらかをすればいいアル。

  1. サブミットボタンの生成 FormHelper::submit() に ‘formnovalidate’ => true をセットする
  2. フォーム生成 FormHelper::create() に ‘novalidate’ => true をセットする

備考

なぜ、今回の仕様変更で問題になるのかというと、
require属性の動作が、ブラウザがサーバにデータを送る前に、ブラウザ上でエラーを返す点にあります。
『フィールドに入力が無かった場合にサーバー側で何らかの処理をして動かす』というような実装をしている場合に、
サーバにデータが送られるまえにエラーになってしまうので、予めrequire(の自動付与)をキャンセルしておく必要が生じます。
また、更新処理でない、検索処理のフォームでも同様にバリデーションが行われる為、
検索では起こる確率が高くなるのかなという気がします。

対応が必要にりそうな想定される実装のパターン

  • Search Plugin などで Table上の必須項目を任意検索の対象にしてたらツむ
  • hasManyで動的に複数行をsaveAllしようとする実装で、予め入力フォームを余分に用意する実装だったらツむ

[CakePHP2]2.3.5にアップデートしようと思い、Diff見たら

Security Fix: CakePHP 2.3.5 released
ということで、現状と比較するじゃん?

diff_of_cake
こんなことになってんじゃん?

こうなることぐらい予想しろよじゃん?

しかも、カンマが入ってるパターンと入ってないパターンが混在してるじゃん?

またいつか統一されるじゃん?

また相違がでるじゃん!!!