アーカイブ

‘Blog’ タグのついている投稿

mediatemple の serendipity から DotCloud の WordPress に

ネームサーバーの変更がだいたい浸透したっぽいので。切り替え後の 1st post です。

2007年くらいから mediatemple 上の serendipity で動かしていたこのブログですが、mt の不安定さ加減に辟易。コスト面の割りに合わない感じがすごい。

で、俺達の PaaS 代表 DotCloud にプラットフォームを変更、併せてツールも WordPress に。移行作業はフル RSS のインポートでいけた。ベタな手作業といえば serendipity で発行されたエントリ ID に合うように UPDATE をかけたくらい。

permalink を維持するための nginx の rewrite 設定とか諸々は追ってメモしていくつもり。

タグ: ,

『SR サイタマノラッパー』とコラボしました & 楽曲無料配信!

10月21日に発売される Wii® 専用タイトル「ノーモア★ヒーローズ2 デスパレート・ストラグル」に我々 The Riot 怒りの10代が数曲ほど BGM を提供しておりますが、その中でもアンセム的存在である楽曲「SLING SHOT」をなんと号泣メーンでおなじみ『SR サイタマノラッパー』クルーとコラボしちゃいましたよ!

いよいよ発売が10/21に迫ったWii®専用タイトル「ノーモア★ヒーローズ2 デスパレート・ストラグル(以下NMH2)」(発売元・マーベラスエンターテイメント)。そのゲーム中の最初の敵「スケルター・へルター」との戦いでBGMとして使われている「THE RIOT 怒りの10代」の曲「SLING SHOT」をモチーフに、映画「SR サイタマノラッパー」とのイリュージョンなコラボレーションが決定! その曲、「SS/SR」(「スリングショット/サイタマノライオット」)を「NMH2」の国内リリースを記念して、10/1から10/21までの期間限定で無料配信することになりました。作詞は入江悠監督と映画でもラップ監修をしている上鈴木兄弟が担当。HIP-HOPアレンジされた同曲に、MC IKKU(駒木根隆介)、MC TOM(水澤紳吾)、MC MIGHTY(奥野瑛太)、MC TEC(配島徹也)、TKD先輩(上鈴木伯周)らキャスト陣がラップを叩きこんでいます! この機会にぜひダウンロードしてください!
http://www.grasshopper.co.jp/nmh2sr/

発売日まで無料で配信しております。

そしてその10月21日は下北沢 GARDEN で2年ぶりの GhM イベント「HOPPER’S 4」が開催!もちろん SR クルーと共に出演!ヤバい!!革新的!!

そんな感じで諸々宜しくお願い致します。

タグ: ,

The door won’t open

「意思の will」にはなかなか気付けないので修業が足りない。

“will”で未来を念じているのは、人です。だから”will”は未来形であると同時に、「意志」という意味があります。
404 Blog Not Found:English – can の未来形

タイトルくらいわかりやすいと良いんですが、流れの中でポッと出てくると戸惑ってしまう。
極々個人的な経験で言うと、「意思の will」特に「頑なに〜しようとしない」の「won’t」は個人よりも物体であるとかちょっとした集団のポリシーに使われてるケースに出会う。”PS3 won’t work!”とか”We won’t do that ~”とか。

いわゆる未来の will も中学くらいでは「be going to と同じだよ」という教わり方をした(よね?)わけですけど、実は細かい違いがある。という事は予備校で知った。

で、ここでアサマシです。
大学受験で散々ブッコんだ英語知識も大学生になってからと言うもの、ボロボロと抜け落ちてしまった。それをある程度戻すのに役立ったのがこの本。「if の省略形仮定法」とか久々に思い出せた。

総合英語Forest
posted with amazlet at 08.07.24
墺 タカユキ 石黒 昭博 桐原書店 売り上げランキング: 220

中学レベルから高校レベルまでの文法をザラっとすくっている内容。4色刷り。そして安い。各章が文法の形の解説で、基本→理解→応用のパターンがメイン。イラストをちょいちょい使ってるので、それも理解を助けてくれます。

ただ、しょーもない例文が多い。変にカッチョよくしてるのよか分かり易くて良いのかも知れないけど、ちょっと不満。あと大学に入った直後に出てるのも許せない。これが受験時期にあったら手元の文法リファレンスにしてた。ロイヤル英文法使ってました。懐かしい。

英文ブログとか読むには文法理解よりも語彙力が重要かなー。全然足りてない。
たまに堅めのコラムスタイルなブログを読む時には文法と英文解釈は必要に思える。

「英会話は単語だよ、単語!」みたいな事を言う人をみると「こやつめ、ははは」とか思ってたんですが、実際それは間違いなかった。

日本に来て半年のアメリカ人ゲームプログラマとゴールデン街で飲んだ事があって

