配列からホワイトリストで指定したキーの値のみ抽出する

PHP

ポストされたデータがのなかで指定したパラメータの値のみの配列が欲しいことがよくある。foreach() や array_filter() とかでぐるぐる回さなくても良い方法があった。 http://blog.pixelastic.com/2011/05/11/whitelisting-keys-array/ より

Git コマンドでファイル名の大文字小文字を変更する

git mv サブコマンドで "-f" オプションをつけるとよいらしい。 git mv -f Readme.md README.mdhttp://mironal-memo.blogspot.jp/2013/06/git-rename.html

fputcsv() で作成しする CSV ファイルの改行コードを CRLF にする

PHP

Linux などは、fputcsv() の改行コードが LF になってしまうのだが、 CRLF が望ましい場合が多いので困る。 以下のようにストリームフィルタを使う例が紹介されていた。http://stackoverflow.com/questions/12722894/how-can-i-change-the-line-endings-used…

vagrant 上の CentOS7 で private_network 設定に失敗する

Vagrant 1.6.3 から CentOS7 を起動するときの設定(Vagrantfile)で config.vm.network :private_network, ip: "192.168.33.10" と新しいNICの設定を追加すると、CentOS6 と比べてネットワーク周りが変わった関係で、vagrant 起動時のネットワーク設定が失敗…

Vagrant アップグレード後に vagrant box list が出来ない

Vagrant は、長らく 1.0 系を愛用していたが、1.4 がリリースされたことだし、そろそろアップデートしてみようかと思って試してみたところ、vagrant box (list|remove) サブコマンドがうまく動かないことが分かった。 $ vagrant box list base (virtualbox) …

PHP でディレクトリ以下を再帰的にファイル削除

PHP

