SlideShare a Scribd company logo
1 of 25
Download to read offline
HTML5勉強会@福岡




          HTML5, WebApplications




                     とくなが たかひさ ( id : totty_jp )

<html>5
i. 自己紹介.
      I am
             名前   :   とくなが たかひさ
             所属   :   EC-One 九州事業部
             業務   :   SE or PG (Java, Ruby, Flex)
             性別   :   ♂
             年齢   :   そのくらいです。

             blog : http://d.hatena.ne.jp/totty_jp/
             twitter : totty_jp




<html>5
ii. テイジン
      html5での新機能は、要素だけじゃない!
             Drag&Drop(+ File API)
                  ファイルや要素をDragして、ブラウザへのDropができる
             Web SQL Database
                  RDB
             Indexed Database API (Web Strage)
                  オブジェクトDB
             Web Storage
                  クライアント側でのデータ永続化
             Web Workers
                  スレッドによるバックグラウンド処理
             Web Sockets
                  独自プロトコルでの双方向サーバー通信
             Geolocation
                  位置情報取得
             Data Cache API
                  オフラインでのキャッシュ

<html>5
iii. Offline Web Application
      html5でのオフラインキャッシュ機能は、重要な役割
             Storageなどに貯めたデータをOnline時に同期化させるとか
                 Google もGearsの開発を中止
                 Offline Gmailには、今後、html5の機能へ移行するはず


      クラウドなど、ネットワーク中心の技術が発展すること
       により、オフラインでも稼動する技術は必然に
             ということで、今日は、その辺で使えそうな機能の話




<html>5
v. Drag&Drop
      ブラウザでのファイルや要素からのD&DをサポートしたAPI
             File APIとの組合せで、OSからのバイナリデータも読み込める

      API
             Use
                   addEventListener(eventHandler, callbackFunction(event){~}, boolean)
             EventHandler
                   dragstart
                   drag
                   dragenter
                   dragover
                   dragleave
                   drop
                   dragend
             Methods
                   event.dataTransfer
                         getData(mimeType)/setData(mimeType, “”) ⇒ mymeType:text/plain, text/html
                   event.preventDefault()
                         ドロップを拒否しない
                   event.stopProgration()
                         イベントの停止

<html>5
v. Drag&Drop
      Sample
             dragDropSample.html
          <!DOCTYPE html>
          <html>
            <head>
              <meta charset="UTF-8">
              <title>Drag & Drop Sample</title>
              <script defer>
                                                非同期読み込み
                  --// (次のページへ) //--            <script src=“test.js” async></script>

              </script>                       ページ読み込み完了後、読み込み
            </head>                           <script src=“test.js" defer></script>
            <body>
              <div id="dragger" draggable="true">totty</div>
              <div>&nbsp</div>
              <div id="dropper"></div>
            </body>
          </html>


<html>5
v. Drag&Drop
      Sample
             dragDropSample.html
          <script defer>
            var dragman = document.getElementById("dragger");
            var dropman = document.getElementById("dropper");
            dragman.addEventListener("dragstart", function(event){
              event.dataTransfer.setData("text/plain", dragman.textContent);
              return true;
            }, false);
            dropman.addEventListener("dragover", function(event){
              event.preventDefault();
              return false;
            }, false);
            dropman.addEventListener("drop", function(event){
              dropman.innerHTML += event.dataTransfer.getData("text/plain");
              event.stopPropagation();
              return false;
            }, false);
          </script>


<html>5
vi. Web Storage
      クライアント側での、データの保存を実現
             W3CのHTML5仕様から分離された
                   次世代で期待とのこと
             2種類の保存方法(sessionStorage < localStorage)
                   sessionStorage ⇒ Windowベース
                   localStorage ⇒ Domainベース[ protocol, domain, port ]

      API(key/value形式で、値を保持することができる)
             Use
                   localStorage、sessionStorage
                         そのまま、利用可能(Windowオブジェクト)
             Methods
                   localStorage.setItem(key, value) / localStorage.key = value
                         storageへのKey&Valueの設定
                   localStorage.getItem(key) / value = localStorage.key
                         storageからのKeyでのValueの抽出
                   localStorage.removeItem(key)
                         storageからのItem削除
                   localStorage.clear()
                         storageのクリア
                   localStorage.length()
                         storageのサイズ
                   localStorage.key(index)
                         storageからのKeyの取得


