Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2013-01-11

CES三日目 enchantMOONの秘密 そして驚きの展開に 23:46

https://sphotos-b.xx.fbcdn.net/hphotos-snc6/227704_10152082291840752_801694896_n.jpg

 いよいよ大詰めの三日目。

 今日はたくさんのお客さんが来てくれました。

 まあ取材はほとんど日本のメディアでしたけどね。海外メディアにプレゼンスを出して行くのはまだまだ難しい!

 なにしろイロハもわからないですからね。


 いい出会いもありました。

 ウルフラム・アルファのプログラマーさんがやってきて「これどこで売ってるんだ?すぐ買いたい!欲しい!え?まだ?じゃあ絶対メールしてくれ。絶対買うから」と言ってくれたり、北米の有名家電量販店さんが来て「うちで売らない?」と言ってくれたり(まあそういう出会いが目的で出展しているわけですからあって当然とはいうものの、嬉しいものです)。


 でもねえ、やっぱnobiさんや石川さんかな。

 nobiさん、つまり林信行さんはもう盟友みたいな感じに勝手に思ってるんだけど、彼は仲が良すぎるから、敢えてあんまり具体的なenchantMOONの話を振らないようにしてた。

https://sphotos-b.xx.fbcdn.net/hphotos-ash4/317911_10152082288970752_71693162_n.jpg

 それで本当に予備知識なしでやってきて、「なにこれ・・・オレちょっと感動してるんだけど」と言ってくれた。


f:id:shi3z:20130111221836p:image

https://twitter.com/nobi/status/289437158824099840


 「昔からこういうの作りたがってたよね」


 これは嬉しかったな。

 

 enchantMOONは、解る人には解ってもらえるデバイスだと信じて作っていた。

 けど、親しい人に見せれば、逆に「もっとこうしなよ」と言われちゃうんじゃないかと思って怖かった。

 でも、「これでいい。これがいい」と言ってもらえる。もちろんソフトはもっと改良しろよというのは暗黙の前提としてあるとして、こういうふうに解ってもらえる、というのはやはり嬉しい。


 それと石川温さん。石川さんとはまあ面識あってたまにこういうイベントですれ違ったり飯食ったりする程度の仲で、石川さんは「あいつなにして暮らしてんだろうか」という感じで僕を見ていた、と思う。


 まあね、ただでさえ裏方の仕事っていうのは目に見えないから。

 そういう石川さんがわざわざ僻地のベネチアンまでやってきてくれて、「マジ?これいいじゃん」と言ってくれた。

https://sphotos-a.xx.fbcdn.net/hphotos-ash4/400088_10152082290190752_1569887984_n.jpg

 お互い、仕事のことはよく知らない人だから、そういう「解ってもらえる」感じはすごく嬉しい。

f:id:shi3z:20130111222357p:image

https://twitter.com/iskw226/status/289479985171927040


 ついでにベネチアンがあまりにも遠くてみなさんに申し訳なかったので、来年のブースをなんとかメインホールに確保しようとCEAオフィスへ

https://sphotos-a.xx.fbcdn.net/hphotos-ash4/207677_10152082304755752_153378001_n.jpg


 ああ憧れのセントラルホール。

 ま、セントラルホールとかはSAMSUNGさんとかPanasonicさんとか、とにかくぜんぜんムリな場所なのでその周辺のノースかサウス。できれば電話やCPUメーカーが多いサウスホールの二階になんとしても陣取りたい・・・と決意してやって参りました。


 CESは恐るべきカースト制度になっていて、大メーカーが最優先で場所をとってしまい、新参者の僕らは820番目という悲しい熱帯魚。めぼしいブースが目の前でガンガンとられていき、僕の目の前も真っ暗。またベネチアンは勘弁してくれー。まあお得意様優先なのは仕方ないにしてもこりゃあ恐るべき激戦区ですな。


 粘るに粘ること二時間。

 そして・・・


 https://sphotos-b.xx.fbcdn.net/hphotos-snc7/312415_10152082293615752_374059040_n.jpg


 やった!取れた!サウスホール。QualcommとかSandiskとかあるサウスホールですよ!奥さん!もちろん二階。

 さすがに800番台だと小さなケース屋さんとかが多く、でかいブースは売れ残る傾向だった模様。

 今年の10倍の面積になっちゃったけど、来年にはここでガツンと海外にアピールしていくぜ、という決意を固める。金も払う。うちみたいな会社からしたらバカみたいに高いけど、それでも東京のショウより安い。


 帰るついでに勝ち取ったブースを見に行く。


