人は(ry を読んだ感想

「人は自分が期待するほど自分を見ていてはくれないががっかりするほど見ていなくはない」を読んだので感想。読み終わって引っかかったものを書いてみる。

縛りがあるから面白い

俳句の例とか非常にわかりやすい。人はなにか縛りがあるから面白いものをひらめくっていうのはそのとおりかもしれない。視点を変えてみると、幅が狭い中でみんなで考えているから出てくるものが少なくて、それがあったかーって他の人がなり易いから面白いものをひらめいているように見えるってだけかもしれない。ただ、何かを考えるときにわざと幅を狭めて考えるっていうのは案が収束しやすくなることは確か。

友情だけはギブアンドテイク

これは寂しい。僕は逆に仕事がギブアンドテイクだと思う。何かもらえるから仕事をするわけで、見返りを求めなければいい仕事は出来るって言ってるけど、たぶんそれはその先に何かがあると踏んでいるから見返りを求めずに仕事が出来るんじゃないかと思ってしまう。友情こそ見返りを求めずにいけるんじゃなかろうか。切磋琢磨する素晴らしい友人関係もあればその人達の中にいると安らかになるという友人関係もあってもいいと思う。

ヒットしたものは全て正しい

腑に落ちる言葉。自分から見たらどんな馬鹿げたものに見えたとしても他の人に欲求があったからヒットするわけで、自分の面白い・面白くないっていう感想を抜きにするのであればこの言葉は正しい。ただ、流行ると思うけどこれは作りたくないっていうものとか、流行らないと思うけどこれは作りたいとか個人的にはあって、そういうのがあるから技術者なのかなーと思う。

独占は成功の母

アメーバの戦略が出てて面白い。

わが友、不眠症

どちらの方もよく働かれている。1日30分しかねらずにずっと仕事を考えてるとかすごすぎる。前に読んだ「渋谷で働く社長の日記」を読んだ時も働く時間が長いなーと思ったけど、見城さんもすごい。人間は最低でも1度はすごい仕事をする時間というものをとらないとこの方々みたいにはなれないんだろうな。絶対にうまくいくかわからないものに対してここまで熱い時間を投資するって感覚を持つ必要があるのかも。少しは見習いたいものです。

人は一つの人生しか生きられない

成功していろいろなものに手を出して失敗しちゃった人は僕も見たことある。他の人がそれに対して心血を注いでやっているのに、それを片手間でやって成功しようという考えがそもそも甘いと僕も思う。

まとめ

前の本でも思ったけど、見城さんが「剛」で藤田さんが「柔」っていう見え方をする本に出来上がっていると思う。おふたりとも仕事に心血を注いでいる感がひしひしと伝わってきて成功する、成功したとみなされてる人っていうのはここまで努力をしているのかと改めて思わされた。

JavaScriptの高速化試作の覚書 – JavaScriptグラフィックス

『JavaScriptグラフィックス – ゲーム・スマートフォン・ウェブで使う最新テクニック』ってのを読んだので必要そうな部分を抜粋

速度測定の指標

動作速度は端末によって違う。だからある一定の指標が必要。以下のコードを走らせることで、その端末で1秒間にどれだけの動作を行うことができるのかの指標を取得することができる。これを用いることでどの端末でも動作改善試作が表す影響を見ることができる。

var StartTime = new Date().getTime(); for(var count=0 ; timeElapsed < 1000 ; count++) { // ここで検証する動作を行う timeElaspsed = new Date().getTime() - startTime; } [/code]

countが増えれば増えるほど動作速度の向上を意味しており、改善前と改善後での数値の差に注目する。ただし、Firebugとかで計測できる環境があるならそれを使うのが一番いい。

高速化実装試作

  • 80-20のルール(20%のコードが80%のCPU時間を使う)に基づいて20%に力を入れて高速化をおこなったほうがいい
  • 三角関数等の重い計算処理を行うのであれば、結果をテーブルとして持ち近似値を使用したほうが早い
  • 複数の判定要素がある場合は、各ビットでフラグを表現し&演算子で判定を行ったほうが早い
  • XORをうまく使ってtoggleを実現できる(ex. toggle ^= 1;)
  • Math.Floor()よりもビットシフトを使用したほうが早い(ex. x = y >> 0)
  • jQueryのセレクタ指定は呼ばれるたびに検索が走るので複数呼ばない。複数呼ぶ場合は変数へキャッシュする。
  • jQueryのセレクタ指定は検索開始を指定することができる(ex. $(‘.class’, start-element);)
  • jQueryのcss演算子は遅い。複数変更する必要がある場合は、styleオブジェクトを抽出して変更する。(ex. $(‘#element’)[0].style)
  • 複数の要素を追加する場合は追加する文字列を作成して一回で追加したほうが早い。

アニメーション

どのような端末でも一定のスピードを保証するためにフレームレートを指定する。1秒間にどの程度の動作を行うことができるかを取得して、それに伴いアニメーションの移動距離を変えることでどの端末でも一意のスピードを保証することができる。例えば、1秒間に500回動作する端末(A)と1秒間に100回動さする端末(B)があった場合、どちらも同一のスピードを再現したいのであればBは1回の動作でAの移動距離の5倍移動させれば同じスピードを表現することができる。

まとめ

高速化について知りたくて呼んでみた本なんだけど、高速化の実装は最初の方にしか書いてなかったので非常に残念。アニメーションをJavaScriptで記載する場合(ゲーム等)は参考になる記述もたくさんあるようなので、もしゲームを作ることになったら更に深く読むことにする。


アジャイルという考え方

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

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

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

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

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

見積もりは変わる

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

ストーリーを語る

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

概算見積もり

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

バーンダウンチャート

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

まとめ

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

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

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

福利厚生って名前が違うだけで、お金を給料として払うのかそれとも会社が勝手に決まった部分に使って社員に与えるのかの違いがあるだけだよね?無料でランチがでるよりランチ代として終業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を取る
        });
    }
}

そんだけ。

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

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

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

カードゲームは普及しすぎたと思う。カードゲームやら釣りゲームやらは確かにやってみると面白いし、あの課金率の高さはすごく魅力的だと思う。だけど、何故課金をするのか?って言うのを突き詰めていくと誰かより優位である状況ができるからなんじゃないかと思っている。優位である状況っていうのは相対的な評価だから人が集まらないと誰かより優位だという状況を作ることは難しい。カードゲームの母数が増えれば増えるほど人は分散していくから、何かしらのはまり要素っていうものを作らないと人が集まらなくなるんだろうけど、クリックするだけの単純なゲームだとはまり要素を作るのも難しい。はまり要素を作るためにはもうちょっと複雑なゲームらしいゲームっていうものが必要だと思っていて、カードゲームに飽きてきた人間たちがもうちょっと複雑なはまり要素があるゲームに群がりやすい時期なんじゃないかと思っている。嘘か真かしらないけど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とかタグとかでフィルタすると情報を集めやすいと思う。ただ、これってはてなが公式に出しているものではないみたいだからいきなり変更されて取れなくなる可能性はあると思う。変更されるまでは使い倒してやっていいんじゃないかなー

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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