<html>5
vi. Web Storage
      Sample
             localStorageSample.html
          <body onload="showList()">
            <select id="msgList" size="15"></select>
            <table>
              <tr>
                <th>Subject</th><th>Message</th>
              </tr>
              <tr>
                <td><input type="text" id="subject" /></td>
                <td><input type="text" id="msg" /></td>
                <td><button onClick=“addMsg()">Send</button></td>
                <td><button onClick="delMsg()">Delete</button></td>
              </tr>
            </table>

            <table id="msgTable">
              <!-- メッセージテーブル -->
            </table>
          </body>

<html>5
vi. Web Storage
      Sample
             localStorageSample.html(続き)
          <script>
            // メッセージの表示
            function showList() {
              var msgTable = document.getElementById("msgTable");
              msgTable.innerHTML =
                "<tr><th>subject</th><th>message</th></tr>";
              for (var i = 0; i < localStorage.length; i++) {
                var key = localStorage.key(i);
                msgTable.innerHTML += "<tr>" +
                  "<td id='ls" + i + "'>" + key + "</td>" +
                  "<td id='lm" + i + "'>" + localStorage[key] + "</td>" +
                </tr>";
              }
            }

              -- // (省略) // --

          </script>

<html>5
vi. Web Storage
      Sample
             localStorageSample.html(続き)
          <script>
            -- // (省略) // --

              // メッセージの登録
              function addMsg() {
                var subject = document.getElementById("subject").value;
                var msg = document.getElementById("msg").value;
                localStorage[subject] = msg;
                showList();
              }
              // メッセージの削除
              function delMsg() {
                var subject = document.getElementById("subject").value;
                localStorage.removeItem(subject);
                showList();
              }

          </script>

<html>5
vii.Web SQL Database
      クライアント側での、RDBの構築を実現
             つまり、SQLが使える
             SQLite3互換・・・(反対意見多い模様)


      API
             Use
                   db = openDatabase(dbName, version, displayName, dbSize[byte])
                   db = openDatabaseSync(dbName, version, displayName, dbSize[byte])
                         DBとのコネクション開始(なければ生成)(Windowオブジェクト)
             Methods
                   ts = db.transaction(callbackFunc, errorFunc, successFunc)
                         トランザクション開始(複数ブラウザで操作されるため)
                   ts.executeSql(sql, [params], successFunc(ts, SQLResultSet), errorFunc)
                         SQLの実行
                   SQLResultSetのプロパティ
                         insertId ・・ insertを実行した結果の生成ID
                         rowsAffected ・・ SQLの実行結果の対象件数
                         rows ・・ 検索結果<rows.length, rows.item(index).columnName>

<html>5
vii.Web SQL Database
      Sample
             databaseSample.html
          <body onload="showList()">
            <select id="msgList" size="15"></select>
            <table>
              <tr>
                <th>Subject</th><th>Message</th>
              </tr>
              <tr>
                <td><input type="text" id="subject" /></td>
                <td><input type="text" id="msg" /></td>
                <td><button onClick=“addMsg()">Send</button></td>
                <td><button onClick="delMsg()">Delete</button></td>
              </tr>
            </table>

            <table id="msgTable">
              <!-- メッセージテーブル -->
            </table>
          </body>

<html>5
vii.Web SQL Database
      Sample
             databaseSample.html(続き)
          <script>
            var db = openDatabase("fiveDB", "", "html5 Sample", 1048576);
            db.transaction(function(ts) {
              ts.executeSql("create table if not exists msgTable(user, msg)");
            });
            -- // (省略) // --
          </script>

             DBが生成される




<html>5
vii.Web SQL Database
      Sample
             databaseSample.html(続き)
          <script>
            function showList() {
              db.transaction(function(ts) {
                ts.executeSql("select * from msgTable", [], function(ts, rs) {
                  var msgTabel = document.getElementById("msgTable");
                  msgTable.innerHTML =
                    "<tr><th>subject</th><th>message</th></tr>";
                  var rows = rs.rows;
                  for (var i = 0, i < rows.length; i++) {
                    var row = rows.item(i);
                    msgTable.innerHTML += "<tr>" +
                      "<td id='ls" + i + "'>" + row.subject + "</td>" +
                      "<td id='lm" + i + "'>" + row.msg + "</td>" +
                    </tr>";
                  }
                });
              });
            }

