iakioの日記

2011-12-30

2011年はこんな年でした

| 02:03

今年グっときた動画。

2010年

2009年

2008年

2011-12-15

Windowsでphpunit --colors

| 00:52

あるいはコマンドプロンプトANSIカラーを表示させる方法。

Windowsコマンドプロンプトphpunit --colorsすると、

f:id:iakio:20111216003756p:image

こんな感じになります。ゲンナリです。グリーンにならないならテストに対する意欲も半減です。コマンドプロンプトに色を付けるには、SetConsoleTextAttribute()とかいうWin32APIを使う必要があるらしいです。で、調べてたら、

WindowsのコマンドプロンプトでもANSIカラーを使いたい「wac」 - MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ

こんなのを見つけました。これはANSIエスケープシーケンスを読みこんでSetConsoleTextAttribute()を呼び出してくれるもの。なんですが中を見てみたら結構手抜きの実装で、phpunit --colorsの出力では上手くいきません。

なんでこれを直してやろうかと色々試行錯誤していたら、別の方法を発見しました。

f:id:iakio:20111216004334p:image

パイプでwacじゃなくて単にcatに渡してやればいい。このcatはmsysのcat(\msys\1.0\bin\cat.exe)です。msysGitを使ってればそっち(\Program Files\Git\bin\cat.exe)でも良いと思います。

どこのレイヤでそうなってるのかよくわからないような、当たり前といわれれば当たり前ような解決でした。

2011-12-12

TDD Boot Camp 札幌 2.3に参加してきた

| 22:24

お題はボーリングのスコア計算システムPHPチームで参加してきました。

ドキュメントを見ようとしたら、PHPUnitのサイトに全然接続できなくてどうしようかと思いましたが、githubでドキュメントのソースのxmlを見ながらどうにか頑張りました。

@shuji_w6eからもお誉めの言葉をいただき、半日Emacsと格闘したかいがありました。

よかったこと

  • PHPUnitで試してみたかったことが色々できた

テストメソッド名は日本語で書いてみました。--testdoxで出力する場合、英字の大文字小文字変換を行なうところで若干文字化けがあったため、先頭は英字という命名規則でやりました。testdoxを使わないのであれば問題無いと思います。

@testアノテーションも使ってみましたが、メソッド名にtest付けた方が速いかなという気もしましたw。@expectedException、@dataproviderアノテーション、markTestIncomplete()は普通に便利。assertThat()も使ってみたかったんですがドキュメント見るのしんどくて断念。

  • 簡単にテストを実行すること。見やすく書きやすいテストケースを書くことが重要ということを再認識できた

反省点

  • 終了直前までボウリングスコア計算のルールを勘違いしていた。まだまだ実装するつもりだったのに気付いたら機能テストが通っていた
  • 機能テストが通った時点で満足したのと若干集中力が切れたのでニコ動とか見てた

他のチームの振り返りを聞いている途中でやっと何故テストが通ったのかきちんと頭が整理できました。振り返りの順番が最初だったら説明できなかったかもしれませんw

ちなみに見ていた動画はこちら

2008年の角谷さんの講演。2/3からボウリングスコア計算のライブコーディング。見所満載です。


その他

  • Behatやってみたい
  • JavaScriptやってみたい
  • pgTAPやってみたい
  • SmalltalkとTDDBCの相性は異常
  • Perlのテストコードも見てみたい
  • 関数型言語のテストコードも見てみたい
  • SCMのイベントもできそうじゃない?

他にも色々ありましたが気が向いたら書きます。

2011-09-14

deliciousで幸せになれる呪文

| 21:21

一時期は存続が危ぶまれたhttp://www.delicious.com/ですが、自分用のブックマークというよりは、何か調べごとがある時にはとても重宝しています。

例えばCakePHPについて調べようと思った場合、それとは別の軸のタグも使って検索するようにしています。

http://www.delicious.com/tag/cakephp+bestpractice

とか。

プログラミング関係で使えそうなタグはこんな感じ。

  • bestpractice
  • patterns
  • tips
  • hints
  • tutorial
  • reference
  • hack

あとタイトルの元ネタ - もみあげチャ〜シュ〜 : xvideosで幸せになれる呪文 - ライブドアブログ

2011-06-29

fork()した子プロセスが同じrand()を返す

| 20:31

<?php
for ($i = 0; $i < 5; $i++) {
    if (pcntl_fork() == 0) {
        echo rand(0, 100), "\n";
        exit;
    }
}

これはばらばらの値を返すけど、

<?php
echo rand(0, 100), "\n";
for ($i = 0; $i < 5; $i++) {
    if (pcntl_fork() == 0) {
        echo rand(0, 100), "\n";
        exit;
    }
}

と、親プロセス側で先に一度rand()が呼ばれていると、子プロセスが出力するrand()はすべて同じになってしまう。rand()は最初に呼ばれた時に自動的にsrand()されるので、同じseedが使われているということか。