「HTML5 3Days Tech Talk 1」聴講メモ

行ってきた。先日の招待講演「HTML5 の過去、現在、未来」聴講メモ - 討論妄言録で文書モデルなどについて、今日のこれで API 周りを。ホットなところは、一通り聴いたことになるのかな。基本的には、あちこちで読んだりしていたけど、実際に使ってみての話は参考になるね。

個人的感想などは [かんそう] 形式で記述。一部、誤字の修正と返信関係への手入れあり。

イベント参加月間最後かな

  • 08:03:08 http://twitter.com/nsiena nsiena: えぇと。今日は、あれとこれを済ませて。午後の出張の準備をして。出張しごと終わったら、その足で HTML5 3Days Tech Talk <http://bit.ly/4lAJV5> に行く、っと。
  • 08:10:08 http://twitter.com/nsiena nsiena: HTML5 3Days Tech Talk は、参加者たくさんいるから、TL につぶやく人も多いに違いない。API とかデモとか中心だろうから、文章にするのもあれだし。期待する人もいないだろうし。というわけで、今日は聴く方に集中しよう。そうしよう。
  • | 09:38:09 http://twitter.com/bohnen bohnen: @nsiena があん、明日の方に申し込んじゃったですよ(T ^ T)
  • || 11:20:11 http://twitter.com/nsiena nsiena: @bohnen おっと、行く予定でしたか。あんなに(謎)、木曜の夜ってアピールしてたのに ^^; 会えないのは残念ですにゃー。
  • 08:17:08 http://twitter.com/nsiena nsiena: イベント参加月間は今日が最後だなぁ。しばらくはそれどころじゃなくなる予定。

開場前のハッシュタグ探し

  • 18:06:18 http://twitter.com/nsiena nsiena: おしごとおしまい。がっくり、しょぼん。/ 軽くおひるごはんした。気を取り直して、HTML5 3Days の会場に向かおう。
  • 18:55:18 http://twitter.com/nsiena nsiena: HTML5 3Days の会場に着いた。ちょっと暑いかも。 #hashtag ぷりーず。
  • 19:00:19 http://twitter.com/nsiena nsiena: さすがに人が多い。これだけいると、完全にお客様な状態になっちゃうな。
  • 19:07:19 http://twitter.com/nsiena nsiena: みつけた。ハッシュタグは #html5_dev_jp 。

HTML5で作るオフライン Web アプリケーション」

概要
  • 19:13:19 http://twitter.com/nsiena nsiena: 「HTML5で作るオフライン Web アプリケーション」: アプリキャッシュ, Web {Database,Storagr,Workers} 辺りの紹介と、それらを使うノウハウっぽいもの。 #html5_dev_jp
  • 19:15:19 http://twitter.com/nsiena nsiena: 「日本と観国韓国の盛り上がりが他国に比べて異常。Google Trends にて。 #html5_dev_jp
  • 19:18:19 http://twitter.com/nsiena nsiena: 「Gears オフラインウェブアプリは普及していない要因: 1) ニーズが顕在化してなかった, 2) ブラウザプラグインが障壁, 3) 開発人材不足 #html5_dev_jp
    • 19:27:19 http://twitter.com/nsiena nsiena: 送信ミス: 「普及を見込める要因: 1') モバイル端末の普及, 2') ブラウザネイティブな実装, 3') 標準化による開発者増 : "オープンウェブプラットフォーム" だ #html5_dev_jp
