シンプルさが勝つ。人間はシンプルではない。

僕は主にUIを作るエンジニアなのだけど、以下の話題について。

時間をかけて、つまらないものを作りたいか? - futoase.hatenablog.com

ニコニコ動画はSynvieプロジェクトが原型 - はてな村定点観測所

UIの有効性を証明する仮説とその検証において、ほとんどの場合において次の二つが根源的な問題となる。

  1. だいたいのものはシンプルな方が勝つ
  2. 人間はシンプルではない

二点間の距離を求める三平方の定理は、(ディスプレイが歪んでいない限り)簡潔でシンプルだが、二点のボタンを順番に押すときのマウスの軌道、そのあいだのユーザーのメンタルモデルの変化は、まったくもってシンプルではない。

人間はシンプルなものの価値を認めたがらない、というバイアスがある。金を産まないといけないソフトウェア開発の現場は、コアフィーチャーの純粋さと、機能追加による複雑性のせめぎ合いで、舵取りを間違えると本来の価値がまるごとスポイルされる。(コアフィーチャーが実は価値がなかった!という場合もあるが…っていうのがfutoaseさんのブログのアレのような気がするが)

価値がスポイルされるのは、作っている人間が最初に気づくはずだ。だからドッグフーディングできるものは可能な限りドッグフーディングした方がよい。

とはいえ、ドッグフーディングが成立しないこともある。いつだって自分が対象ユーザーになれるわけではない。おしめを作ってる人は赤ちゃんじゃないだろうし、ソシャゲ作ってる人の大半はソシャゲに興味が無いだろう。

僕は自分のソフトウェア開発の専門性に自信を持っているのと同じように、経営者やマーケの専門性を信じたいし、そもそも形だけでも信じないと開発チームが成立しない。だから、自分が糞だと思っても最初は飲み込むことにしている。(ついでに言うと、僕はこのブログの通り自分の意見が強い人間なので、ある程度抑えないと、チームにいらぬ不和を招くという自己認識もある)

そしてエンジニアリングが正しく出来たからといって、プロダクトが成功するわけではない。エンジニアリングによって提供できるのは、「勝負の土俵に乗れるかどうか」、ということだ。

スクールガールストライカーズの 内製クライアントエンジン

最近話題になってたスクエニの人の資料だけど、これだけのエンジニアリングを費やした上で、レビューをみてみると大荒れで、ソシャゲとして成功しているかどうかというと、少なくとも大成功ではないみたいだ。

ただ、ここで学ぶべきは、これだけの技術がないと、「100%コントロール下の独自ゲームエンジンで」「複数の3Dのモデルを」「軽快に」動かすことは出来なかった。この技術は間違いなくスクエニの競争力になるだろうし、おいそれと真似できるものではない。

これは持論なのだけど、UXを語っていいのは、最低限の速さと安定性を達成した後だ。

いずれ人間も仮想化される

将来的には、人間のメンタルモデルも仮想化されて、テストケースを走らせる度に仮想化された人間のメンタルモデルがspawnし、アプリを操作し、感想を報告した後、killされるだろう。1テストごとにメンタルモデルを殺すのが残酷か?という人工知能の倫理問題になる。優秀なメンタルモデルはOSSで提供されるか、高価に取引されるだろう。

A* 書いた

mizchi/path-finder.js

約110行。closeNodesを更新するときの手続き忘れて、wikipedia見ながら1時間ぐらい掛かってしまった。たるんどる。

A* - Wikipedia

PathFinder = require 'path-finder'
sample_hitmap = [
  [1, 1, 1, 1, 1, 1, 1]
  [1, 0, 0, 0, 0, 0, 1]
  [1, 0, 1, 0, 1, 0, 1]
  [1, 0, 1, 0, 1, 0, 1]
  [1, 0, 1, 0, 1, 1, 1]
  [1, 0, 1, 0, 0, 0, 1]
  [1, 0, 0, 1, 1, 0, 1]
  [1, 1, 1, 1, 1, 1, 1]
]

PathFinder.dumpHitmap sample_hitmap
finder = new PathFinder
start = [6, 1]
goal = [3, 5]
console.log 'result', finder.searchPath sample_hitmap, start, goal

なんかsubstackみたいに小さなライブラリ作りまくる人みたいになってる

花火つくった

HTML5 花火大会 - jsdo.it - Share JavaScript, HTML5 and CSS

jsdoitのやつ、自分でもやりたかったので、パーティクル制御書いてみた。連打すると花火が飛ぶ

  • (最初の一発がはてなブログの初期化とぶつかって重い…)
  • (Firefoxで動いてないのは後で直す)

ライブラリ化した

mizchi/hanabi

bower install hanabi で入る。

使い方も簡単

window.addEventListener('load', function(){
  var hanabi = new Hanabi({x: 100, y: 100});
  hanabi.fire()
});

打ち上げたい座標をいれてfire

花火大会に行く予定はないです