アジャイルという考え方

アジャイルサムライを読んだ。組み込み系からWeb業界に移動してきた僕にとっては有益な話が多かくて、忘れる前にメモ程度に書いておこうと思う。

インセンティブデッキを作成する

以下の5項目をプロジェクト開始時に決めておく。

  1. 我々はなぜここにいるのか?
  2. エレベータピッチ
  3. パッケージデザイン
  4. やらないことリスト
  5. ご近所さんリスト

自分たちが何を作成するために集められて、それを作成することでどういうことが起きるのかをまず統一化する。エレベータピッチをみんなで共有することもそうだし、パッケージデザインで作るものの意識を共通化させるのもそう。作成している間にやりたいことやこれがあったらいいというものはどんどん増えていくけど、これは今回の開発では絶対に「やらない」というものを決めておくというのも面白い。ご近所さんリストは大規模開発じゃないとあまりないかなーと思う。

見積もりは変わる

きっちりとした見積なんて最初からできないものだと割りきって考える。最初からできないんだから後からすこしずつ変えていけばいい。そうすれば見積が変わっていくことに対していちいちストレスを感じることもない。出していた見積は作業をすることで時間が変わるものだし、要件は作成している間に増えるものである。要件が増えそうになった際には時にやらないことリストや、パッケージデザインをそれは本当に必要かをその都度見積り直せば良い。まずは大体で見積もって終わりになるほど精度が高くなればいい。

ストーリーを語る

技術者は技術で語る癖がある。データベースのレスポンスを早くする。とか、アニメーション処理をCSSで書くとか。それは技術者間で話すには良いのだけど、技術者ではない人と話す場合はその作業によってユーザ見えでどう変わるのかを話したほうが良い。データベースのレスポンスが早くする。っていうのは、画面表示を早くするって言い換えれるかもしれないし、アニメーションをCSSで書くというのはなめらかなアニメーションを実現するって言い換えれるかもしれない。やっていることがどういう効能があるというのを共用することは大事。

概算見積もり

技術者から見て同じぐらいの重さのものをグループ化してポイント化する。例えば10個のタスクがあったとして、1ptが5個、2ptが3個、3ptが2個みたいな感じで。これも大体でいいらしい。んで、とりあえずやってみる事で、1ptにつきどの程度時間が掛かるかを見積もる。こうすることでスケジュールが進むに連れて見積もりの精度がすごく高くなる(*1)。どう考えても最初に提出したスケジュールに間に合わない場合は、タスクを削る。もしくは時間を伸ばす。間に合わないということがわかるのも見積もりを行なっているからで、スケジュールに間に合わないということが早めにわかって良かったとポジティブに考える。基本的にはスケジュールを伸ばすのではなくタスクを削るほうがうまくいく。作成した機能の25%程度しか使われないのが一般的らしいのでシェイプアップという意味でもタスクを削るっていうのはいいのかもしれない。

バーンダウンチャート

横軸に時間。縦軸に残作業量でグラフを書く。時間が立つほど残作業量が減っていき、残作業量がなくなった時点で作業は終了。見積もりが正しければ作業量と時間がきちんと見積もれているため右下に一直線のグラフとなる。作業量と時間とがわかりやすくていいなぁと思う。Readmineとかでも同じといえば同じなんだけど、全体の作業量から引いていくっていう感じで作れないものかなぁ。僕としては縦軸を作業量としてある一定量まで上に上がれば作業が終了としたほうがいいと思う。こっちの方が途中の仕様変更等で作業量の絶対値が増えた場合に対処がしやすいし、わかりやすい。可視化って大事だと思った。

まとめ

僕は組み込み系のきっちり決まった仕様・スケジュールで仕事をしてきて、今現在状況に応じて変わるスケジュール・仕様・作業量が変わる業界に移って戸惑っているんだけど、考え方を変えるって意味で読んでみてよかった。いろいろ腑に落ちる考え方とかも多かったし可変的にものを作成する環境にいる人は読んで損はない本だと思います。

*1: 書いてて思ったけど、まぁ普通にやってるな・・・。

福利厚生って単なる天引きじゃね?

http://www.gamer.ne.jp/news/201204160017/

福利厚生って名前が違うだけで、お金を給料として払うのかそれとも会社が勝手に決まった部分に使って社員に与えるのかの違いがあるだけだよね?無料でランチがでるよりランチ代として終業1日ごとに千円もらったほうがいいし、家賃補助が3万出るとかよりも給料が3万上がったほうがいいんじゃないの?