関連 API の紹介
  • 19:23:19 http://twitter.com/nsiena nsiena: 「アプリキャッシュ: 画像やスクリプトなど、サーバから取得しなければならないリソースをローカルにキャッシュするための仕組み。キャッシュ対象をキャッシュマニフェストに記述。 #html5_dev_jp
  • 19:26:19 http://twitter.com/nsiena nsiena: わぁ。へたってる方のバッテリをさしたままだった。減りが速い ><;
  • 19:29:19 http://twitter.com/nsiena nsiena: 「デモ。マニフェストファイルの更新をうまく検出してくれないバグがあったりするのが現状。手動で消したりして、動作を確認。」 [はまりどころだなぁ] #html5_dev_jp
    • 21:24:21 http://twitter.com/kinneko kinneko: まだそんなもんなんですねぇ。 RT @nsiena: 「デモ。マニフェストファイルの更新をうまく検出してくれないバグがあったりするのが現状。手動で消したりして、動作を確認。」 [はまりどころだなぁ] #html5_dev_jp
  • 19:30:19 http://twitter.com/nsiena nsiena: 「開発時はアプリキャッシュを使わないとか、マニフェストファイルをサーバ側で動的に生成するとかして、どうにか開発してる #html5_dev_jp
  • 19:35:19 http://twitter.com/nsiena nsiena: 「updateready イベントをイベントリスナで監視できる。swapCache() メソッドで入れ替えたりするコードを書ける。 #html5_dev_jp
  • 19:36:19 http://twitter.com/nsiena nsiena: 「Web Database: SQL を使える DB エンジン。ウェブデザイナが JavaScriptSQL を発行しないといけない日が来るかも? #html5_dev_jp
  • 19:39:19 http://twitter.com/nsiena nsiena: 「ドメイン (オリジン) ごとに DB 領域を分割。DB ごとに索引を張ったり、いろいろ好きなように。問合せには同期・非同期 API の両方ががある。非同期はいつでも可だけど面倒。同期は Worker 内に限定されるが使いやすい。 #html5_dev_jp
  • 19:43:19 http://twitter.com/nsiena nsiena: 「Web Storage: 鍵値組ストレージエンジン。簡単に使える。同じく、ドメインごとに別領域。ローカルストレージとセッションストレージがある。 #html5_dev_jp
  • 19:45:19 http://twitter.com/nsiena nsiena: 「ML の議論にて、ローカルストレージにトランザクションが導入されるかもしれない。少し面倒になるかも #html5_dev_jp
  • 19:46:19 http://twitter.com/nsiena nsiena: 「Web Workers: バックグラウンドスレッド。並行処理可能になる。」 [ひゃっほー! ようやくだー ^^=
  • 19:48:19 http://twitter.com/nsiena nsiena: 「一般的なスレッドとは異なり、共有される変数はない。window, document も不可。JS スクリプトに依存していると全滅して泣くことになるよ。メッセージングにより対処する。 #html5_dev_jp
  • 19:52:19 http://twitter.com/nsiena nsiena: 「ログを書く例: UI スレッドにログを転送して、UI スレッドで書くようにする。わー彼ワーカの処理は、(現状では?) デバッガで追えない。メッセージングコードはすぐ複雑になる。対策ライブラリ作ったから試してみてね(^^)。 #html5_dev_jp
HTML5 時代のウェブアプリアーキテクチャ: Open Web Architecture
  • 19:54:19 http://twitter.com/nsiena nsiena: 「API の紹介は終了。以下、HTML5 時代のウェブアプリアーキテクチャ: (A) オフライン動作可能, (B) クライアント内で処理を完結, (C) 処理結果の永続化を含めて多くのロジックをクライアント上で実現する #html5_dev_jp
  • 19:56:19 http://twitter.com/nsiena nsiena: いつぞや議論していた、RESTful ウェブサービスクライアントの話に通じるところがある。ある意味で自然な流れとも言える。 #rws
  • 19:58:19 http://twitter.com/nsiena nsiena: 「(A') ネットに依存せずに動作可能, (B') 高速で省リソース (良好なユーザビリティ), (C') 差分アップロード/ダウンロードのタイミング制御可能 (回線やバッテリの状況に合わせられる) #html5_dev_jp
  • 20:00:20 http://twitter.com/nsiena nsiena: 「可能性: ア不ラインオフラインのウェブ利用, デスクトップアプリの置き換え, 拡張現実アプリでも応用, …… #html5_dev_jp
  • 20:03:20 http://twitter.com/nsiena nsiena: 「Open Web Architecture 採用には, ノウハウの蓄積が少なすぎるのが最大の問題。DB 付きクライアントを含めた設計手法, 差分通信の設計・実装, クライアント状態に応じた処理の切替え, DB未実装のクライアントや容量不足時の対処, データ変更の衝突, ……
  • 20:05:20 http://twitter.com/nsiena nsiena: 「Alexing Framework 作ってるよ。簡単に作れるようにするのが目標。クラウド上でデータモデルを定義するだけで, クライアントがデータモデルを操作でき、オフラインでも編集可能に! #html5_dev_jp
  • 20:10:20 http://twitter.com/nsiena nsiena: デモなぅ。「サーバで採番される ID はオフラインでは NULL に。サーバを再起動して同期すると反映されて、ID も採番される」[ほうほう。なかなか良く出来てる印象。] #html5_dev_jp
