LifeGameをSQLで


先日(12/03)にcoderetreatというイベントに参加してきた。参加の感想は別途ブログに書くかもしれないとして、お題となったライフゲームは、参加して初めて知った。


6人の方とペアプロでこのお題に取り組んだが、すべてPHPで書いた。次回参戦する機会があれば別の言語でチャレンジしてみたい。


このお題を3回くらいペアプロした後で、ゲームのロジック(死活判定)をSQLでできないかなと思ったので書いてみた。
コードの汚さやSQLの美しくなさはご容赦いただきたいが、隣接するマスを表現するのにSpatial Informationを使えないかなと思って書いてみた。
⇒コードはこちら
※ちなみに20x20位のマップで激遅になるので10x5位で動かしてみてほしい。



MySQLにはOpenGIS準拠のSpatial Informationの実装があるが、一部インプリメントされていないfunctionもある。
サンプルコードではマスを座標(POINT)として表現して、2つの座標を持つ線(LineString Class)を作り、長さがルート2以下であると判定しているが、本来は Distance(lg1.p,lg2.p)として計算したかった。
また、更新対象のテーブルをサブクエリに収めてあげないと、自己相関サブクエリによるUPDATEができないのでコピーが必要になったのもちょっと残念。


さらに、マスと考えるならPolygon Classを利用してMBRTouchesとか使えると直感てきだとも考えた。マス表現が GeomFromText(Polygon(0 0,0 1,1 1,1 0,0 0)) として、MBRTouches(lg1.p,lg2.p)で抽出する。


座標計算をして対象を中心とした9マスのPolygonを作成して MBRWithin で抽出する方法も考えたが、GeomFromTextやPolygonの引数をダイナミックな値をCONCATして渡すことができなかった(Illegal value)のであきらめた。時間があったらチャレンジしてみたい。


今回の方法なら、x,yをint型の別カラムにして
(POW(lg1.x-lg2.x,2)+POW(lg1.y-lg2.y))<=2
でも同じことなんだが、せっかくSpatial Informationを使おうと思ったので....

【ネタ】秀丸強化計画

10/27の夜に社内勉強会「開発環境勉強会:超エディタ論争」が開催されました。
9月に自称PHPer最強のVimerが入社し、社内のEmacserの心に火をつけたのが開催のきっかけだったようですが、当のVimerさんは体調不良で不参加と言う中、[twitter:@yattom]さんも見学に来られるとのことで強硬開催されました。


今回は、Vimer代表、Emacser代表、NetBeans代表がそれぞれネタを持ち寄って発表するとのことだったので、コンテンパンに叩きのめされるのを覚悟でネタで「秀丸代表」を務めさせていただきました(^_^;)


エディタ論争と言うことでエディタの話題だけでしたが、開発環境はエディタだけでなく、OS、テスト環境、ブラウザ、ブラウザに入れるプラグイン、PC周りに置かれたガラケースマホなどの実機など、開発を効率化するために必要なあらゆる環境が今後の勉強会で議論されればうれしいなと思いました。


例えば、ブラウザ一つとっても用意するブラウザの種類、バージョン、入れるプラグインや、設定するショートカット、マウスジェスチャーなどで相当生産性が違うと思います。社内を見回しても人によって「揃え方」に特徴がよく出ていて、意外と何に重点を置いているかわかるものです。逆に何もしてない人は生産性が残念な場合があるかもしれませんね。


キーボードやマウスなど入力デバイスも好みの分かれるところで、「入力デバイス論争」も興味を持ってなかった人には良いきっかけになりそうですね。やっぱり普段使う道具にはこだわりと愛着を持ってもらいたいものです。
ちなみに私は、キーボードはテンキーなしでは財務系の仕事に支障をきたすので「Topre REALFORCE 108UBK SJ08B0」を、マウスは「MS Exploer Mouse 1362」とトラックボール「Kensington Expart Mouse White」をアプリケーションによって使い分けてマウス。ww


さて、秀丸ネタですが、14年くらい前に初めてFreeBSDを触った時に買った本に紹介されていたエディタがなんと「ee」orz。。。その数年後にViやEmacsは触ったのですが、うまくとっつけず、cp > ftp download > 秀丸 > ftp upload > cpなんてことをしてました。その後さすがにViでいろいろするようになったのですが、今のように仮想環境なんて豊富に用意できない時代にサーバーで直接作業するなんてことをめったにしなかったため、自然と秀丸力が磨かれていったわけです。


