脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

メトリクス

oop

継承 ANDC 直接の子孫の平均数 AHH 継承ツリーの平均の深さ サイズと複雑度 NOP パッケージ数 NOC クラス数 NOM メソッド数 LOC コード行数 結合度 CYCLO 循環的複雑度 CALL メソッド当たりの呼び出し数 FONOUT ある特定のメソッドが呼び出す他のメソッド数

STUPID

良くないコードの兆候 Singleton (シングルトン) ※古典的なパターン Tight Coupling (密結合) Untestability (テスト不能) Premature Optimization (時期尚早な最適化) Indescriptive Naming (説明的ではない名前) Duplication (重複)

illuminate/database

私の携わったプロジェクトではORMが採用されないケースが多い。 メリットデメリットともにあるし、向き不向きもあるし、アレルギーを持ってる人がいたりするし、論争に興味もないのでそれ自体はいいのだけど、 たとえORMを使わない場合でも、クエリビルダだ…

リモートデバッグ開始のブックマークレット

xdebug + phpstorm で、リモートデバッグを開始するためのブックマークレット。 開始 javascript:(/**%20@version%200.5.2%20*/function()%20{document.cookie='XDEBUG_SESSION='+'PHPSTORM'+';path=/;';})() 終了(XDEBUG_SESSIONというクッキーを消してもい…

behatでラジオボタン選択

Minkにはどういうわけかラジオボタンのタスク(?)がない。 (behat-3.0.15, mink-1.7.0) 自分で作る必要がある。 作ってみた。英語は怪しい。

ウィンドウが画面外に出た場合

Alt+Space → M → カーソル or マウスぐりぐり

PhpStormランチャ

PhpStormから実行するスクリプトが環境変数を期待している場合、 PhpStormを起動するシェルで環境変数を設定する必要がある。 そして大抵それはプロジェクトごとに固有のものだったりする。 PHPバイナリだったり、BEHAT_PARAMS だったり。 環境変数を設定し…

PhpStormから日本語behat

Windows7 + PhpStorm-8.0.3 + behat-3.0.15 Behatを使い始めた。 多言語に対応していない PhpStorm(8, 9, 10) は、Behatの多言語に対応していない。 英語以外のステップは補完できないし、IDEからテストの実行すらできない。 2014-05-15 に issue が上がって…

テストに使えるドメイン名

hostsに書けば何でも使えはするのだけど、 RFCで使ってもいいよと定義されているものがある。 特に理由がないのなら、これに従っておくべきである。 RFC2606 Reserved Top Level DNS Names ドメイン .test .example .invalid .localhost ホスト example.com …

PDO::MYSQL_ATTR_READ_DEFAULT_FILE

pdo_mysql を libmysqlclient を使うようビルドした場合に使えるようになるPDOのクラス定数。 mysqlnd を使うようビルドした場合は存在しない。 なのでこれを使うようなコードは、定数が存在するかどうかを確認してからにしないと環境によってFatalが起きる…

iptablesによる透過プロキシ

メールサーバの移行の際に、DNS浸透の有無によって新旧サーバにメールが届くのを回避するために透過プロキシを使った。

Putty → OpenSSH のRSA鍵変換

ちょいちょいPutty形式の鍵を渡されることがあるのでメモ。 Putty → OpenSSH のRSA鍵変換 Putty形式の鍵は、秘密鍵と公開鍵が一緒になっている。 puttygen を使って、OpenSSH形式の秘密鍵&公開鍵に変換できる $ puttygen.exe $(cygpath -m ~/.ssh/hoge.ppk)…

SQLでのnull比較

カラムに null が入っている場合の比較は面倒なもの。 このような長ったらしいクエリになる。 col1 = val1 OR (col1 IS NULL AND val1 IS NULL) 比較データが 非null か null かによって、プログラムで生成するクエリを変えるという方法もある。 発行されるS…

cygwinインストールメモ

Win7 Pro 64bit Cygwin 64bit 2.2.0 2015-08-20

画面を広く

Windows10を試しに入れてみたものの、ウィンドウの余白がやたら大きく、 1280x800 のノートPCでは画面が狭くて辛すぎる。 GUIから変更する機能はなくなってしまった模様。 HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics タイトルバーの高さ、幅 Ca…

可変vmdkを固定vmdkに変換

vmware-vdiskmanager -r source.vmdk -t 2 dest.vmdk VBoxManage internalcommands sethduuid dest.vmdk 変換したうえで、uuidも変更している。

DateTimeでマイクロ秒

php

DateTimeはマイクロ秒を扱うことができるが、 コンストラクタ経由だと秒精度までとなってしまう。 だからこう作る。 $timeZone = new \DateTimeZone(date_default_timezone_get()); $dt = \DateTime::createFromFormat('U.u', microtime(true)); $dt->setTim…

Windows7 で Nexus S のchromeをデバッグ

ドライバを入れるだけでいいとのことだけど、それだけではChromeから認識されなかった。 最新の adb.exe を使うと認識できたのでメモ。

Unable to connect to system D-Bus

Error: Unable to connect to system D-Bus (1/3): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory VirtualBoxを 4.3.12 → 4.3.30 に上げたら発生した。 ホストはWin7、ゲストはCentOS 6.7。 GuestAddition を動…

NOT NULL で DEFAULT なしのカラムにデータが入れられる

ことがあって混乱した。バージョンや設定によるのかな? warningを吐きつつINSERTできる環境と、エラーで止まる環境がある。 int カラムに '' を入れようとした場合でも、0 が入ったりする。 MariaDB-5.5.33 は入る MySQL-5.6.25 は入らない これは一度調べ…

VirtualBoxのディレクトリ共有機能の代わりにSambaを使う

VirtualBoxのディレクトリ共有機能はとても遅い。 代わりにSambaを使うメモ。 メリット ゲスト側からのアクセスが早くなる ゲスト側でパーミッション設定ができるようになる ゲスト側でのUT、カバレッジ出力が劇的に早くなる デメリット ホスト側からのアク…

SimpleXMLのバグ #66084 の影響

とあるAPIから返されたXMLをparseしたところ、環境により結果が違っていた。 どうも、Bug #66084 の修正が影響しているらしい。 この修正は php-5.6.11, php-5.5.27, php-5.4.28 で取り込まれている。

composerで、ライブラリを新しく追加する

Symfony の http-foundation の 2.7.x を追加する例。 composer.phar require "symfony/http-foundation:~2.7" -vvv ライブラリがダウンロードされ、 composer.json, composer.lock が更新される。

Smarty3.1はまだ名前空間に対応してない

久しぶりにSmartyを使うプロジェクト。 初めて3系(3.1) を使ったのだけど、テンプレートで名前空間を use で省略することができない。 フルでクラス名を書くか、別名で対象オブジェクトをassignするという、 ちょっと残念なコードにならざるを得ない状態。 …

phpunitが遅い

PHPUnitが遅い カバレッジを出力しているわけでもないのに、phpunitの動作が遅い。 調べたのでメモ。 phpunit 4.7.5 phpunit/php-code-coverage 2.0 CentOS 6.5 ディスクが遅い環境

CakePHP3のDBマイグレーション

Phinx を使っている。 これは既存DBから差分を抽出する機能を持っていない。 つまり、マイグレーションの内容は手で書く必要がある。 この点はCake2時代の CakeDC Migration プラグインや、Symfony2に劣っている。 Phinx の記述方法自体はシンプルでわかりや…

Cake2 で一般ユーザと管理ユーザのテーブルが違う場合

CakePHP2 で、一般ユーザと管理ユーザのDBテーブルが違う場合

CakePHP2のi18n

CakePHP2 の国際化機能を初めて使ったのでメモ。 Cake2 の i18n は、gettext に倣っている。 gettext を知っていればとくに違和感なく使える gettext, php-gettext 拡張がなくても動作する __(), __d() 等のCake専用関数が設けられていて、php-gettext とほ…

mysqldump

export フルダンプ mysqldump -uuser -p dbname --single-transaction --order-by-primary --quick --quote-names > dump.sql レコードのみ mysqldump -uuser -p dbname --no-create-db --no-create-info --single-transaction --order-by-primary --quick -…

GNU gettext

php

GNU gettext は、ソフトウェアの国際化のためのライブラリ・コマンド群。 大まかな流れとしては以下のようになる ソース中から多言語対応すべき文字列を抽出 (POT作成) gettext コマンド。 それをもとに各言語用に対訳ファイルを作成 (PO作成) msginit コマ…