質疑応答
  • 20:15:20 http://twitter.com/nsiena nsiena: 一通り終了。Q&A に。「Q. オンラインかオフラインかをどう判別する? A. window.navigator のプロパティやイベントなど。でも、ブラウザがそう判断した後なので、確実ではない。」 #html5_dev_jp
  • 20:17:20 http://twitter.com/nsiena nsiena: 「Q. シンクライアント化の流れからファットクライアントに移るように見えるが、リソースの少ない環境で動くものなのか? ケータイでも行けそうか? A. リソースは確かに消費する。重たいので、ネイティブにはかなわない。移植しやすさなどで勝負か。 #html5_dev_jp
  • 20:21:20 http://twitter.com/nsiena nsiena: 「Q. Alexing の同期アルゴリズムは? 高速化の手法などは? 相手によっては索引を持ってたりするのを使うのか? A. 今は、アップロードはログをジャーナル化している。ダウンロードは難しい。全部は無理な事もある。データ特性による。 #html5_dev_jp
  • 20:21:20 http://twitter.com/nsiena nsiena: 「(続) Q. 分散コンピューティングでのキューイングみたいな問題が? A. Alexing で隠蔽したい! #html5_dev_jp
  • 20:25:20 http://twitter.com/nsiena nsiena: 「Q. セッションストレージのセッションって? A. セッションストレージは、ドメインごとに用意され、複数のウィンドウからアクセスできる。全ての関連ウィンドウが消えたら、消去される (アクセスできなくなる)。 #html5_dev_jp
  • 20:28:20 http://twitter.com/nsiena nsiena: 「Q. データをサーバと同期できるという話だが、JS で? 電力残量などが見えないとできないけどできそう? A. 前者は yes。後者は現状では無理。UI で対処したり。将来的にできるようになるかも? #html5_dev_jp

休憩

  • 20:29:20 http://twitter.com/nsiena nsiena: 休憩。 #html5_dev_jp
  • 20:29:20 http://twitter.com/nsiena nsiena: あれ。聴くのに専念する宣言したのに、なんで打ち込んでるんだろぅ…… --;? #html5_dev_jp

Canvas チュートリアル

canvas 要素の概要
  • 20:33:20 http://twitter.com/nsiena nsiena: 「Canvas チュートリアル: 抽象的な話でなく、開発者向けにどんな手段があるのか頭に入れられるようにするのが話の目標。途中からコードだらけになるよ。」 [予想通り、メモるの無理そうだ ^^;] #html5_dev_jp
  • 20:37:20 http://twitter.com/nsiena nsiena: 「Canvas: 図を描くための要素。CanvasRendringContext2D API が用意されてる。 #html5_dev_jp
  • 20:38:20 http://twitter.com/nsiena nsiena: Canvas: JS で描画, 描いた後で個別に認識不可能, 描画は高速, ピクセル操作可能。SVG: XML形式, JS で要素ごとに操作可能, 要素がお多すぎると思い, ピクセル操作不可能。」 [つまるところ、ビットマップ vs ベクター?] #html5_dev_jp
  • 20:42:20 http://twitter.com/nsiena nsiena: 「Canvas はウィジットを作るのは苦手。HTML で実現して部分的に描くか、SVG で全体を作った方がいい。 #html5_dev_jp
  • 20:43:20 http://twitter.com/nsiena nsiena: 「メジャーブラウザ中で IE のみ未実装。でも、ExplorerCanvas <http://excanvas.sourceforge.net/> が部分的に実装。VML で実現。 #html5_dev_jp
  • 20:45:20 http://twitter.com/nsiena nsiena: 「HTML5 でなく、XHTML1.0 や HTML4.01 でも動いちゃうよ。妥当文書ではなくなるけれど。楽しもうよ。 #html5_dev_jp