秀丸は来年20周年を迎える有名エディタで、弊社でも60ライセンスくらい保有しています。いまだにバージョンアップとメンテナンスが続けらて現在のバージョンは8.10で今年の7月にリリースされたものです。
マクロ連携機能も年々強力になり、環境を固めれば下手なIDEより高速で使い勝手もよくできます。


私の年齢で今から他の環境を使いこなすには学習コストが高い気がして(食わず嫌い。。。)なかなか踏み込めませんが、今回のみんなの発表をみていろいろ触ってみたくなりました。


ちなみに今回の私の発表では、秀丸でもここまでリズムよく開発できるというデモです。主言語がPHPであればxampp入れて、ローカルのドキュメントルートを直接編集してブラウザを通した確認や、SeleniumuIDE連携などは問題なくできますが、PHPUnitsubversion連携まで一本化して、開発がスタートしたら秀丸とブラウザ以外行き来せずに済む環境を作れることを目的としました。
秀丸svn連携はそれなりに検索でhitしたのですが、PHPUnit連携って見かけないですね。。。


TDDをしていると開発にはリズムが非常に大事であることが分かります。レガシーコード改善ガイドにも書かれていますが「実行に0.1秒以上かかるものは単体テストと呼ばない」とのことなので、コードを少し書いて単体テストを実行したいと思って実行結果が分かるまでに1秒以上かけるわけにはいきません。
※実はデモ前日に[twitter:@t_wada]さんとペアプロしてた時に、テストコードとプロダクトコードの切り替えにマウスを使ってタブを切り替えていたら「リズムが悪い」とけなされたwwので、テストコードを非アクティブなタブから探してアクティブにするマクロと、プロダクトコードがアクティブな状態でテストコードを実行するマクロをデモ当日に作りました。ww


他には秀丸の話ではありませんが、単体テストユニットテスト、コントローラーテストをする際にCI環境にあるフィクスチャーを使わず、独自のフィクスチャーを用意してすべてMySQLのHEAP型のテーブルに収めることで結果を高速に得るようにしています。
テスト結果を高速に得る努力をしていると、モックに対する戦略なども合理的になり検査のスコープを明確にできます。


当日のスライドをアップしたところ、「デモだらけでわからん!」とお叱りを受けたので、デモ動画を作りました。orz
デモ動画も初めは見づらかったので、HD画質で作りましたので興味のある方は、PCでフルスクリーンモードでご覧ください。


秀丸最強化計画
View more presentations from Kiichi Kajiura



※PCでフルスクリーンモードでご覧ください。


最後に、次回の勉強会も楽しみにしてます!!

Scrum Gathering Tokyo 2011


本日10/22(土)のDay2イベントを終え、2日間のScrum Gathering Tokyo 2011と1週間のScrum Weekが終わりました。


日本で初めて開催されるScrum Gatheringのコンテンツ委員として、その場に身を置けたことは大変幸せでした。


実は、私今週2回寝坊しました。
1つは今日です。スタッフとして8:00集合のはずなのに、当日の朝午前3時過ぎまで遊んでいる実行委員を「子供」と揶揄して5:00過ぎに寝たのに、起きたのは8:15でした。改めてごめんなさい。
そしてもう一つは、実に22年ぶりに会社に遅刻しました。前日朝5時まで仕事していたので明日は10時に出社すると明言していたのに、起きたのは10:03でした。


22年間というのは約8000日です。8000日ぶりの遅刻をするほど疲労していますが、SGT2011という素敵な機会に居合わせることができたのは、実行委員、コンテンツ委員、登壇者、スポンサー、会場提供いただいた早稲田大学、そしてすべての参加者の皆さんのおかげです。


疲労困憊中なので大したことはかけませんが、この気持ちが熱いうちにエントリーを残したいと思います。


その前に少し背景を、、、
私は今回の登壇でも話した通り、昨年初頭より「社員に閉塞感が生まれるのではないか?」と言う不安から、いろいろと試行錯誤していました。そんな中、当社の期初である12月ごろから、他社ではどんな取り組みをしているんだろ?他社のエンジニアはどんな価値観を持っているんだろうと思い、社外勉強会への積極参加をしてみようと思い立ちました。


ただ、勉強会めぐりをしていては意味がないので、
・6か月間は参加しまくる
・次の半年で登壇者になる(LTでもなんでも)
・1年後に事例を発表する
と、言った目標を立ててのぞみました。