<html>5
vii.Web SQL Database
      Sample
             databaseSample.html(続き)
            --// (省略) // --
            function sndMsg() {
              var user = document.getElementById("user").value;
              var msg = document.getElementById("msg").value;
              db.transaction(function(ts) {
                ts.executeSql("insert into msgTable (user, msg) values (?, ?)",
                  [user, msg], function() { showList(); });
                });
              }
            }
            function clrMsg() {
              db.transaction(function(ts) {
                ts.executeSql("delete from msgTable", [], function() {
                  showList();
                });
              });
            }
          </script>

<html>5
viii.Web Workers
      BackGroundでのThread処理を実現
             DOMへのアクセスは、できません
             双方でのやりとりは、メッセージをPOSTしてPOSTしかえしてもらう

      API
             Use
                   new Worker(url)
                         workerの生成
             EventHandler
                   onmessage = callbackFunction(event)
                         コールバック(成功時)
                   onerror = callbackFunction(event)
                         コールバック(失敗時)
             Methods
                   importScripts(url, url, ・・)
                         外部スクリプトのインポート
                   postMessage(message)
                         メッセージの送信(html, workerの双方とも利用可能)



<html>5
viii.Web Workers
      Sample
             workersSample.html
            <script defer>
              function start() {
                var t1 = new Worker('thread.js');
                var t2 = new Worker('thread.js');
                t1.onmessage = function (event) {
                  document.getElementById('r1').textContext = event.data;
                };
                t2.onmessage = function (event) {
                  document.getElementById('r2').textContext = event.data;
                };
               }
            </script>
          </head>
          <body>
            <p>Result1=<span id="r1"></span></p>
            <p>Result2=<span id="r2"></span></p>
            <button onClick="start()">Start</button>
          </body>

<html>5
viii.Web Workers
      Sample
             workersSample.html(続き)
             thread.js
          onmessage = function (event) {
            var flg = true;
            var data = 0
            while (flg) {
              data = Math.random()*100;
              if (/*dataの値で、たまに true の条件なにか*/) {
                flg = false;
              }
            }
            postMessage(data);
          };

          onerror = function (error) {
            postMessage(error);
          };



