PHP_CodeSnifferでCakePHPのコーディング規約チェック

掲題の通り。メモ書き。ちなみに環境はCentOS6.4。

まずは、PHP_CodeSnifferをインストール。

[root@localhost hogehoge]# pear install PHP_CodeSniffer
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
Unknown remote channel: pear.phpunit.de
Did not download optional dependencies: channel://pear.phpunit.de/PHP_Timer, use --alldeps to download automatically
pear/PHP_CodeSniffer can optionally use package "channel://pear.phpunit.de/PHP_Timer"
downloading PHP_CodeSniffer-1.4.5.tgz ...
Starting to download PHP_CodeSniffer-1.4.5.tgz (377,255 bytes)
.................done: 377,255 bytes
install ok: channel://pear.php.net/PHP_CodeSniffer-1.4.5

次に、phpcsを叩いて、フォローされている規約を確認。

[root@localhost hogehoge]# phpcs -i
The installed coding standards are PSR1, MySource, Squiz, PEAR, PSR2, PHPCS and Zend

デフォルトではCakePHPの規約はフォローしていないので、以下のようにして、CakePHPの規約を追加。

[root@localhost hogehoge]# git clone https://github.com/cakephp/cakephp-codesniffer.git
Initialized empty Git repository in *********/cakephp-codesniffer/.git/
remote: Counting objects: 606, done.
remote: Compressing objects: 100% (370/370), done.
remote: Total 606 (delta 264), reused 553 (delta 224)
Receiving objects: 100% (606/606), 100.45 KiB | 110 KiB/s, done.
Resolving deltas: 100% (264/264), done.

[root@localhost hogehoge]# cp -R cakephp-codesniffer /usr/share/pear/PHP/CodeSniffer/Standards/CakePHP

再度、phpcsを叩いて、インストールされている規約の中にCakePHPが追加されたかを確認。

[root@localhost hogehoge]# phpcs -i
The installed coding standards are PSR1, MySource, Squiz, CakePHP, PEAR, PSR2, PHPCS and Zend

CakePHPの規約が追加されたので、以下のような適当なサンプルコードを作って、簡単に動作確認。分かりにくいかもしれませんが、スペースでインデントしていますので、CakePHPの規約的にはNGな書き方です。

<?php
  echo 'test';

コードを設置したフォルダまで移動して、以下の通りに実行。エラーの旨がレポートされていますので、期待される動作としてはOKですね。

[root@localhost hogehoge]# phpcs --report=summary --report-checkstyle=phpcs.xml --standard=CakePHP --extensions=php .

PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            ERRORS  WARNINGS
--------------------------------------------------------------------------------
************/test.php           1       0
--------------------------------------------------------------------------------
A TOTAL OF 1 ERROR(S) AND 0 WARNING(S) WERE FOUND IN 1 FILE(S)
--------------------------------------------------------------------------------

ちなみに、実行したフォルダの中にphpcs.xmlが生成されるので、その中を覗くと、「インデントはタブを使えや、鬱陶しいのう。スペースは使うなよ!」と出力されています。

[root@localhost hogehoge]# cat phpcs.xml 
<?xml version="1.0" encoding="UTF-8"?>
<checkstyle version="1.4.5">
 <file name="************/test.php">
  <error line="2" column="1" severity="error" message="Tabs must be used to indent lines; spaces are not allowed" source="Generic.WhiteSpace.DisallowSpaceIndent.TabsUsed"/>
 </file>
</checkstyle>

参考:
http://masutaka.net/chalow/2011-12-30-3.html

以上

Windowsのマルチモニタで便利なカベナシ

作業環境のディスプレイがどんどん増殖しているのですが、とうとうメインのLet's Noteに3台のディスプレイをつなぐ状態になってしまい、計4台で日々の仕事をしている状況です。

で、「画面が広くなった。めっちゃ楽やわ」というのも束の間、別の問題が…。ディスプレイが2台、3台までならWindows標準のディスプレイ間移動の使い勝手を許容できていたのが、4台ともなると流石にマウス移動だけでも半端でないストレスがかかるようになってきた。何とかしないと逆に効率があがらないわ、と思っていたところに、以下のソフトを発見した。

カベナシ
http://tak.mys-web.net/software/kabenashi.html

これはマジで素晴らしいソフトです。他のマルチディスプレイ支援のソフトを2つほど試したのですが、このソフトがダントツ。