canvasでの描画方法
  • 20:47:20 http://twitter.com/nsiena nsiena: この辺からコード中心かな。「canvas 要素に id を個別に付けた方がいろいろ便利。JS で、描画前に canvas 要素のコンテキストを取得。ここで id 属性を利用。 #html5_dev_jp
  • 20:49:20 http://twitter.com/nsiena nsiena: 「まず canvas 上にパスを作成して、図形を定義。beginPAth(), moveTo(), lineTo, closePath()。最後に storoke() で描画。 #html5_dev_jp
  • 20:51:20 http://twitter.com/nsiena nsiena: 「左上が原点。x 軸は右方向。y 軸は下方向。ここから、描画メソッドのパレード。」 [省略する ^^;] #html5_dev_jp
  • 20:57:20 http://twitter.com/nsiena nsiena: 「パス作成メソッド: 直線系, 円弧系, 三次/二次ベジェ曲線, 矩形。描画メソッド: 軌跡 storoke(), 塗り潰し fill()。描く前に {storoke,fill}Style プロパティに、 CSS の色リテラルを指定できる。 #html5_dev_jp
  • 20:59:20 http://twitter.com/nsiena nsiena: 「canvas の描画コンテキスト。透過指定 globalAlpha プロパティがある。fillText() で、テキストもビットマップで描ける。文字の輪郭と文字色は {storoke,fill}Style プロパティで指定。 #html5_dev_jp
  • 21:03:21 http://twitter.com/nsiena nsiena: 「線の端点のスタイル (lineCap)、接続スタイル (lineJoin)、マイター限界比率 (miterLimit) も!」 [細かいところでやけに高機能だな ^^;] #html5_dev_jp
  • 21:06:21 http://twitter.com/nsiena nsiena: 「画像を重ね描画 drowImage()。トリミングもできるよ。JS の Image オブジェクトを作成しただけではだめで、ロードを待たなければならない。onload イベント。キャッシュを回避する工夫が必要。 #html5_dev_jp
  • 21:08:21 http://twitter.com/nsiena nsiena: 「2次元画像の 3元数に対する変換行列でアフィン変換できる。線形代数を勉強してね。『プログラミングのための線形代数』(オーム社) をお薦め #html5_dev_jp
  • 21:14:21 http://twitter.com/nsiena nsiena: 「ピクセル操作メソッド: {create,get,put}ImageData()。ImageData は、width, height, data (R,G,B,a ピクセル列) をプロパティとするオブジェクト。data を直接弄るのはお薦めしない。 #html5_dev_jp
デモ〜質疑応答
  • 21:15:21 http://twitter.com/nsiena nsiena: 「デモ。お約束のマンデルブロ集合。2 秒程度で描けちゃう。拡大もできる。」 [速い……] #html5_dev_jp
  • 21:18:21 http://twitter.com/nsiena nsiena: 「画像のエッジ抽出したり。アニメーションしている時計を、動くまま transform() で変形できたり。canvas はアニメーション用ではないので誤解なきよう。でも、高速なので、setTimeout() や setInterval() でパラパラアニメできちゃう。 #html5_dev_jp
  • 21:19:21 http://twitter.com/nsiena nsiena: 「リファレンスサイトなどをいくつか。あとでウェブに公開する予定。以上でおしまい。 #html5_dev_jp
  • 21:20:21 http://twitter.com/nsiena nsiena: 「Q. インタラクティブなアプリで、別スレッドで描画させたりできる? A. ワーカは描画できない。計算を別ワーカで行なうようにする。」 [DOM をいじれない、という制約から] #html5_dev_jp

しゅーりょー

  • 21:22:21 http://twitter.com/nsiena nsiena: 「おしまい。ブログやつぃたぁに書いてね。」 [結局、いっぱい書いてしまった……。迷惑だったかも。] #html5_dev_jp
  • | 21:29:21 http://twitter.com/zakkas783 zakkas783: @nsiena 議題:しーなさんはホントに徹夜なのかについて 超人すぎる…
  • 22:53:22 http://twitter.com/nsiena nsiena: おうちついたー。あついよ、あついよ。今朝はあんなに涼しかったのに。しゃわるるるー。