会社にとっては自由に使える金を決まったところに使わせることで無理やり従業員の環境を良くすることで体調面を管理して頑張って遅くまで働かせることができるし、普通に給料を払うよりも税金がすごく低くなるから(*1)会社にとっては一石二鳥の策だと思うんだよね。

別に福利厚生が手厚いからっていい会社ってわけじゃないと思うよ。

*1: たしか。うろ覚えだけどあってるはず

SPモードメールの容量を減らす方法

スマホってすごくメモリ容量が少なくて、気がつくとすぐに空きメモリがなくなる。だから、僕は定期的に使わなくなったアプリのアンインストールをするんだけど、SPモードメールだけ使ってる容量の桁が違うことが目に付く。多分送受信したメールをすべてバカみたいに本体においてるからだと思うんだけど、これを解決するには自動で削除するしかなさそう。

メールを自動でゴミ箱に移す

操作がちょっとわかりにくくて、SPモードメールのアプリを立ち上げて、「受信BOX」を長押しする。するとメニューが出てくるから「自動削除設定」を選んでどれくらい経過したメールを削除するかの設定を行えばいい。「送信BOX」も同じね。

ゴミ箱の削除

↑の操作をやれば自動的に削除してくれるのかとおもいきやゴミ箱に移すだけ。だから定期的にゴミ箱を空にしてあげないといけない。操作は「ゴミ箱」を選択してメニューボタンを押してから「全削除」を選択すれば削除される。

まとめ

全般的にどうしてこうなったとしか思えないアプリ設計。普通に保存先をSDカードに移してくれるだけでこんなめんどくさい動作を行う必要がなくなるのに保存先を選択できない意味がわからん。ゴミ箱って言ってるのに自動削除の期間を選べない意味もわからん。保存先とか調べて定期的にどうにかするメーラー的なアプリつくろうかなー。まぁ、とりあえずメールを直近の1か月分だけ残して全部削除してやったら30Mぐらい使用容量が減ったからやる価値はあると思う。

メールを削除しないと本体にたまり続けていく仕様をつくることでメールの定期削除を促す。これは、過去を振り返らずに前を向いて行きましょうっていう暗黙的なDOCOMOからのメッセージなのかもしれない。余計なお世話だけど・・・。

スマホでimgタグのwidth、heightを取る場合に注意すること

imgタグのwidth、heightは画像のロードが完了しないと取れないっぽい。対応策としてはimgタグでloadが終わった後に取れば問題ない