俺「most Japanese が play する game は their friends が play してるヤツなんだよ」
彼「ah…モンハン?」

全然通じる。

タグ:

PHPフツウ

PHPサイキョウ

「rocks」でやった結果。

  • Results 1 – 10 of about 6,900 for “PHP rocks”

なるほど。
他はどうか。

  • Results 1 – 10 of about 36,900 for “Ruby rocks”
  • Results 1 – 10 of about 8,700 for “Python rocks”
  • Results 1 – 10 of about 1,580 for “Perl rocks”

Ruby 圧倒的過ぎるだろ。

その他。

  • Results 1 – 10 of about 10,100 for “C++ rocks”
  • Results 1 – 10 of about 9,540 for “Java rocks”
  • Results 1 – 10 of about 973 for “C# rocks”
  • Results 1 – 10 of about 496 for “JavaScript rocks”

C++ と Java が大体同じくらいで Python より多い。意外。

ついでに「rules」でもやってみた。

  • Results 1 – 10 of about 24,000 for “PHP rules”

すげえ!これは期待出来る!

  • Results 1 – 10 of about 31,700 for “Ruby rules”
  • Results 1 – 10 of about 9,690 for “Python rules”
  • Results 1 – 10 of about 5,570 for “Perl rules”

Ruby 強すぎ。

おまけ。

  • Results 1 – 2 of 2 for “UnrealScript rocks”
  • Results 1 – 3 of 3 for “UnrealScript sucks”
タグ: ,

PHPMock を触ってみた

『次世代 Mock Object フレームワークの雄』として一部から熱く注目されている(と思いたい) PHPMock ですが、ちょろっとテストコード読んだくらいで触った事が無かったのでトライ。

ちなみに PHPMock のテストコードは PHPSpec で書かれている。個人的には残念な書き味というか、読みやすくない。PHPUnit バンザイ。

ただ PHPUnit の Mock はもうちょっと融通利かせてもらえると有難い。という所で PHPMock はどうか。

Let’s do this.

PHPMock にはまともなドキュメントが一切無い。tgz 玉もないので Google Code からチェックアウトするしかない。specs ディレクトリにテストコードがあるのでこいつを見れば大体の使い方はわかる。test as document を地で行く感じだ。メソッド名は RSpec の mock/stub に似ているというか似せてある。

テストコードはこんな感じ。ダウンロードはこちら。

■ test/ProductServiceTest.php

<?php
define(DEMO_ROOT, dirname(dirname(_FILE_)));
require_once DEMO_ROOT . '/phpmock/src/PHPMock.php';
require_once DEMO_ROOT . "/lib/ProductService.php";
require_once DEMO_ROOT . '/lib/IDBConnection.php';
require_once DEMO_ROOT . '/lib/Publisher.php';

class ProductServiceTest extends PHPUnit_Framework_TestCase
{
    const PRODUCT_ID = 1234;

    public function test_プロダクトを全件取得する ()
    {
        $mockDb = PHPMock::mock('DBConnection');
        $mockDb->shouldReceive('execute')
               ->withAnyArgs()
               ->once()
               ->andReturn(
                 array('name' => 'NINJA GAIDEN 2')
               );
        $this->service->setDBConnection($mockDb);
        $this->assertNotNull($this->service->getAll());
    }

    public function test_プロダクトIDからパブリッシャの名前を取得する()
    {
        $mockPublisher =
            $this->createPublisherMock(self::PRODUCT_ID);
        $this->service->setPublisher($mockPublisher);
        $publisher = $this->service->
                getPublisherByProductId(self::PRODUCT_ID);
        $this->assertEquals('Activision', $publisher['name']);
    }

    public function test_クイックモックでfindAllしてみる()
    {
        $mockPublisher = PHPMock::mock('Publisher',
                            array('findAll' => array()));
        $mockPublisher->findAll();
        $this->assertTrue($mockPublisher->verify());
    }

    public function test_引数がマッチしなければ例外を投げる()
    {
        $mockPublisher =
            $this->createPublisherMock(self::PRODUCT_ID);
        try {
            $mockPublisher->findByProductId(9999);
        } catch (Exception $e) {
            return;
        }
        $this->fail("An expected exception has not been raised.");
    }

    public function test_PHPUnitのMockObjectはこんな感じ()
    {
        $mock = $this->getMock('DBConnection',
                array('execute', 'preparedStatement'));
        $mock->expects($this->once())
             ->method('execute')
             ->will($this->returnValue('aaaa'));
        $this->assertEquals('aaaa', $mock->execute("sql statement"));
    }

    public function createPublisherMock ($productId)
    {
        $mock = PHPMock::mock('Publisher');
        $mock->shouldReceive('findByProductId')
             ->with($productId)
             ->andReturn(
                 array('name' => 'Activision')
             );
        return $mock;
    }

