脳みそスワップアウト

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

Windows10のセーフモードは厄介

Windows10のお試し中なのだけど、 Win7で使っていた常駐ソフトがWin10では動かないようで、起動後1分くらいでフリーズしてしまう。 こんな時、従来ならセーフモードで起動して、 問題となるソフトのアンインストールもしくはサービスの自動起動停止をしてい…

php5 + JSON-C では JSON_BIGINT_AS_STRING が効かない

phpには、JSONを扱うためのjson拡張が同梱されている。(ext-json(JSON_parser)) しかしこのソース中の以下の一文が問題で、各種Linuxディストリで配布できないことになっている。 ext/json/JSON_parser.c The Software shall be used for Good, not Evil. Bu…

浮動小数点は安全じゃない

php

浮動小数点数は誤差が出て安全じゃないから、重要な計算の時は使っちゃいけないよという話。 PHP に限った話ではなく、コンピュータ全般。 若手エンジニアからこんな質問がきた。 「5761800 を 小数切り捨てしたら 5761799 になっちゃった!」

リダイレクトは絶対URI?

RFCによると、絶対URIらしい RFC2616 (HTTP/1.1) で、 「HTTPのリダイレクトレスポンスでは、Location は絶対URI(absoluteURI)で書かなければならない」 というのが定められているけど、これはあんまり守っていない。

BASEトランザクションとCAP定理

BASEトランザクションとCAP定理 クラウドや分散システムで使われる用語 BASEトランザクションとは Basically Available 可用性が高く常に利用できることを重視。 楽観ロックやキュー。 Soft State あるノードの状態はその内部に埋め込まれた情報によって決ま…

ブライスの法則 (Bryce)

Good Systems Design + Good Programming = Great Systems Good Systems Design + Bad Programming = Good Systems Bad Systems Design + Good Programming = Bad Systems Bad Systems Design + Bad Programming = Chaos

メトリクス

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するという、 ちょっと残念なコードにならざるを得ない状態。 …