SplFileObject で標準入力を扱うには
http://d.hatena.ne.jp/hnw/20090523
より、NoRewindIterator でラップする。
<?php $inputs = new NoRewindIterator(new SplFileObject("php://stdin")); foreach($inputs as $line) { print $line; }
PHP の動作環境が 32bit か 64bit かを確認する
確認する方法はINTサイズを見るのが手っ取り早い。
PHP_INT_SIZE 定数が 4 の場合は 32bit、8 の場合は 64bit となる。
CakePHP2 のモデルで PostgreSQL のシーケンスを指定する方法
CakePHP では、PostgreSQL の主キーに設定するシーケンス名がデフォルトと異なる場合、Model::sequence に書くことで対応できるのだが、CakePHP 2.1 から「スキーマ名 . シーケンス名」という書式が前提になっていた。
<?php class User extends AppModel { // 「スキーマ名 . シーケンス名」で指定する public $sequence = 'public.users_custom_seq'; }
PHP の単体テストでファイルシステムのモックを使う
単体テストでは外部リソースへのアクセスは行わないのが基本。もちろんファイルシステムも含まれる。テスト対象コード内にある外部リソースへのアクセス処理は、アクセス先を「モック」に差し替えることで対応できる。
なるべく設計レベルでモックへの差し替えしやすくするべきではあるが、標準の関数を呼び出している部分まで対応するのはなかなか難しい。
そんなとき PHPUnit のマニュアルの中に「ファイルシステムのモック」という記事を発見。
vfsStream というライブラリを使うと仮想のファイルやディレクトリに対して、追加・更新・削除を行うことが出来ることが分かった。
PHPUnit のマニュアルの通りにインストールすると vfsStream 0.12.0 がインストールされた。もし最新の vfsStream (>= 1.0) を利用したい場合は、 https://github.com/mikey179/vfsStream/wiki/Install に手順が書かれてあり、Pear ではなく Composer を使うことになる。
vfsStream はストリームなので、単なるファイルのテストだけでなく、ネット上の url をたたくような処理のテストにも利用できそう。
参考:
http://1000g.5qk.jp/2013/03/27/vfsstream-%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/
https://gist.github.com/okinaka/5811348
vfsStream 未対応な関数
把握している中では以下の通り(他にもあるかもしれません)
- chgrp()
- chmod()
- chown()
- glob()
- realpath()
- touch()
- move_uploaded_file()
known_hosts の強制更新
ssh のコマンド実行時に -o オプションを付けて known_hosts を強制的に更新する。
Chef などで自動で known_hosts を更新したい場合に使える。
$ ssh -o "StrictHostKeyChecking=no" user@hostname
Vagrant (1.0 系) のベースBOX作成手順 (Debian wheezy)
Vagrant のベースBOX 作成手順をネットで探すとたいていの場合、 veewee を使用していますが、無理に使用する必要はありません。
全自動化できれば便利ではあるのですが、個人的には手作業で作成するほうが手軽で気に入っています。
http://d.hatena.ne.jp/okinaka/20110805/1312474847
で一連の流れはつかめていましたが、Debian wheezy リリースに伴い、Vagrant のベースBOX を久々におさらいしてみました。
なお Vagrant のバージョンは、1.0.7 です。(1.2 系はまだ試していません。)
VirtualBox の画面から仮想マシンの新規作成
名前 | debian-wheezy |
---|---|
OS | Linux |
バージョン | Debian(64bit) |
メインメモリ | 512 MB |
チップセット | PIIX3 |
オーディオ | 無効 |
USB | 無効 |
ネットワーク | NAT |
ストレージ(HDD) | 80GB (動的拡張VMDK形式) |
ストレージ(CDROM) | インストールDVDイメージを割り当て(インストール時のみ) |
ストレージのコントローラの設定で、「ホストのI/Oキャッシュを使う」にチェックを入れると、アクセスが格段に速くなります。物理ディスクには非同期に書き込まれることになるので、信頼性は落ちますが、テスト環境構築が目的なのでパフォーマンスを優先します。
インストール後の作業
root でログインして、Vagrant 仕様にセットアップします。
パッケージ更新
今回はネットワークインストール版を使用したので、最新の状態になっているため不要でした。
ビルド用パッケージ
Chef や VirtualBox Guest Addition インストールのために必要なパッケージをインストール。
$ apt-get install curl ruby ruby-dev build-essential linux-headers-amd64
Chef
Chef のインストール。今回は、chef10.x 系を利用したかったためバージョンを指定しています。
$ gem install -v 10.26.0 chef --no-ri --no-rdoc
Guest Addition
VirtualBox の [デバイス]-[GuestAdditionインストール]を選択する。
GuestAddition のインストール
$ mount /dev/cdrom /mnt $ bash /mnt/VBoxLinuxAdditions.run
パッケージ削除
VMサイズ削減のため、可能な限り不要なパッケージは削除します。
sudo
パスワードなしで sudo できるようにします。
コマンド:
$ visudo
設定内容:
%sudo ALL=(ALL) NOPASSWD:ALL
openssh
openssh サーバの設定を変更。ログイン時間が短縮されるらしいです。
$ echo 'UseDNS no' >> /etc/ssh/sshd_config
vagrant ユーザ
vagrant ユーザに、sudo 権限を付加、ssh 公開鍵認証でログインできるようにします。
$ gpasswd -a vagrant sudo $ mkdir /home/vagrant/.ssh $ chmod 700 /home/vagrant/.ssh $ cd /home/vagrant/.ssh $ curl 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' > authorized_keys $ chown -R vagrant:vagrant /home/vagrant/.ssh