https://sphotos-b.xx.fbcdn.net/hphotos-ash4/408578_10152082300500752_967531681_n.jpg


 今年は3Mが展示していた。通路脇の絶好のポジション。やったるぜー。

 そのためにはちゃんとencantMOONつくって、ちゃんと売らないとなー。


 enchantMOONが目指すものはまあハッキリしてたりぼんやりしてたりするが、とにかく徹底的に拘ったのは手書きの質感。これだけで開発期間の1/3を費やしている。おかげで他の部分がまだぜんぜん最適化されてない。一点豪華主義。


 enchantMOONの手書きの質感は最新のIGZOパネルのデジタイザにも負けてない。と、あるメーカーの人が言ってくれた。他にも「わけがわからない。こんな速度でレスポンスできるわけがない」と海外のエンジニア。残念ながら海外メディアにはあまり注目されなかったが、日米問わずあちこちのメーカーの技術者が噂を聞きつけてやってきて、「どうしてこんなにスムーズに書けるのか」と質問をたくさん貰った。

https://sphotos-a.xx.fbcdn.net/hphotos-ash4/309611_10152082290300752_1315827211_n.jpg



 秘密は簡単。OSをカーネルレベルでチューニングしているのだ。ただしこれをやるとGoogleAndroid CTSにひっかかる可能性がある。だから大手メーカーはできない。Androidを捨てるか、手書きをとるか。大手メーカーさんは今の状況でAndroidを捨てられない。なんのしがらみもない独立系企業だからできるヤケクソチューンだ。


 CPUはシングルコアでも、手書きを最大限のスピードで実現する、ただそれだけのために作られたワンオフのデバイスドライバー。全てのOSの処理をバイパスし、手書きのレスポンスだけを最大限までチューンした。もちろんもっと速いCPUに載せかえればそれなりに速くはなるだろう。ただ、CPUがこれ以上速くなっても人間には知覚できるかギリギリのところだ。これ以上速くするには液晶の動作クロックを上げる必要があって、もちろん高周波数のIGZO向けにチューンすればそれなりに速くはできるだろう。


 デバイスドライバーレベルでアプリケーションに近いコードが走っている。デバイスドライバーが完全にenchantMOONのUI、MOON Phaseのためだけに作り込まれている。VRAMが書き変わるのはペンの周囲わずか9ドットのみ。データは全てベクトルで保持し、非同期にアプリへ通達されるがそれよりも速く画面が描きかわる。


 そもそも最初の手書きPDA、Newtonからもう20年経っている。Newtonですら手書きそのものはスラスラ描けたのに、ひと呼吸もふた呼吸もラグがある今のOSはなにかがおかしい。最新の端末ですら20年前の機種に負ける。処理能力は数百倍、いや数千倍はアップしてるだろう。解像度の高精細化を補ってあまりあるほど進化しているのに、アプリケーションがどれだけ頑張ってもNewtonにすら追いつけない。


 処理速度をあげるのに本来必要なのはコアのクロック周波数。しかし1GHzだ。もう充分だろう。NewtonのARM6は160MHz。enchantMOONは1GHz。6倍も速い。しかもGPUもある。本来は速くて当然なのだ。なのになぜ遅いのか。


 結局、OSのレイヤーを「清く、正しく、美しく」重ねて行くうちに、システムとしての清さや正しさといったものが、どこかユーザーの都合を置いてけぼりにして作られるようになった。


 これはAndroidだけでなく、iOSにもWindowsにも言えることだ。


 チップ屋さんは新しいチップを売りたいし、OS屋さんは新しいOSを売りたい。だからOSはどんどん重くなっていって、チップはどんどん速くなって行った。古いハードで新しいOSを動かすと堪え難く遅いから新しいハードを買う。新しいハードを最大限に活用するには新しいOSが必要になる。さらに新しいOSを買うと、また新しいハードが欲しくなる。この二人三脚サイクルでコンピュータ市場はどんどん大きくなった。


 だから新しいOSが重いのはむしろ業界には歓迎されることだった。

 それは新しいマシンが売れるチャンスが来たということだ。


 CPUは巨大なミミズのようなものだ。頭から命令を食い、お尻から結果を出力する。これをパイプライン構造と言う。


 たとえばユーザーがペンを走らせる。走った座標がCPUに割り込みを掛ける。ふつうのOSは、掛かった割り込みを一旦どこかのメモリに書き込んで、それからどこかそれを欲しがってるアプリなりモジュールなりに通知をメッセージングする。それから、一定時間が経過してタスクスイッチする。タスクスイッチすると、CPUはそれまでの自分の経験を一旦忘れる。パイプラインをリフレッシュする。リフレッシュするってのは、途中まで飲み込んだ命令を一旦吐き捨てるということ。このぶんだけ処理に無駄が出る。だからCPUにとって分岐は敵。いつまでも徹底的に敵だ。


 タスクスイッチすると、今度はアプリの気持ちになって、さっきまでの記憶のない自分が未来の自分に向かって送ったメッセージを受け取る。それを今度はGPUにメッセージングする。何層にも何層にもわたってメッセージをやりとりする。これでレスポンスが出せる訳がない。


 なぜそんな構造になっているのか。

 設計として美しいからだ。

 マイクロカーネル、バーチャルマシン・・・いろんな美辞麗句がこうした複雑で"美しい"システム設計を裏打ちした。



 みんなAndroidやiOSをOSだと思っているが、AndroidもiOSもUnix系システムの上に乗っている「ガワ」に過ぎない。本当のOSの部分はUnixだ。さらにいえば、それを構成するカーネルとデバイスドライバだ。


 今の最新のOSは、初代ファミコンにすらレスポンスで劣る可能性がある。理論上は高速だ。しかしやろうとすることが多すぎる。ファミコンは絶対にフレーム落ちしない。フレーム落ちするくらいなら、画面の描画をサボるような設計になっているのだ。フレームバッファを持たず、レスポンスを最大限にして描画品質を容赦なく落とす。


 昔、ゲームは全ての処理を1/60秒以内で終えることで快適な動作を実現していた。今のスマートフォンは20fpsでも平気な顔をしている。重要なのは、高いfpsがでることじゃない。fpsが安定していることなのだ。



 今のOSのUIの大半はベストエフォートだが画質優先だ。画面が乱れることを良しとしない。それが正しいと思ってる。enchantMOONはたとえ画面が乱れようともペンへのレスポンスを最優先する。どっちが正しいというわけじゃない。ただ、そういうキカイを目指している。


 速く走るためのクルマの正しい設計がGTRのようなFR-4WDだとしたら、enchantMOONはポルシェのようなRR-4WDかもしれない。本当の正解はない。感覚が違う。パワーが落ちようといい音のするマフラーを選ぶ・・・それがおまえの竜になるのか・・・ごめんちょっと行列にならんでるときに湾岸ミッドナイト読みすぎた。


 レスポンス速度に波があると、機械として最後の最後で信用できない、人間の知覚や認知とのズレにつながる。これは愉快じゃない。ボタンを押す、1/60秒後キッカリに反応が返って来る。これがユーザーインターフェースを考える上で一番重要なことだ。見た目がどうのとか形がどうのというのは二の次だ。


 とはいえ、これを実現するためにはマシン語レベルの最適化が必要だし、最低でもC言語で書く必要がある。だが全ての機能モジュールをマシン語やC言語で作るのは非現実的だ。何年あっても完成しないだろう。

 PNGやJPEGの展開ひとつとっても面倒くさいものとつきあわなきゃならない。

 そこで期間も予算も限られているenchantMOONでは、手書きに関するレスポンスだけを最大化することに割り切った。全てそのためにチューニングされている。


 重要な部分を除く大半のモジュールはJavaで書かれている。Javaは複雑なプログラムを書きやすく、そこそこ効率的である。ただそれだけの理由でDalvikVMを使っている。


 ただし、enchant.jsを動作させるためのバーチャルマシン、EagleVMは別だ。これはC言語で書かれている。Google V8は奇麗なコードが好きなGoogleが作ったとは思えないほど過激な仮想マシンだ。中間コードを使わずいきなりJavaScriptをターゲットマシンのマシン語にコンパイルして実行する。ただし、標準のオープンソース版Androidが用意するWebViewは驚くほど非力で、V8を搭載しようが恐ろしく鈍い。


 ソースの可読性と汎用性を優先して、CPUに最適化されてないしGPUもうまく活用されてない。enchant.jsで200スプライトくらいが動くサンプルをARMシングルコアで動かすとわずか1fpsしか出ない。これでは実用に耐えない。EagleVMを使うとこれが10倍以上高速になる。GPUやCPUの処理の流れ、そういったものを丁寧に最適化していく。フォントの描画とか、あきらかにややこしい部分だけはJavaのモジュールを使い、インタラクティブな処理はできるだけマシン語レベルで動作させる。


 開発者はC++言語のオーバーヘッドすら嫌い、C言語でベタ実装してる。もちろんこれはenchant.jsにからくりがある。EagleVMはenchant.jsの処理に特化しているため、通常のWebViewがケアすべき面倒なあれこれ(レイアウトとかz-indexとかCSSとか諸々)をまるごと無視できる。そのぶん速度に跳ね返ってくる訳だ。



 あまりメディアの人は気づかなかったが、地味に作り込んだポイントとして画面に手をついても描けるようになっている。これは絵を描いたり長い文章を書いたりするときに絶対に必要な機能だ。これができないから感圧式ではだめなのだ。


 ペンのオペレーションと指のオペレーションが完全に分離されている。

 ペンは徹底的に描くだけ、指は徹底的に操作するだけ、だ。


 実際のところ少量生産のデジタイザーパネルを調達するだけで、相当なコストになった。これがもっと安くできればenchantMOONの値段はいくらでも下げられる。ただし10万台単位のオーダーが必要。最初からそんなに売れるわけないから、数を絞って初期投資を抑えなくてはならない。


 いまのうちの会社の体力や資金力で、これ以上いいハードを用意することはできない。

 だから最後はソフトウェアの力で頑張る。


 それであの手書きが実現している。

 プロトタイプではまだまだ遅い様々な処理も、製品化までには最適化して高速化していく。


 ソフトウェアでできるところまでやる。僕らは徹底的にソフトウェア屋なのだ。



 そしてぼーっとブースで過ごしていると、なんかすごいtweetが来た。

f:id:shi3z:20130111233651p:image

https://twitter.com/abee2/status/289381758670102528

 要するにAKさんが「おもしろそうじゃん。一台欲しいな」と仰ったのだと言う。

 AKさん?カラシニコフ?・・・と思ったらAlan Kayさんだった。

 なんですと!?え、マジで? Dynabookの? は?


 なんかメールやりとりしてたらとんとん拍子でランチとりながらKay先生にenchantMOONをプレゼンすることに。


 さらにEvernoteの外村会長がプロトタイプもってサンフランシスコまで来てよ、とおっしゃる。


 やべー。

 なんだこの展開。


P.S.

 enchantMOONのハンズオンレポートが早速あがっています

 ケータイWatch http://k-tai.impress.co.jp/docs/event/ces2013/20130111_581493.html

 週アス http://weekly.ascii.jp/elem/000/000/123/123670/