2012年3月20日火曜日

androidでfragment理解

またしても技術ネタです。

androidです。

でも今回は手抜きです。

androidでfragmentを理解するためのリンクまとめ

自分がアプリ作ってて参考にしたリンクをまとめただけです。
おそらくブログにリンク貼るより見栄えがいいので。。

ではまた。

2012年3月11日日曜日

【PHPUnit】スケルトンのカスタマイズ

最近珍しく技術ブログを書いてます。

今回はPHPUnitのカスタマイズです。

phpunit --skeleton-test
でテストファイルの雛形を作ってくれますが、 getterとかsetterとかのテストって

  1. 変数に値入れる
  2. setterで変数をset
  3. assertEqualsで変数の値とgetterの値を比較

ですよね。まぁただデータを保持するだけのクラスのテストがいるかは分かりませんが。

それはさて置き、PHPUnitを使うのに必要なファイルはほとんど(全部?)PHPで書かれていました。
(phpunitのコマンドも!!)

なのでいくらでもカスタマイズできます。

今回はスケルトンで作成されるファイルをカスタマイズします。

修正するファイルは
PHPUnit/Util/Skeleton/Test.php
PHPUnit/Template/IncompleteTestMethod.tpl.dist
この2つです。

IncompleteTestMethodはスケルトンクラスのテストメソッドのテンプレートです。

public function test{methodName}(){
}
のようにtestメソッドが定義されています。
Test.phpで中括弧の部分を置換しています。
オレオレテンプレートですね。

なのでこの2つのファイルを書き換えればスケルトンを作った時に自分の好きな形式で作成することができます。

Test.phpの一部を
$var = array(
    "methodName" => ucfirst($mothod->getName())
);
if(substr($method->getName(), 0, 3) == "get" || substr($method->getName(), 0, 3) == "set"){
    $var['comment'] = '// set value manually';
    $var['initProcess'] = '$_value = ""';
    $var['setProcess'] = '$this->object->'."set".ucfirst($substr($method->getName(), 3)).'(_value);';
    $var['assertProcess'] = '$this->assertEauals($_value, $this->object->'."get".ucfirst(substr($method->getName(), 3)).'());';
}else{
    $var['comment'] = '// Remove the following lines when you implement this test.';
    $var['initProcess'] = '$this->markTestIncomplete("This test has not been implemented yes.");7;
    $var['setProcess'] = "";
    $var['assertProcess'] = "";
}
$methodTemplate->setVar($var);


IncompleteTestMethodの一部を

public function test{methodName}()
{
    {comment}
    {initProcess}
    {setProcess}
    {assertProcess}
}

こんなふうに変えるとgetter/setterの場合に変数の初期値以外雛形を作ってくれます。

もっと上手い例を挙げられればよかったですね。

ではでは

2012年3月9日金曜日

github初コミットと楽天の試験問題について

久しぶりにブログ書いてます。

やりたい事がいっぱいあって時間が足りないです。

最近gitにはまっていて、仕事でも無理やり使っているのですが、
ついにgithubにコミットしました。アカウントだけは前から作ってたんですけどね。

といっても大それたプロジェクトを立ち上げたわけでもなく、
書いてみたってレベルのものです。

丁度会社の同僚に面白い問題を教えてもらったので、そのソースを上げました。

その問題はこちら

楽天の入社問題らしいのですが、いやー



解けなかった!!



普通に答えをググってしましました。
まぁ普通に見つかりました。

こちらのブログに丁寧な説明と一緒に載っていました。

馬鹿正直にforeachで解こうとしてましたが、一般項を考えると簡単に解けるんですね。
アルゴリズムって大事。

で、githubに上げたソースなのですが、全く同じ物を上げても意味がないかと思ったので、
php版を上げました。

それがこちら



ちゃんと見れるのかな。。?

class F{
    private static $cache = array();
    public function __construct(){
        self::$cache;
    }

    public function f($num){
        if(array_key_exists($num, self::$cache)) return self::$cache[$num];
        if($num < 1) return 0;
        $res = $this->f($num - 3) + $this->f($num - 2) + $this->f($num - 1);
        if($num < 4) $res += 1;
        self::$cache[$num] = $res;
        return $res;
    }
}

$f = new F();
print_r($f->f(100));

最近phpでstaticな配列が作れると知りました。


でも、phpだと



浮動小数点表示になっちゃう!!



pythonも初めて触りましたが、ちゃんと整数で表示してくれるんですね。
素晴らしい。


githubに上げたソースをブログにうまく表示できないかなー