そんな中いろいろな縁にも恵まれ、様々なコミュニティに参加し、多くの発表の場を頂戴しました。また、参加しているうちにCompanyとCommunityというものに興味を持ち始め、コミュニティの運営側も体験してみたいと、スタッフとしてお手伝いしたり、自分で主催するようになりました。


全然、SGTと関係なくなってきたので話を戻すと、そんな中きっかけは [twitter:@miholovesq]さんのこのツイートでした。



2秒くらい悩みましたが、悩んだ挙句応募してみました。ww


応募の動機は、
・大きなイベントのコンテンツを自分たちで考えられる
・ちょうどこの1カ月前から実行委員でもある [twitter:@ryuzee]さんにコーチングに来てもらっていた
が、大きな要因です。


実行委員、コンテンツ委員はさすがにスクラム界隈の歴戦の勇たちだけあって、それは自己組織化された見事なチームワークでした。と、言ったら若干おおげさですね?ww
まぁ、個性の強い方たちが集まればいろいろ大変なことはありますよwww


さて、そんな中私は、[twitter:@amameci]さん、[twitter:@ymkz303]さん、[twitter:@homata]さんたちと「チームメイド」を結成し、本日の「中級スクラムマスター・中級チーム」トラックの企画をしました。


チームの皆さんには朝8時前から湯島道場に何度もお集まりいただき、コンテンツの骨子から検討と吟味を重ねてきました。


・どんな人たちにどんなセッションを見ていただきたいか
・せっかく足を運んでもらったらどんなものを持って帰っていただきたいか
から、いくつかのコンテンツ案を出し合って、蒸留を繰り返し、30以上出た案の中から、予備セッションを含む5コンテンツを選択し、深掘りとコンテンツごとにお願いしたい講演者候補のリストアップをしました。
選ばれたコンテンツは単体ではチームの中で「面白そう!」と言う人気のものもあったのですが、我々なりにトラックの起承転結を考えて選びました。


その後、各コンテンツは講演者の皆様とブラッシュアップし、
http://projectmanagement.hubpages.com/hub/Software_Requirements
この記事の「顧客が必要としていたもの」が「顧客への請求金額」くらいまで、高めていただきました!