まずは軽い。安定している。まだ使い始めたばかりですが、今のところは全くストレスなしです。

次に、Windowsのマルチディスプレイの配置の通りに上下左右に移動できるのはもちろん、上端に行ったら下端にワープ、右端に行ったら左端にワープ、といった、人間の感覚に沿った移動を実現しているのが素晴らしい。実際の配置通りにWindows上でディスプレイを配置しても、マウス移動が実際の配置に沿った動きをしないと直感的に使いにくいのですが、このソフトはその手の直感に逆らった使いにくさが全くない。

という訳で、しばらくこのソフトのお世話になりそうです。こういう素晴らしいソフトを提供していただける方に感謝。

以上

iPhone5のWiFiが切れまくる

タイトルの通り、iPhone5WiFiがやたら切れまくって困っています。

当初は無線ルータのせいだろうと高を括っていたけど、今のところ、2種類のルータ&2つの異なる場所(つまり、2x2の4種類のシチュエーション)で試してみてもブチブチ切れまくる。

試した無線ルータは、

ルータA
IEEE802.11a/b/g
aは5.2GHz帯、b/gは2.4GHz帯
WPA-PSK(AES/TKIP)ほか対応

ルータB
IEEE802.11n/g/b
2.4GHz帯
WPA2-PSK(AES/TKIP)、WPA-PSK(AES/TKIP)ほか対応

※具体的な製品名を出したほうがよいのだろうけど割愛

試した場所を、場所A、B(どちらの場所でも無線ルータから4m圏内で試した)とすると、

  • 程度の大小はあれど、どのシチュエーションでも切れる。
  • ルータBの方がルータAより切れにくい。
  • 場所A&ルータBで、固定電話(親機子機間がワイヤレス)の電波がWiFiに干渉しにくいように距離を十分開けるとかなり切れにくくなったが、それでもたまに切れてしまう。
  • 無線ルータの真ん前で試しても、切れるときは切れる。
  • 一度切れると、iPhone5側のWiFiをOFF/ONしないと、WiFiの接続が復旧しない。
  • ノートPC、iPad(初代)、iPod touch(4世代目)は、どのシチュエーションでも無問題。

まあ、普通に考えると、iPhone5側に何らかの問題があるのだろうな。

で、まだまだ情報も少ない中、以下のような報告を記事を見つけた。
http://blog.livedoor.jp/sumahoreview/archives/17886281.html

一部抜粋すると、

1.WiFiの接続速度が低下する問題。5GHz帯と2.4GHz帯の両方で発生しており、どうやら接続の際の暗号で「WAP2」を選ぶと速度が落ちるようです。

2.もう一つは完全にWiFiが繋がらないという報告で、これは上記とは全くの別問題っぽいです。これについてはまだ詳細は分かっていません。

なお、アップルのシニアエンジニアに直接話した方の報告によると、1の不具合についてはソフトウェア、2についてはハードウェアの問題である可能性が高いとの事です。

1ならいつパッチが出るのかの問題になるし、もし2ならハード交換以外に方法はないのか、と。

なお、このサイトで紹介されていた、
http://www.chipmunk.nl/klantenservice/applemodel.html/
という、シリアルナンバーからハードウェアの個体情報を調べるサービスを使って私のiPhone5の個体情報を確認すると、「WiFiに不具合が多いと噂される」個体と比較して、「Production week」は微妙にずれていたが「Factory」はビンゴ。

無線ルータを買い換えれば解消する問題であれば買い換えるのもやぶさかでないが、どうもそれだけでは解消しそうにないので、どうしようという感じですが、ま、とりあえずアップルに電話だな。

以上

Windows7の起動の高速化

Windowsを使いこんでいくと、どんどんとOSの起動に時間がかかるようになってくる。
購入時のサクサク感はどこへやら、起動してしばらくはディスクアクセスが続いて「おい!いつ終わるねん!」状態になってしまう。

その解消方法についてのメモ書き。というか、解消のために参考にしたサイト。
起動の高速化だけでなく、全般的な高速化の参考になります。

やってみたらめちゃ早くなったWindows7の高速化術
http://blog.livedoor.jp/jumpin_yuk81/archives/51734579.html

Windows XPの起動時の長いディスクアクセスは、Windows Updateの履歴が溜まりすぎていたせいだった?!
http://zenryokuhp.com/blog/archives/2010/11/windows_xpwindo.php

