2016/09/03に参加したHTML5 Conferenceのメモ。
基調講演含め6つのセッションを聞いた。
適当に要約しているため実際の内容と変わっているかもしれないがあしからず(あと敬称略)。
NetflixがHDR対応
WEBもHDRに対応する必要があるのでは
e.g. あるピクセルの色をこう変えようみたいに、エンジニアができないのはどうなのか
Big data, AI, IoTなどのバズワード→インターネットの上に乗っかっている(インターネットがあるから成り立っている)
UNIXとWebの対比(計算資源、管理・提供方法)→Webは大規模分散OSと言える
テレビの世界はHTML5準拠
車のインパネはいずれ全てディスプレイになるだろう
ビットコインではどうやって信用(trust)を作るのか?
Webなんだから、みんなで信用を作りたい、Blockchainはその可能性があるから面白い
W3CではWeb of Things (WoT)の仕様策定が進んでいる(現状はWoT Servantが有力らしい)
HTML5 nearly equal Web
- アプリケーションとしてのWeb
- メディアとしてのWeb
- 基盤技術としてのWeb
これまでアプリケーションとして色々足りない機能を足してきた(APIとかComponentsとか)
まだディスプレイ、キーボード、マウスの中に閉じているものが多い
Progressive Web Apps
Web Assembly
最近は言語がJSであるというのもなくなってきていて、果たしてWebとは何なのかという疑問がある
- Googleの空間音響システム
- Progressive Web Apps
- Web Assembly etc..
多くのユーザはスマホを使っている、デスクトップではなく
モバイルWebのUXが良くない→それのアンチテーゼがニュースキュレーションアプリ
GoogleのAMP(Accelerated Mobile Pages)
モバイルWebの課題が解決される仕組み
Googleにキャッシュする
AMP対応と表示される
ただ、推進への課題がある
e.g. CMSの対応が遅い、セマンティックのミスなどがある
- HTTP/2
- QUIC
- SSL/TLS
モバイルアプリの最近↓
ストアに発見してもらうのも大変、インストールしてもらうのも大変
Webを再投資、再発明しなければならない
VMを増やそうっていう取り組みがWeb Assembly
JSのVM・処理系(V8, SpiderMonkeyとか)以外に
それがWASM VM(拡張子は.wasm)
unityのゲームがasm.jsでjsに変換される
作られたjsは50MBとか100MBになるw
標準的なライブラリとかが全部くっつくからめちゃでかくなる→ロードが遅い
ダウンロードも遅いし、実行までも時間がかかる
その時間を短くしたいのがWeb Assembly
文字列→(字句解析)→トークン列→(構文解析)→抽象構文木→(意味解析)→中間表現→(最適化・コード生成)→実行コード
jsは実行の後にコンパイルする(よく使うやつだけ)
asm.jsは先にコンパイルする
nativeはダウンロードの前にコンパイルされたやつを落とす
wasmは実行前にコンパイルするのは変わらないが、構文解析をブラウザに落とす前に済ませておくのが違い
parseは時間がかかるのでその分省略すると速くなるよって話
Web Assemblyは単なる構文解析の結果、実行するにはコンパイルが必要
手で書くものではない
- .c, .cppをemcc(ツール)で.asm.jsに変換→.asm.jsを.wastに変換して.wasmに変換
- もしくはclang/emccで.wasmに直接変換
cからhtmlが生成されるw
cとかc++をそのまま変換して使う
どうやってwebページに組み込むか?
jsの命令を叩いて読み込み
fetchで取って、Wasmっていうオブジェクトがいるのでそれを使って読み込む
CからJSの関数を呼ぶことも出来る
Cにインタフェースだけ定義されている場合
JSに中身が定義されているようなケース
- ネイティブコードではない
- 型付けされたスタックマシン、レジスタではない(サイズを小さくしたいから)
- 連続なメモリモデル(パースとかのコストを下げたいから)
- 抽象構文木(AST)のバイナリフォーマット
- 構造化されたコントロールフローを定義
- モジュールシステム
ソースを表示できる、読めるのはWeb Assemblyのポイント→難読化とかには使いづらい
ヒープもスタックも同じ領域にとられる
とにかくそのまま実行できるバイナリコードではない
ブラウザに新しいVM作って、命令セットがあるイメージ
Cとかで書けるのがいい
大規模なプログラムを書くためにできてる
JSの置き換えではない
- asm.jsと同じことしか今できない = 数値演算しかできない
- domのAPIを直接呼べない、JSの関数を呼ぶことになる
- スレッドがない、シングル
- スレッド
- 共有メモリ
- ダイナミックリンク
- 0コストの例外
- 固定長のSIMD
ここ1年のService Workerの動向まとめ
スライドを見よう
シーグラフ(SIGGRAPH)@アメリカにて、WebGL2.0がドライバテストをパス
WebGL2.0の実現味が増してきた
OpenGL ES 3.0相当のAPIを叩けるのがWeb GL 2.0
普段からWebGLをぺろぺろしてるおじさんじゃないとなかなか恩恵を受けづらいが、
three.jsなどのライブラリの、普段ぺろぺろしてるコントリビュータが
その恩恵をライブラリに反映してくれるだろう
WebVRは仕様
WebVR自体の仕様は複雑なものはない、少ない
3つの情報を取得してAPIを使う
APIはデバイスやセンサーから情報を取得するのが主な仕事
3DはWebGLでコンテンツを作る
Is WebVR Ready?で対応状況を確認できる
A Neural Network Playgroundで遊べる
- ハードマックス方式
- ソフトマックス方式
本質的にはフォトショのフィルターといっしょ
分類に役立つ特徴を抽出するフィルターをいくつか使って
分類の精度を上げる
フィルターが抽出する特徴自体も学習させる
だからめっちゃ時間・リソースがかかる
- 学習済みモデルをベースにして、個別データでさらにモデルをチューニング→かっこよく言うと「転移学習」
- クライアント上でリアルタイムな学習、ユーザに合わせて進化していく
ソフトウェアの開発モデル(CI/CD)と似ている
既存モデルがあって、新規データで学習させて改訂版モデルを作成
テストが成功すれば既存モデルを置き換えるっていうことをやっている
このプロセスを回す定番ツールがいずれできるのでは。。。?
静止画と違って、ネットワークの組み方が変わる
リカーシブなんとかっていうらしい
1枚目のフレームの学習結果を2枚目のフレームとともにまたネットワークに突っ込むというイメージ
スライドを見よう!