<html>5
ix. Web Sockets
      独自プロトコルでサーバと双方向通信を実現
             HTTPと違うのは、コネクションが張りっぱなしにできる点
             双方向から、postMessageでやりとりできる

      API
             Use
                   new WebSocket(“ws://domain/hello”) ⇒ 平文通信81ポート
                         wss://・・・ ⇒ 暗号化通信816ポート
             EventHandler
                   ws.onopen
                         通信開始イベント
                   ws.onclose
                         通信終了イベント
                   ws.onmessage
                         メッセージの受信イベント
             Methods
                   ws.send(“Hello WebSocket”)
                         メッセージの送信(文字列のみ)
                   ws.onclose()
                         通信終了
                   ws. readyState
                         状態の確認


<html>5
x. Application Cache
      html, css, js をキャッシュし、オフラインでもWebAppを利用できる
             サーバのMIMEタイプには「text/cache-manifest 」が必要

      API
             Use
                   <html manifest=“~.manifest”></html>
                         キャッシュ対象のファイルを指定したmanifestファイルを読み込む
                   cache = (window).applicationCache
                         ApplicationCacheオブジェクト
             EventHandler
                   onchecking
                   onerror
                   onnoupdate
                   ondownloading
                   onprogress
                   onupdateready
                   oncache
                   onobsolete
             Methods
                   cache.status ・・ UNCACHE, IDLE, CHECKING, DOWNLOADING, UPDATEREADY, OBSOLETE
                   cache.update()
                   cache.swapCache()

<html>5
x. Application Cache
      Sample
             cacheSample.html
          <!DOCTYPE HTML>
          <html manifest="hoge.manifest">
          <head>
            <meta charset="UTF-8">
          </head>
          <body>
            --// (省略) //
          </body>
          </html>

             hoge.manifest
          CACHE MANIFEST
          # VERSION 1000
          CACHE:
          image/logo.jpg
          image/back.jpg
          NETWORK:
          response.cgi

<html>5
xi. Browser
      API別ブラウザ対応状況
                                ひとこと説明          IE   Firefox   Safari   Chrome
                                                8      3.5       4         4
   Drag&Drop API          ドラッグ&ドロップを扱うAPI       ×      ○        ×         ×

   File API               ファイルを扱うAPI            ×    3.6β       ×         ×

   Indexes Database API   Non-SQLのローカルストレージ     ○      ○        ○         ?

   Web SQL Database       クライアントサイドのDB          ×      ×        ○         ×

   Web Workers            バックグラウンド処理            ×      ○        ○         ○

   Web Storage            Key/Value型のストレージ      ×      △        ○         ×

   Web Sockets            コネクション張りっぱなProtocol   ×      ×        ×         ×

   Data Cache API         オフライン・データキャッシュAPI     ×      ○        ○         ○

   Geolocation            位置情報取得API             ×      ○        ○         △




<html>5
xii.まとめ
      繰り返します

      HTML5のオフラインキャッシュ機能はネットワーク中心
       の世界が広がることにより、重要な技術になる

      だけど、見てもらって分かった通り、わりと簡単

      みんなで、楽しいオフラインライフを!?




<html>5
xiii.参考
      HTML5変更点
             http://dev.w3.org/html5/html4-differences/
             http://www.html5.jp/trans/w3c_differences.html
      Offline Web Applications
             http://www.w3.org/TR/offline-webapps/
             http://www.html5.jp/trans/w3c_offline_webapps.html
      Web SQL Database
             http://dev.w3.org/html5/webdatabase/
      Indexed Database API (Web Simple DB)
             http://dev.w3.org/2006/webapi/WebSimpleDB/
             http://www.w3.org/TR/WebSimpleDB/
      Web Storage
             http://dev.w3.org/html5/webstorage/
             http://www.html5.jp/trans/w3c_webstorage.html
      Web Sockets
             http://dev.w3.org/html5/websockets/
             http://www.html5.jp/trans/w3c_websockets.html
      Data Cache
             http://dev.w3.org/2006/webapi/DataCache/
      株式会社あゆた
             http://ayuta.co.jp/html5-samples/

<html>5

More Related Content

What's hot

Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a NutshellTsuyoshi Miyake
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめKazumune Katagiri
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Michio Koyama
 
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報yoshikawa_t
 
HTMLの要素の選び方
HTMLの要素の選び方HTMLの要素の選び方
HTMLの要素の選び方TENTO_slide
 
Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Michio Koyama
 
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話do_aki
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
Chrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンChrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンYoichiro Tanaka
 
Web講座 第6回
Web講座 第6回Web講座 第6回
Web講座 第6回nanametown
 
[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズJun Terashita
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
CoreData 非同期データ処理
CoreData 非同期データ処理CoreData 非同期データ処理
CoreData 非同期データ処理次朗 永島
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Yuki Higuchi
 

What's hot (20)

Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a Nutshell
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
 
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
 
HTMLの要素の選び方
HTMLの要素の選び方HTMLの要素の選び方
HTMLの要素の選び方
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
実践Knockout
実践Knockout実践Knockout
実践Knockout
 
Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
Chrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンChrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターン
 
Web講座 第6回
Web講座 第6回Web講座 第6回
Web講座 第6回
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
CoreData 非同期データ処理
CoreData 非同期データ処理CoreData 非同期データ処理
CoreData 非同期データ処理
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
 
Teclab3
Teclab3Teclab3
Teclab3
 

Viewers also liked

Magazine comparison
Magazine comparisonMagazine comparison
Magazine comparisonguest640b1a
 
Power Point Etiquette
Power Point EtiquettePower Point Etiquette
Power Point Etiquetteguest6080c7
 
2nd Magazine Analysis
2nd Magazine Analysis2nd Magazine Analysis
2nd Magazine Analysisguest640b1a
 
1st Magazine Analysis
1st Magazine Analysis1st Magazine Analysis
1st Magazine Analysisguest640b1a
 
Who Am I Template
Who Am I TemplateWho Am I Template
Who Am I Templateguest3a1956
 
1st Magazine Analysis
1st Magazine Analysis1st Magazine Analysis
1st Magazine Analysisguest640b1a
 
1st Magazine Analysis
1st Magazine Analysis1st Magazine Analysis
1st Magazine Analysisguest640b1a
 
10 Magazine Cover Plan
10 Magazine Cover Plan10 Magazine Cover Plan
10 Magazine Cover Planguest640b1a
 
Double Page Spread Analysis XXL
Double Page Spread Analysis XXLDouble Page Spread Analysis XXL
Double Page Spread Analysis XXLguest640b1a
 
Magazine Cover Plan
Magazine Cover PlanMagazine Cover Plan
Magazine Cover Planguest640b1a
 
Social Networking / Security
Social Networking / SecuritySocial Networking / Security
Social Networking / Securityjeffsypersma
 
Questionnaire Results
Questionnaire ResultsQuestionnaire Results
Questionnaire Resultsguest640b1a
 
Magazine Cover Plan
Magazine Cover PlanMagazine Cover Plan
Magazine Cover Planguest640b1a
 
OpenStack Log Mining
OpenStack Log MiningOpenStack Log Mining
OpenStack Log MiningJohn Stanford
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
Fake It 'Til You Make It
Fake It 'Til You Make ItFake It 'Til You Make It
Fake It 'Til You Make ItJohn Stanford
 

Viewers also liked (19)

Magazine comparison
Magazine comparisonMagazine comparison
Magazine comparison
 
Power Point Etiquette
Power Point EtiquettePower Point Etiquette
Power Point Etiquette
 
2nd Magazine Analysis
2nd Magazine Analysis2nd Magazine Analysis
2nd Magazine Analysis
 
1st Magazine Analysis
1st Magazine Analysis1st Magazine Analysis
1st Magazine Analysis
 
Who Am I Template
Who Am I TemplateWho Am I Template
Who Am I Template
 
1st Magazine Analysis
1st Magazine Analysis1st Magazine Analysis
1st Magazine Analysis
 
1st Magazine Analysis
1st Magazine Analysis1st Magazine Analysis
1st Magazine Analysis
 
10 Magazine Cover Plan
10 Magazine Cover Plan10 Magazine Cover Plan
10 Magazine Cover Plan
 
Double Page Spread Analysis XXL
Double Page Spread Analysis XXLDouble Page Spread Analysis XXL
Double Page Spread Analysis XXL
 
Magazine Cover Plan
Magazine Cover PlanMagazine Cover Plan
Magazine Cover Plan
 
Social Networking / Security
Social Networking / SecuritySocial Networking / Security
Social Networking / Security
 
Goldstone Overview
Goldstone Overview Goldstone Overview
Goldstone Overview
 
Questionnaire Results
Questionnaire ResultsQuestionnaire Results
Questionnaire Results
 
Make Up
Make UpMake Up
Make Up
 
Questionnaire
QuestionnaireQuestionnaire
Questionnaire
 
Magazine Cover Plan
Magazine Cover PlanMagazine Cover Plan
Magazine Cover Plan
 
OpenStack Log Mining
OpenStack Log MiningOpenStack Log Mining
OpenStack Log Mining
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Fake It 'Til You Make It
Fake It 'Til You Make ItFake It 'Til You Make It
Fake It 'Til You Make It
 

Similar to Html5 Web Applications

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -Yuji Takayama
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
初めての Data api
初めての Data api初めての Data api
初めての Data apiYuji Takayama
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 arisu yano
 
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた Shumpei Shiraishi
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tipsyoshikawa_t
 

Similar to Html5 Web Applications (20)

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
 
Client Side Cache
Client Side CacheClient Side Cache
Client Side Cache
 
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
 
Ajax basic
Ajax basicAjax basic
Ajax basic
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 

Html5 Web Applications

  • 1. HTML5勉強会@福岡 HTML5, WebApplications とくなが たかひさ ( id : totty_jp ) <html>5
  • 2. i. 自己紹介.  I am  名前 : とくなが たかひさ  所属 : EC-One 九州事業部  業務 : SE or PG (Java, Ruby, Flex)  性別 : ♂  年齢 : そのくらいです。  blog : http://d.hatena.ne.jp/totty_jp/  twitter : totty_jp <html>5
  • 3. ii. テイジン  html5での新機能は、要素だけじゃない!  Drag&Drop(+ File API)  ファイルや要素をDragして、ブラウザへのDropができる  Web SQL Database  RDB  Indexed Database API (Web Strage)  オブジェクトDB  Web Storage  クライアント側でのデータ永続化  Web Workers  スレッドによるバックグラウンド処理  Web Sockets  独自プロトコルでの双方向サーバー通信  Geolocation  位置情報取得  Data Cache API  オフラインでのキャッシュ <html>5
  • 4. iii. Offline Web Application  html5でのオフラインキャッシュ機能は、重要な役割  Storageなどに貯めたデータをOnline時に同期化させるとか  Google もGearsの開発を中止  Offline Gmailには、今後、html5の機能へ移行するはず  クラウドなど、ネットワーク中心の技術が発展すること により、オフラインでも稼動する技術は必然に  ということで、今日は、その辺で使えそうな機能の話 <html>5
  • 5. v. Drag&Drop  ブラウザでのファイルや要素からのD&DをサポートしたAPI  File APIとの組合せで、OSからのバイナリデータも読み込める  API  Use  addEventListener(eventHandler, callbackFunction(event){~}, boolean)  EventHandler  dragstart  drag  dragenter  dragover  dragleave  drop  dragend  Methods  event.dataTransfer  getData(mimeType)/setData(mimeType, “”) ⇒ mymeType:text/plain, text/html  event.preventDefault()  ドロップを拒否しない  event.stopProgration()  イベントの停止 <html>5
  • 6. v. Drag&Drop  Sample  dragDropSample.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Drag & Drop Sample</title> <script defer>  非同期読み込み --// (次のページへ) //-- <script src=“test.js” async></script> </script>  ページ読み込み完了後、読み込み </head> <script src=“test.js" defer></script> <body> <div id="dragger" draggable="true">totty</div> <div>&nbsp</div> <div id="dropper"></div> </body> </html> <html>5
  • 7. v. Drag&Drop  Sample  dragDropSample.html <script defer> var dragman = document.getElementById("dragger"); var dropman = document.getElementById("dropper"); dragman.addEventListener("dragstart", function(event){ event.dataTransfer.setData("text/plain", dragman.textContent); return true; }, false); dropman.addEventListener("dragover", function(event){ event.preventDefault(); return false; }, false); dropman.addEventListener("drop", function(event){ dropman.innerHTML += event.dataTransfer.getData("text/plain"); event.stopPropagation(); return false; }, false); </script> <html>5
  • 8. vi. Web Storage  クライアント側での、データの保存を実現  W3CのHTML5仕様から分離された  次世代で期待とのこと  2種類の保存方法(sessionStorage < localStorage)  sessionStorage ⇒ Windowベース  localStorage ⇒ Domainベース[ protocol, domain, port ]  API(key/value形式で、値を保持することができる)  Use  localStorage、sessionStorage  そのまま、利用可能(Windowオブジェクト)  Methods  localStorage.setItem(key, value) / localStorage.key = value  storageへのKey&Valueの設定  localStorage.getItem(key) / value = localStorage.key  storageからのKeyでのValueの抽出  localStorage.removeItem(key)  storageからのItem削除  localStorage.clear()  storageのクリア  localStorage.length()  storageのサイズ  localStorage.key(index)  storageからのKeyの取得 <html>5
  • 9. vi. Web Storage  Sample  localStorageSample.html <body onload="showList()"> <select id="msgList" size="15"></select> <table> <tr> <th>Subject</th><th>Message</th> </tr> <tr> <td><input type="text" id="subject" /></td> <td><input type="text" id="msg" /></td> <td><button onClick=“addMsg()">Send</button></td> <td><button onClick="delMsg()">Delete</button></td> </tr> </table> <table id="msgTable"> <!-- メッセージテーブル --> </table> </body> <html>5
  • 10. vi. Web Storage  Sample  localStorageSample.html(続き) <script> // メッセージの表示 function showList() { var msgTable = document.getElementById("msgTable"); msgTable.innerHTML = "<tr><th>subject</th><th>message</th></tr>"; for (var i = 0; i < localStorage.length; i++) { var key = localStorage.key(i); msgTable.innerHTML += "<tr>" + "<td id='ls" + i + "'>" + key + "</td>" + "<td id='lm" + i + "'>" + localStorage[key] + "</td>" + </tr>"; } } -- // (省略) // -- </script> <html>5
  • 11. vi. Web Storage  Sample  localStorageSample.html(続き) <script> -- // (省略) // -- // メッセージの登録 function addMsg() { var subject = document.getElementById("subject").value; var msg = document.getElementById("msg").value; localStorage[subject] = msg; showList(); } // メッセージの削除 function delMsg() { var subject = document.getElementById("subject").value; localStorage.removeItem(subject); showList(); } </script> <html>5
  • 12. vii.Web SQL Database  クライアント側での、RDBの構築を実現  つまり、SQLが使える  SQLite3互換・・・(反対意見多い模様)  API  Use  db = openDatabase(dbName, version, displayName, dbSize[byte])  db = openDatabaseSync(dbName, version, displayName, dbSize[byte])  DBとのコネクション開始(なければ生成)(Windowオブジェクト)  Methods  ts = db.transaction(callbackFunc, errorFunc, successFunc)  トランザクション開始(複数ブラウザで操作されるため)  ts.executeSql(sql, [params], successFunc(ts, SQLResultSet), errorFunc)  SQLの実行  SQLResultSetのプロパティ  insertId ・・ insertを実行した結果の生成ID  rowsAffected ・・ SQLの実行結果の対象件数  rows ・・ 検索結果<rows.length, rows.item(index).columnName> <html>5
  • 13. vii.Web SQL Database  Sample  databaseSample.html <body onload="showList()"> <select id="msgList" size="15"></select> <table> <tr> <th>Subject</th><th>Message</th> </tr> <tr> <td><input type="text" id="subject" /></td> <td><input type="text" id="msg" /></td> <td><button onClick=“addMsg()">Send</button></td> <td><button onClick="delMsg()">Delete</button></td> </tr> </table> <table id="msgTable"> <!-- メッセージテーブル --> </table> </body> <html>5
  • 14. vii.Web SQL Database  Sample  databaseSample.html(続き) <script> var db = openDatabase("fiveDB", "", "html5 Sample", 1048576); db.transaction(function(ts) { ts.executeSql("create table if not exists msgTable(user, msg)"); }); -- // (省略) // -- </script>  DBが生成される <html>5
  • 15. vii.Web SQL Database  Sample  databaseSample.html(続き) <script> function showList() { db.transaction(function(ts) { ts.executeSql("select * from msgTable", [], function(ts, rs) { var msgTabel = document.getElementById("msgTable"); msgTable.innerHTML = "<tr><th>subject</th><th>message</th></tr>"; var rows = rs.rows; for (var i = 0, i < rows.length; i++) { var row = rows.item(i); msgTable.innerHTML += "<tr>" + "<td id='ls" + i + "'>" + row.subject + "</td>" + "<td id='lm" + i + "'>" + row.msg + "</td>" + </tr>"; } }); }); } <html>5
  • 16. vii.Web SQL Database  Sample  databaseSample.html(続き) --// (省略) // -- function sndMsg() { var user = document.getElementById("user").value; var msg = document.getElementById("msg").value; db.transaction(function(ts) { ts.executeSql("insert into msgTable (user, msg) values (?, ?)", [user, msg], function() { showList(); }); }); } } function clrMsg() { db.transaction(function(ts) { ts.executeSql("delete from msgTable", [], function() { showList(); }); }); } </script> <html>5
  • 17. viii.Web Workers  BackGroundでのThread処理を実現  DOMへのアクセスは、できません  双方でのやりとりは、メッセージをPOSTしてPOSTしかえしてもらう  API  Use  new Worker(url)  workerの生成  EventHandler  onmessage = callbackFunction(event)  コールバック(成功時)  onerror = callbackFunction(event)  コールバック(失敗時)  Methods  importScripts(url, url, ・・)  外部スクリプトのインポート  postMessage(message)  メッセージの送信(html, workerの双方とも利用可能) <html>5
  • 18. viii.Web Workers  Sample  workersSample.html <script defer> function start() { var t1 = new Worker('thread.js'); var t2 = new Worker('thread.js'); t1.onmessage = function (event) { document.getElementById('r1').textContext = event.data; }; t2.onmessage = function (event) { document.getElementById('r2').textContext = event.data; }; } </script> </head> <body> <p>Result1=<span id="r1"></span></p> <p>Result2=<span id="r2"></span></p> <button onClick="start()">Start</button> </body> <html>5
  • 19. viii.Web Workers  Sample  workersSample.html(続き)  thread.js onmessage = function (event) { var flg = true; var data = 0 while (flg) { data = Math.random()*100; if (/*dataの値で、たまに true の条件なにか*/) { flg = false; } } postMessage(data); }; onerror = function (error) { postMessage(error); }; <html>5
  • 20. ix. Web Sockets  独自プロトコルでサーバと双方向通信を実現  HTTPと違うのは、コネクションが張りっぱなしにできる点  双方向から、postMessageでやりとりできる  API  Use  new WebSocket(“ws://domain/hello”) ⇒ 平文通信81ポート  wss://・・・ ⇒ 暗号化通信816ポート  EventHandler  ws.onopen  通信開始イベント  ws.onclose  通信終了イベント  ws.onmessage  メッセージの受信イベント  Methods  ws.send(“Hello WebSocket”)  メッセージの送信(文字列のみ)  ws.onclose()  通信終了  ws. readyState  状態の確認 <html>5
  • 21. x. Application Cache  html, css, js をキャッシュし、オフラインでもWebAppを利用できる  サーバのMIMEタイプには「text/cache-manifest 」が必要  API  Use  <html manifest=“~.manifest”></html>  キャッシュ対象のファイルを指定したmanifestファイルを読み込む  cache = (window).applicationCache  ApplicationCacheオブジェクト  EventHandler  onchecking  onerror  onnoupdate  ondownloading  onprogress  onupdateready  oncache  onobsolete  Methods  cache.status ・・ UNCACHE, IDLE, CHECKING, DOWNLOADING, UPDATEREADY, OBSOLETE  cache.update()  cache.swapCache() <html>5
  • 22. x. Application Cache  Sample  cacheSample.html <!DOCTYPE HTML> <html manifest="hoge.manifest"> <head> <meta charset="UTF-8"> </head> <body> --// (省略) // </body> </html>  hoge.manifest CACHE MANIFEST # VERSION 1000 CACHE: image/logo.jpg image/back.jpg NETWORK: response.cgi <html>5
  • 23. xi. Browser  API別ブラウザ対応状況 ひとこと説明 IE Firefox Safari Chrome 8 3.5 4 4 Drag&Drop API ドラッグ&ドロップを扱うAPI × ○ × × File API ファイルを扱うAPI × 3.6β × × Indexes Database API Non-SQLのローカルストレージ ○ ○ ○ ? Web SQL Database クライアントサイドのDB × × ○ × Web Workers バックグラウンド処理 × ○ ○ ○ Web Storage Key/Value型のストレージ × △ ○ × Web Sockets コネクション張りっぱなProtocol × × × × Data Cache API オフライン・データキャッシュAPI × ○ ○ ○ Geolocation 位置情報取得API × ○ ○ △ <html>5
  • 24. xii.まとめ  繰り返します  HTML5のオフラインキャッシュ機能はネットワーク中心 の世界が広がることにより、重要な技術になる  だけど、見てもらって分かった通り、わりと簡単  みんなで、楽しいオフラインライフを!? <html>5
  • 25. xiii.参考  HTML5変更点  http://dev.w3.org/html5/html4-differences/  http://www.html5.jp/trans/w3c_differences.html  Offline Web Applications  http://www.w3.org/TR/offline-webapps/  http://www.html5.jp/trans/w3c_offline_webapps.html  Web SQL Database  http://dev.w3.org/html5/webdatabase/  Indexed Database API (Web Simple DB)  http://dev.w3.org/2006/webapi/WebSimpleDB/  http://www.w3.org/TR/WebSimpleDB/  Web Storage  http://dev.w3.org/html5/webstorage/  http://www.html5.jp/trans/w3c_webstorage.html  Web Sockets  http://dev.w3.org/html5/websockets/  http://www.html5.jp/trans/w3c_websockets.html  Data Cache  http://dev.w3.org/2006/webapi/DataCache/  株式会社あゆた  http://ayuta.co.jp/html5-samples/ <html>5