きっとチームの皆さんもそう思われていると思いますが、少なくとも私は当初自分たちでは「どやっ!」な気持ちで企画したコンテンツたちが、まったく形を変えあそこまで素晴らしいものになったのは、さすがチームで選んだ講演者たち!!w(違


改めて、原田さん[twitter:@haradakiro]、永瀬さん[twitter:@miholovesq]、小柴さん[twitter:@bash0C7]、柴山さん[twitter:@SHIBAO800]、大塚さん[twitter:@HIROCAST]、江端さん[twitter:@ebacky]、天野さん[twitter:@amapyon]、牛尾さん[twitter:@sandayuu]、前川さん[twitter:@tetsu_m]、本当にありがとうございました。


また、私は幸いなことに常にこのトラックのお手伝いとして教室にいることができ、結果すべてのセッションに居合わせることができました。


セッションのごとの詳細な感想は私が書くことではなく、参加された皆様の熱いエントリーを期待させていただきます。


最後に、皆さん本当にありがとうございました!


※案の定、支離滅裂なエントリーになったとさ。。

PHPUnitインストール備忘録

pear upgrade PEAR
pear upgrade-all
pear channel-discover pear.phing.info
pear channel-discover pear.pdepend.org
pear channel-discover pear.phpmd.org
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear install phing/phing
pear install pdepend/PHP_Depend
pear install phpmd/PHP_PMD
pear install phpunit/phpcpd
pear install PHPDocumentor
pear install --alldeps phpunit/PHPUnit

アジャイルサムライ読書会 湯島道場 第六回 開催します!


2011/09/07(wed) 19:30より第六回目の読書会を開催します。
今回は第一回から第五回まで1か月半かけて読み終えたアジャイルサムライすべての総まとめの回とします。
当初「五輪の書」から「○○の巻」と名付けましたが、五輪の書には第六巻がありませんので、当回は「かっぱ巻」と名付けましたw。
また、今回は来る9/18に開催予定の 他流試合に向けた準備も兼ねたいと思います。


お申し込みはこちら ATND

アジャイルサムライ道場についてはこちら アジャイルサムライ道場

開催経緯はこちら アジャイルサムライ読書会(湯島道場)開催します!


読書範囲、進め方等については、上記のATNDやアジャイルサムライ道場をご覧ください。
開場時間は19:00です。会場入り口が春日通りに面していませんので下記リンク先の地図を参照のうえお越しください。。
会場地図
会場は4Fになりますので、エレベータで直接お越しください。


湯島道場のハッシュタグは、#agilesamurai #湯島道場です。
なお、参加される方はポジションペーパー(自己紹介)の記入をお願いしております。お手数をおかけいたしますが、よろしくお願いいたします。
アジャイルサムライ道場 湯島道場 ←ポジションペーパーはこちらにご記入ください。


皆様のご応募お待ちしております。

今回もおかげさまでブログアップ前にすでにキャンセル待ちが出ている状況です。
全回参加を呼び掛けていたため、前回参加された方にはATNDを立て次第、個別のご連絡をしたのですが、ATNDを拾うbotハッシュタグからたどり着いていただいた方がいらっしゃり、ありがたいことですがすでに満員御礼です。(今回も瞬殺でした。)
募集枠は最後の5分まで調整をしますので、奮ってご応募いただき、繰り上がりをチェックしてください!

アジャイルサムライ読書会 湯島道場 第五回 開催します!


2011/08/31(wed) 19:30より第五回目の読書会を開催します。
今回は第五部(十二章〜十五章)を範囲とします。当回のLTはもちろんあの方にお願いしてあります!
なお、今回が当初は最終回の予定でしたが、総まとめの回「第六回 かっぱ巻」を次週開催予定です。


お申し込みはこちら ATND

アジャイルサムライ道場についてはこちら アジャイルサムライ道場

開催経緯はこちら アジャイルサムライ読書会(湯島道場)開催します!


読書範囲、進め方等については、上記のATNDやアジャイルサムライ道場をご覧ください。
開場時間は19:00です。会場入り口が春日通りに面していませんので下記リンク先の地図を参照のうえお越しください。。
会場地図
会場は4Fになりますので、エレベータで直接お越しください。


湯島道場のハッシュタグは、#agilesamurai #湯島道場です。
なお、参加される方はポジションペーパー(自己紹介)の記入をお願いしております。お手数をおかけいたしますが、よろしくお願いいたします。
アジャイルサムライ道場 湯島道場 ←ポジションペーパーはこちらにご記入ください。


皆様のご応募お待ちしております。

と、ここまで書いて準備していたのですが、すでにキャンセル待ちが出ている状況です。
全回参加を呼び掛けていたため、前回参加された方にはATNDを立て次第、個別のご連絡をしたのですが、ATNDを拾うbotハッシュタグからたどり着いていただいた方がいらっしゃり、ありがたいことですがすでに満員御礼です。(今回も瞬殺でした。)
次回も五回目参加の方には優先的にお知らせをさせていただきますので、ご了承ください。

アジャイルサムライ読書会 湯島道場 第四回 開催します!


2011/08/24(wed) 19:30より第四回目の読書会を開催します。


お申し込みはこちら ATND

アジャイルサムライ道場についてはこちら アジャイルサムライ道場

開催経緯はこちら アジャイルサムライ読書会(湯島道場)開催します!


読書範囲、進め方等については、上記のATNDやアジャイルサムライ道場をご覧ください。
開場時間は19:00です。会場入り口が春日通りに面していませんので下記リンク先の地図を参照のうえお越しください。。
会場地図
会場は4Fになりますので、エレベータで直接お越しください。


湯島道場のハッシュタグは、#agilesamurai #湯島道場です。
なお、参加される方はポジションペーパー(自己紹介)の記入をお願いしております。お手数をおかけいたしますが、よろしくお願いいたします。
アジャイルサムライ道場 湯島道場 ←ポジションペーパーはこちらにご記入ください。


皆様のご応募お待ちしております。

と、ここまで書いて準備していたのですが、すでにキャンセル待ちが出ている状況です。
全回参加を呼び掛けていたため、前回参加された方にはATNDを立て次第、個別のご連絡をしたのですが、ATNDを拾うbotハッシュタグからたどり着いていただいた方がいらっしゃり、ありがたいことですがすでに満員御礼です。(今回も70分で瞬殺でした。)
次回も四回目参加の方には優先的にお知らせをさせていただきますので、ご了承ください。