windows 7を高速化する16の方法
http://blog.layer8.sh/ja/2011/05/05/windows-7%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%99%E3%82%8B16%E3%81%AE%E6%96%B9%E6%B3%95/

しかし残念ながら、自分のPCでは、起動時にディスクアクセスが続く現象は解消されませんでした(多少解消したかな?という程度)。何か要らんプロセスが動いているんだろうなあと思うけど、また時間のある時に調査する。

ただ、今回の対応で、全体的にパフォーマンスが改善されたように感じるし、シャットダウン時に時間がかかっていたのが解消されたので、今回はとりあえずこれで良しとしておこう。

以上

エラー画面のカスタマイズ

メモ書き

app/Config/core.php

・
(前略)
・
	Configure::write('Exception', array(
		'handler' => 'ErrorHandler::handleException',
		'renderer' => 'AppExceptionRenderer',
		'log' => true
	));
・
(後略)
・

app/Lib/Error/AppExceptionRenderer.php

<?php
App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
	protected function _getController($exception) {
		$controller = parent::_getController($exception);
		$controller->layout = 'error';
		return $controller;
	}
}

後は、

layoutを変更したければ、
app/View/Layout/error.ctp
を編集すればよいし、

contentを変更したければ、
app/View/Errors/error400.ctp
app/View/Errors/error500.ctp
あたりを編集すればよい。

参考:
http://book.cakephp.org/2.0/en/development/exceptions.html

以上

DHCPによる動的IPから固定IPへの変更 on VMware Player

CentOS6 + GNOME on VMware Player4.0.4 で動的IPから固定IPに変更した際のメモ書き

まず、仮想 OS で NIC が eth0 ではなく eth1 として認識されるのでその対応。
eth1をコメントアウトして、eth0のATTR{address}をeth1のそれで書き換えてあげればOK。

以下「xx:xx:xx:xx:xx:xx」とか「**:**:**:**:**:**」はMACアドレス

変更前

[root@localhost sysadmin]# cat /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="**:**:**:**:**:**", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

変更後

[root@localhost sysadmin]# cat /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="**:**:**:**:**:**", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="**:**:**:**:**:**", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

で、OS再起動。

その後、GNOMEのメニューからネットワーク接続情報を書き換え、

「システム」→「設定」→「ネットワーク接続」→「有線」→「Auto eth0」を選択して「編集」をクリック→「IPv4のセッティング」

  • 方式を「手動」にする。
  • アドレスの箇所に、「アドレス」「ネットマスク」「ゲートウェイ」のIPを入力する(「アドレス」に設定したい固定IPを入力)
  • DNSサーバー」に所定のIPを入力する。
  • ドメインを検索」は「localdomain」を入力。

「ネットマスク」やら「ゲートウェイ」やら「DNSサーバ」やらに何を設定すればいいか分からない場合は、コンソールから
ifconfig
netstat -nr
あたりのコマンドを叩いて、情報を取得すればOK。

で、ネットワーク再起動

[root@localhost sysadmin]# /etc/init.d/network restart

ちゃんと意図した変更が反映されているかどうかは、前述のifconfigやnetstatなどのコマンドを叩いて確認すればよい。

参考:
http://futuremix.org/2011/08/esxi-centos-nic-eth0-eth1
http://blog.veryposi.info/server/server-setup/centos-dhcp-ip/

以上

ウェブルートを変えるなど

今更感ありますが、CakePHP2で、ウェブルートを変える際のメモ書き。

以下、CakePHP2.2.1の場合。

ドキュメントルートとなるディレクトリに、app/webroot/ に含まれるディレクトリやファイル一式を設置の上、設置したindex.phpを以下のように設定をすればよい。

(略)

/**
 * These defines should only be edited if you have cake installed in
 * a directory layout other than the way it is distributed.
 * When using custom settings be sure to use the DS and do not add a trailing DS.
 */

define('ROOT', DS . 'home' . DS . 'sysadmin' . DS . 'workspace' . DS . 'foo');
define('APP_DIR', 'app');
define('CAKE_CORE_INCLUDE_PATH', DS . 'home' . DS . 'sysadmin' . DS . 'workspace' . DS . 'foo' . DS . 'lib');

(略)

追加するのは下部3行のdefineの部分。コメント行の直後あたりで定義すればOK。

test.phpについても同様に定義すればOK。

参考:
http://book.cakephp.org/2.0/ja/installation/advanced-installation.html

以上