    public function setUp ()
    {
        $this->service = new ProductService;
    }

    public function tearDown ()
    {
    }
}

で、このコードは実行すると「test_引数がマッチしなければ例外を投げる」でコケる。
PHPMock_Expectation#matchArgs に問題があって

■ phpmock/src/PHPMock/Expectation/Expectation.php

    public function matchArgs(array $args)
    {
        if (empty($args) && empty($this->_expectedArgs) && is_array($this->_expectedArgs)) {
            return true;
        } elseif ($args == $this->_expectedArgs) {
            return true;
        } elseif ($this->_expectedArgs == true) {
            return true;
        } elseif ($this->_expectedArgs == false && empty($args)) {
            return true;
        }
        return false;
    }

「$this->_expectedArgs == true」これだと $this->_expectedArgs に値が入ってれば true になっちゃうという良く話題になるアレです。正解は「$this->_expectedArgs === true」これですな。

上のコードで使っている DBConnection はインターフェースで Publisher は空っぽのクラス。
インターフェースに定義されているメソッドは PHPMock#_generateDefForMethods がよしなに実装してくれるので安心。PHPUnit の Mock Object だと定義したメソッドをイチイチ配列で全部ツッコまないといけない。

いわゆるスタブは無くて shouldReceive 一本になると思われる。
PHPMock#mock の第二引数に array($methodName => $returnValue) を与える事で簡単にモックが作れるのは好感。

■ まとめ

  • まだまだ挙動が怪しい点はある
  • それでも PHPUnit の mock よりは楽できる
  • テストコード内でザクザクモック作りたいなら MockInterceptor よりオススメ
タグ: ,

[RSpec] xit を知らなかった俺涙目

RSpec 使って開発してて、ちょっと一手戻りたい時に it 節というか example をバコっとコメントアウトしてたんですけど。

■example_group_methods.rb

      # Use this to temporarily disable an example.
      def xit(description=nil, opts={}, &block)
        Kernel.warn("Example disabled: #{description}")
      end
      alias_method :xspecify, :xit

とびてー。

タグ:

炎上必至のフレームワーク

TS3A0012Uploaded with plasq‘s Skitch!
タグ: ,

The New Gamer JP

先日 twitter で The New Gamer というブログの存在を知る。

単純なゲームレビューサイトはちょっと風味が違う。
ゲームを題材にパースペクティヴを効かせたエッセイが多い。更新頻度はそんなに高くない。

ヘッドライターが1人とサポートライターが2人くらいで運営しているようだ。
サポートライターはレビュー中心。

ヘッドライターの書くエントリは構成がきれいで、言い回しもカッコいい。
それでいて文章から滲み出ているキチガイっぷりがたまらない。大好きだ。

The New Gamer JP

タグ: ,

[参加してます] NO MORE HEROES リミックスサントラ DARK SIDE

NO MORE HEROES のリミックスサントラが 3/14 に発売になります!

今回は、おそらくghm史上、最高にカオスな一枚に仕上がっていると笑顔で断言します!

ghmサウンドチームの高田雅史、福田淳、吉岡たく Squad、6955、THE RIOT-怒りの10代-、bloco 23、The Outer Rim Produced by Norihiko Hibino、 HONDALADY、NEUTRINOといった、バラエティ豊かな面子が大集結!

「NO MORE HEROES」リミックス発売決定! – 新高円寺百景

ゲーム作家・飯田和敏率いる「THE RIOT-怒りの10代-」のギターとして本作品に参加してますので、どうぞご贔屓に!!

NO MORE HEROES(ノー・モア・ヒーローズ) 特典 メタル“ビーム・カタナ”アクセサリー付き

タグ: ,

[俺メモ] Safari のショートカットキーを変更する

Safari のタブ選択ショートカットキーはデフォルトが「⌘{ / ⌘}」なんですが、Dvorak-Qwerty⌘ の環境だとイマイチ動いてくれない。

で、これを変更する方法をたまに忘れるので例によって俺メモ。
Safari に限った事ではなくて Mac OS X のアプリケーション全体で使えます。

  1. 「システム環境設定」 → 「キーボードとマウス」
  2. 「キーボードショートカット」タブ
  3. 「+」をクリック、変更したいアプリケーションを選択する
  4. メニュー項目を入力(「次のタブを選択」)
  5. ショートカットキーを入力


これだけ。すげーカンタン。

Firefox と同等にしました。
TextMate のタブ切り替えもこれなのでコンテキストスイッチする必要が無くて安心。

SafariStand を入れておくと更に「カンマ / ピリオド」でもいけるようになる。

タグ: , ,

Analytics Plugin made by VLC Media Player