RecursiveDirectoryIterator を使って削除。 isFile() || $item->isLink()) {…

Apache の DocumentRoot に共有フォルダを使った場合

Vagrant を使っていて VirtualBox の共有フォルダを DocumentRoot に設定することがよくあるが、 EnableSendFile offとすると静的ファイル読み込みが早くなってよいらしい。

SplFileObject で標準入力を扱うには

PHP

http://d.hatena.ne.jp/hnw/20090523 より、NoRewindIterator でラップする。

PHP の動作環境が 32bit か 64bit かを確認する

PHP

確認する方法はINTサイズを見るのが手っ取り早い。 PHP_INT_SIZE 定数が 4 の場合は 32bit、8 の場合は 64bit となる。

CakePHP2 のモデルで PostgreSQL のシーケンスを指定する方法

CakePHP では、PostgreSQL の主キーに設定するシーケンス名がデフォルトと異なる場合、Model::sequence に書くことで対応できるのだが、CakePHP 2.1 から「スキーマ名 . シーケンス名」という書式が前提になっていた。

Debian wheezy で rake の update-alternatives の設定がない

Debian wheezy で管理されたパッケージの中で ruby などの複数のバージョンが存在するコマンドは、update-alternatives コマンドで管理されているが、ruby1.9.1 パッケージのインストール後も rake はなぜか設定されていなかった。 ri や rdoc はあるのに…。…

PHP の単体テストでファイルシステムのモックを使う

PHP

単体テストでは外部リソースへのアクセスは行わないのが基本。もちろんファイルシステムも含まれる。テスト対象コード内にある外部リソースへのアクセス処理は、アクセス先を「モック」に差し替えることで対応できる。 なるべく設計レベルでモックへの差し替…

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/ok…

Migrations プラグインがサポートするデータベースは MySQL のみ?

https://github.com/CakeDC/migrationsCakePHP のデータベーススキーマの管理用に Migrations プラグインがある。 Migrations プラグインで残念なことは、CakePHP の Schema クラスがサポートしていないクエリはプラグイン内部 (CakeMigration クラス)で SQL…

PukiWiki 派生プロジェクト

Google Apps を使用したり、Redmine などでも Wiki が使えたりする関係で、新たに単独で Wiki サーバを立てることはなくなったが、今でも一部 PukiWiki を使用している。PukiWiki: http://pukiwiki.sourceforge.jp/Pukiwiki の開発が止まっていることに対す…

PHP で pkcs12 形式の SSL 証明書を pem 形式に変換

PHP

ApnsPHP でプッシュ通知するのにサーバ側にPEM形式の証明書が必要。 https://code.google.com/p/apns-php/wiki/CertificateCreation証明書を更新するたびに openssl コマンドを打つのも面倒なので、PHP プログラム内で作成できるようにした。ついでに秘密鍵…

vagrant init の第2パラメータでちょっと楽する

久々の Vagrant ネタ。Vagrantfile に ダウンロード先 URL (box_url) を設定しておくことで、 vagrant up 実行時にベースBOXが無かった場合は BOX を自動的にダウンロードしてくれるので、初回の vagrant box add が省略できて重宝している。複数人での開発…

CREATE OR REPLACE LANGUAGE をシミュレートする

PostgreSQL で plpgsql を利用するには CREATE LANGUAGE する必要があるが、複数回実行すると2度目からエラーになってしまう。 "CREATE OR REPLACE" 的なことはできないかどうかググったところ、そのものずばりがかかれてあった。http://wiki.postgresql.or…

CakePHP 2.x キャッシュファイルのパーミッション変更

cake コマンド実行するユーザと apache のユーザが異なる場合、キャッシュ周りでパーミッションエラーが発生してしまう。誰でも書込みできるように権限を設定するには、Cache::config() に "mask" というパラメータを追加してやるとよいらしい。 また、設定…

CakePHP 2.3.0 上の Migrations プラグインの注意

CakePHP 2.3.0 が正式にリリースしたのだが、 Migrations プラグインの master ブランチでは 2.3.0 は、未対応。公式な解決策としては、develop ブランチを使うといいとのこと。https://github.com/CakeDC/migrations/issues/107とりあえず master ブランチ…

CSSフレームワーク

Blueprint タイポブラフィーやプラグインシステムを備えオールマイティに活躍 http://www.blueprintcss.org/ TwitterBootstrap レスポンシブからモック作成まで汎用性が高く幅広い層から支持 http://twitter.github.com/bootstrap/ 960 Grid System http://9…

外部プログラムの呼び出し方法いろいろ

PHP

PHPで外部プログラムを呼び出すには exec() paththru() popen() proc_open() shell_exec() system() などの関数を使う。shell_exec() は、「実行演算子 バッククォート (``)」 のエイリアスでもある。popen(), proc_open() は、標準入出力をストリームとして…

hosts のパス

つい忘れてしまうのでメモ。Windows 7 の場合: C:\Windows\System32\drivers\etc\hosts

array_map() を使って配列のキー/値に対して処理する

PHP

実際には foreach を使えばいいだけの話だが、 array_map(), array_keys(), array_values() の 3つの関数を組み合わせると、配列のキーと要素に対して処理できる。例: 'valueA', 'b' => 'valueB'); $result = array_map(function ($key, $value) { return …

Chef の超簡単インストール

chef-solo や chef-client は、 http://www.opscode.com/chef/install/ のとおりワンライナーでインストールが完了する。(Windows 以外) curl -L https://www.opscode.com/chef/install.sh | sudo bash

CakePHP 2.3.0-beta を試す

CakePHP 2.3.0 ベータ版がリリースされたとのこと http://bakery.cakephp.org/articles/lorenzo/2012/10/28/cakephp_2_3_0-beta_releasedちょっとうれしいお知らせとしては、モデルで biginteger をサポートするとのこと。 PostgreSQL で試したところ、まだ…

vagrant package の注意点

OS Windows 7 (64bit) VirtualBox 4.2.2 Ruby 1.9.1 Vagrant 1.0.5 Windows 7 にて vagrant package で作成した BOX をベースに vagrant up すると、 共有フォルダ (v-root) が作成時の古い設定のままになっていて困った。 vagrant halt で VM を一旦停止 GU…

Vagrant 1.0.5 リリース!

VirtualBox 4.2 対応の Vagrant 1.0.5 がリリースされていました。 VirtualBox 4.2 + Windows 7 で問題なく動作しています。 http://www.vagrantup.com/VirtualBox 4.2.1 は、MacOS X 10.8 (Mountain Lion) 対応しているらしいので、そろそろ Mountain Lion …

Debian (squeeze) ヘッドレス環境で firefox を使う

Debian (squeeze) サーバで、X 環境の代わりに xvfb を使って、firefox を起動してみた。 (おまけでスクリーンショットも撮ってみた。)これをもとに、Selenium のテスト実行環境を用意しようと思う。必要なパッケージのインストール: apt-get -y install xv…