$.each($('selecter').children(), function() {
    if(this.tagName.toLowerCase() === 'img') {
        $(this).load(function() {
            // ここでwidthもしくはheightを取る
        });
    }
}

そんだけ。

スマホでゲームを作るなら今だと思う

http://d.hatena.ne.jp/shi3z/20120327/1332811678

ゲームらしいゲームを作るなら僕も今だと思う。しかもスマートフォンを使ってモバイルで本気で遊べるゲーム。なぜそう思うかというといくつか理由がある

普及しすぎたカードゲーム

カードゲームは普及しすぎたと思う。カードゲームやら釣りゲームやらは確かにやってみると面白いし、あの課金率の高さはすごく魅力的だと思う。だけど、何故課金をするのか?って言うのを突き詰めていくと誰かより優位である状況ができるからなんじゃないかと思っている。優位である状況っていうのは相対的な評価だから人が集まらないと誰かより優位だという状況を作ることは難しい。カードゲームの母数が増えれば増えるほど人は分散していくから、何かしらのはまり要素っていうものを作らないと人が集まらなくなるんだろうけど、クリックするだけの単純なゲームだとはまり要素を作るのも難しい。はまり要素を作るためにはもうちょっと複雑なゲームらしいゲームっていうものが必要だと思っていて、カードゲームに飽きてきた人間たちがもうちょっと複雑なはまり要素があるゲームに群がりやすい時期なんじゃないかと思っている。嘘か真かしらないけどGREEに調査が入るだの入らないだの言われてるみたいだし、そろそろカードゲームをはやらせるのは無理なんじゃないかと思われる。今ならファミコン時代みたいなしょぼいゲームであっても空き時間で楽しむゲームとかではなくてしっかり楽しめるゲームを作れば普及する確率は高いんじゃないかと思っている。

インフラが整備されてきている

各社が4Gに対応してきたことでこの1年で通信速度が飛躍的に上がると思う。WebSocketが各種ブラウザに実装されだしてきたことでインフラが揃えばほぼリアルタイムの通信っていうのがスマホでもできるようになる。そうなれば、距離の壁を抜けてリアルタイムで同時対戦ってのが普通に実装できる時代がもうそこまで来ている。スマホのブラウザでは動きのカクカク感がひどいんだけど、それも来年にはハード性能が上がることによってほぼ無くなるだろうと予想している。1年前ぐらいからスマホが流行りだしてるから来年には2年縛りが切れて買い換える人も増大することだろう。ハードの性能が上がった携帯が普及すればファミコン程度の動きはHTMLでも全然動かせることになるんじゃなかろうか(*1)。

グラフィックをそこまでこらなくてもいい

体感的にスマホのグラフィックはしょぼくて当たり前だと思ってくれる風潮がある。今であればグラフィックにお金をそこまでかけなくてもゲーム性のみで流行るゲームを作れる可能性は高い。家庭用ゲーム機ではグラフィックがすごいのが当たり前になってしまっているからグラフィックにお金をかけなければヒット作を作るのがむずかしいっていう風潮ができていると思う。FFにしても新作でなにが評判になるかって言うとあのグラフィックがすごいって言うばっかり。そこにお金をかけないと売れないんだから業界的にしょうが無いんだろうけど、今のスマホユーザがもっているグラフィックに対する敷居の低さを利用しない手はない。

まとめ

今のスマホゲームだとちゃんとしたゲームを作成したにしても家庭用ゲーム機に比べればグラフィックにかけるお金が格段に低くてすむ。グラフィックにこらずにゲームを作ることが出来る時代は今しかないと思う。一旦流行ってしまえば続編続編で食えるのがゲーム業界の強みでもあると思うし、お金をかけずにバンバンゲームを出すことが出来るのはグラフィックにこらなくても大丈夫な今だけだと思う。終わらないゲームを作るんではなくて自作が楽しみになるゲームをそろそろ創りだしていい時期なんじゃないかと僕は思っている。

*1: まぁ今でもできるはできるけど敷居が高い感がある

はてなブックマークで効率良くデータを集める方法

僕はこんなのをつくるぐらいはてなブックマークが好きなんだけど、どうしてもノイズが混じりやすい。ノイズもノイズで面白いんだけど、ちょっと効率良く情報を集めるためにやるちょっとした小技。

はてなブックマークをURLでフィルタ

どこかのURL配下のものしか欲しくない場合は以下のように書くと取れる。下の場合はITmediaの場合。

はてブ数でフィルタ

はてブ数はthresholdの数字で決まる。50以上の場合は、以下

タグでフィルタ

タグでフィルタする場合はURLをちょっと変えてやる必要がある。hogehogeってタグでフィルタしたい場合は以下

ユーザでフィルタ

ユーザでフィルタする場合もURLをちょっと変えてやる必要がある。hogehogeってユーザでフィルタしたい場合は以下

RSSで見る

出ているはてブの情報をRSSで受信したい場合はmodeを変更してやる。hogehogeってタグのはてブ情報をRSSで受信したい場合は以下。

複合技

thresholdはどこでも使える。タグとユーザとURLはどれも複合できない。thresholdを上げれば上げるほどノイズは減るけど面白い情報は入ってきにくい。URLとタグで興味のある情報が入ってきやすい状況にしてthresholdでノイズを減らすのがおすすめ。ノイズが減った情報をRSSで取得して暇な時にRSSの情報をためて読むと捗る

IT Media
http://b.hatena.ne.jp/entrylist?threshold=30&url=http://www.itmedia.co.jp/&mode=rss
techcrunch
http://b.hatena.ne.jp/entrylist?threshold=30&url=http://jp.techcrunch.com/&mode=rss
ますだ
http://b.hatena.ne.jp/entrylist?threshold=30&url=http://anond.hatelabo.jp/&mode=rss
Android
http://b.hatena.ne.jp/t/android?threshold=30&mode=rss
node.js
http://b.hatena.ne.jp/t/node.js?threshold=30&mode=rss

まとめ

こんな感じでいろんなURLとかタグとかでフィルタすると情報を集めやすいと思う。ただ、これってはてなが公式に出しているものではないみたいだからいきなり変更されて取れなくなる可能性はあると思う。変更されるまでは使い倒してやっていいんじゃないかなー

日本人でも技術なら金を払ってでも聞きに行く

http://business.nikkeibp.co.jp/article/tech/20120316/229892/

なんか違う。アメリカ人は人に愛に行っているんではなくて技術を学びに行っているんだよね?それであれば日本人もお金を払ってでも学ぶっていうことは結構あるんじゃないかな。

日本人がワークショップに行かないのは製品に関してのサポートが充実しすぎていて自分に関係無いことを覚える必要がないからなのかもしれない。会いに行かなくても向こうから会いに来てくれるからかもしれない。けど、それは製品を売り込みに来ているのであって技術者として話をしに来てくれている人ではない。日本のワークショップが製品の説明ではなくて、製品を作る過程を話してくれる場であればお金を払ってでも聞いてみたいと思う人は日本でもいくらでもいるのではないかなと思う。

んで、日本の場合は手をとりあって何かを作るってのは無理だと思う。なぜ無理かって言うと守秘性を重んじる会社が多いから。

日本企業で手をとりあってっていうのは今まで仕事をしてきた中であまり見たことがない。同様の職種をやっている人の中でも、個人同士が手をつなぎ合って何かを作るっていうことは聞いたことがあるけど、仕事でやっていることを話しあってどうだこうだってやるって話は聞いたことがないし難しいと思う。そこには絶対に守秘義務と呼ばれる壁が立ちはだかってその部分に触れずに話すとどうしてもコアな部分の話をすることができない場合が多い。

Web業界・アプリ業界は結構オープンだけどそれでも手を取り合って何かを作るっていうのは難しいと思う。アメリカのワークショップがそれほど御盛り上がっているって言うことはコアな話をしているはずなんだけど、どうやったらコアな話ができる空気が出来上がるのかを知りたいなぁ。DeNAのカードゲームがどういう部分に気を使うことで人を集めているのか?とか知りたいし、Facebookの友人かも?のアルゴリズムも興味がある。Googleの検索エンジンがどういう仕組で動いているのかも知りたいし、Amazonのレコメンドのアルゴリズムも知りたい。

もし、そういうことを話してくれる場が開かれるのであれば金を払ってでも聞きに行く人は日本の中でもいくらでもいると思う。まぁ、守秘義務の壁やらなんやらのせいで無理なんだろうけど。

クリックゲームがもたらす影響

僕は小さい頃にゲームゲームばっかりやっていたゲーマーんだけど、僕が小さかった頃に今みたいなClickするだけのゲームしかなかったと考えると僕はゲームをやってたんだろうか?今出ているようなClickだけしていればいずれ強くなっていずれゲームをクリアできるっていうゲームに対して僕は小さい頃だと楽しさを感じることができたんだろうか?

僕が小さい頃にやっていたゲームは今の携帯ゲームに比べて数倍難しくて面白かった。マリオにしろドラクエにしろFFにしろそれぞれに固有の面白さがあった。マリオは今の釣りやらジャンプする奴やらの数倍難しいタイミングゲームだし、ドラクエ・FFは今のClickゲームを数倍難しくしたRPGだと思う。それを小さい頃にやって自分なりに考えてすこしずつ進んでいくことに喜びを感じていたし面白さを感じていた。そんな僕だからなのか今のClickだけで進んでいけるゲームに対してちっとも面白さを感じることができない。

じゃあ、もし僕が今幼少期を過ごしていたとしたら今のゲームをしなかったのかと言われると全く自信はない。今のゲームしかなかったのであれば、それはそれで楽しいって感じるんじゃないかとも思う。ビックリマンチョコについたシールを集めるのは面白かったし、カードダスで出てくるカードで単純なバトルをやるのも面白かった。あんな感じで今の子供達って携帯ゲームを楽しんでいたりするのかと妄想したりする。

僕は今のゲームたちが好きではない。クリックするだけで進んでいって射幸性を高めることで継続させる。純粋にゲームが面白いって所で勝負するんではなくて、やらないと損するとか他のユーザと絡ませることでゲームをせざるえない状況をユーザに与えることで継続させるゲームが多くてげんなりする。継続させる仕組みを考えて、継続させることができたら今度は課金させる仕組みを考える。それを面白いってユーザは感じることができるんだろうか?(*1)まぁ、もともとゲームを遊ぶのが無料っていう時点でどこかで課金してもらわないといけないのはしょうがなくて、無料でやれるって状況に感謝しないといけないんだけど、どうしてもその流れが好きになれない。レバーを引くとある一定間隔で餌がでる仕組みを猿に与えると猿はずっとレバーを引き続けるらしい。それと今の携帯ゲームが同じ気がしてならない。

小さい頃にゲームをやり過ぎると馬鹿になるって言われて僕は育ってきた。でもその話は実は結論は出ていなくて、本当かどうかわからないみたい。単調な行動をし過ぎると馬鹿になるってのは証明されているらしいけど、昔のゲームは今のゲームに比べて頭をつかう奴が多かったから結論がまだ出てないのかなーと思う。でも今のゲームは違う。30年後に調査をしたらゲームをしたら馬鹿になるって証明されてるかもしれない。

そろそろカードゲームバブルも終わるんだろうけど、その先の各社が作るゲームが気になる。今と同じような仕組みを使ってモチーフだけ変えて全く別のゲームができましたよーっていって大々的に出してくるのか、それともこれじゃいかんっていって本腰入れて面白いから続けるゲームを作ってくるのか。それによって30年後のゲームの評価とか今の子供たちの学力が決まってくるのかもしれない(*2)。

*1: 僕がやったことがあるゲームがそんなのしか無くて他に面白いものがあるのかもしれない

*2: って書いてみたけど、携帯ゲームをやってる人間の大半は子供じゃなくて大人なんじゃね?と思って調べてみたけど資料が出てこない

node.js + socket.ioの覚書

今触ってる奴の覚書

ServerとClientの通信

socket.io.jsを読み込んでio.connectで接続する。Server、Clientともにsocket.onでメッセージを受信して色々やる

// サーバ側
io.sockets.on('connection', function (socket) {
    // こんな感じでメッセージを受信
    // Clientの第1引数と同じで受信できる
    socket.on('user info', function(info) {
       // メッセージ受信後の処理
    });
});
// client側

// これで接続
socket = io.connect();

// これでメッセージ送信
// 第1引数がメッセージ名、第2引数が送信するデータ
socket.emit('user info', info);

これから記載していくことはServer側、Client側でSocketという名前の変数に値が入ってるものとして記載してる

通信中のclient idを取得する

サーバ側で取得する

    // これで通信中のIDが取得できる
    var id = socket.id

メッセージを送信してきたClientへメッセージを返答

socket.emit('message', info);

接続しているClient全体にメッセージを送信

io.sockets.emit('message', info);

個別にデータを送信

io.sockets.socket(socket.id).emit('message', info);

まとめ

WebSocketのリアルタイム通信は大体これぐらいあればいろいろできる。簡単にチャットソフトとかもすぐできる。io.emit()でClient側から来たデータをio.sockets.emit()で全Clientに流す。個別チャットをやりたかったらio.emit()で第2引数に個別の送信先のsocket.idを渡してもらえばそこ流すだけでいい。

あまりに簡単にかけすぎるからnode.jsとWebSocketに恋してしまいそう。ってか、Binaryデータもデータとして投げてこれるらしいんだが、それをそのままClientに流しちゃうとセキュリティ的に色々困ったことが起こりそうな気がする。まぁ、個人でやってる分にはそこまで考えないけど、企業でやるならそこらへんまで気を付けないといけないのかもねぇ。

何を信じて何を疑うべきか

福島の廃棄物問題が話題になってて思ったことをつらつらと。

http://media.yucasee.jp/posts/index/10685

http://www.yomiuri.co.jp/national/news/20120319-OYT1T00184.htm

福島のがれき受け入れっていうのは難しい問題なんだと思う。僕は福島の瓦礫問題は早く解決してほしいし、受け入れて問題がないのであればさっさと受け入れて早めに解決して欲しい。ただ、「問題がなければ」って言うのがすごく難しい問題なんだと思う。

放射能っていうのは眼に見えないし濃度が高くなければすぐに影響が出ることはないと言われている。すぐに影響がでないっていうのは影響がないって明言できないから言っている言葉なんだろうけど、この「すぐに」っていうのが曲者。「すぐ」影響がないならあとから影響が出るのかよって考えてしまう。放射能がどれくらいの濃度で影響があるのかっていうのがころころ変わるっていうのも曲者。今までダメだって言われていた濃度がじつは大丈夫でしたって言われても「ほんとかよ?」って思ってしまうのは人間として当然だと思う。

最初のリンクを読んでもらうとわかるんだけど、もし今福島の瓦礫を日本全国で処理したとして30年後に実はすごく影響がありましたって言われても遅い。影響があるものは封じ込めて影響の範囲を狭めるっていうのは鉄則だと思うしその判断は間違っていないと思う。でもその判断をどうやって下すのかっていうのがもめている論点で誰もなんか気持ち悪いから受け入れたくないって言ってるわけじゃない。

「福島の瓦礫を日本中で処理することで絆を見せつけましょう」ってそんな問題じゃない。絆を見せるんであれば別の方法もある。そんな短絡的なことを言われても論点がそもそも違って何いってんだって思ってしまう。ころころ変わる人の意見を信じれない。けど自分よりも知識がある人が言っていることであれば信じれる情報だとは頭でわかっている。何を信じて何を疑うべきかよくわからない。