HTML5 wizardry met appcache, localstorage en geolocation
woensdag 16 oktober 13
Mante
@mantebridts
Laurens
@peeterslaurens
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
localstorage woensdag 16 oktober 13
woensdag 16 oktober 13
4KB 1994 IE2 (ja, 2) client of server
woensdag 16 oktober 13
4KB 1994 IE2 (ja, 2) client of server
woensdag 16 oktober 13
elke http request => vertragend
unencrypted
woensdag 16 oktober 13
woensdag 16 oktober 13
wij willen:
woensdag 16 oktober 13
wij willen: veel opslag online en offline geen extra server-stuff opslag van lange duur flexibiliteit (via javascript?!)
woensdag 16 oktober 13
wij willen: veel opslag online en offline geen extra server-stuff opslag van lange duur flexibiliteit (via javascript?!)
woensdag 16 oktober 13
de oplossing:
woensdag 16 oktober 13
de oplossing:
woensdag 16 oktober 13
de oplossing:
?
?
?
woensdag 16 oktober 13
localStorage sessionStorage Web SQL indexedDB
woensdag 16 oktober 13
HTML5 STORAGE
Web SQL indexedDB
woensdag 16 oktober 13
Web SQL indexedDB
woensdag 16 oktober 13
Web SQL
woensdag 16 oktober 13
Web SQL
woensdag 16 oktober 13
Syntax
woensdag 16 oktober 13
Syntax var mijnDatabase = window.openDatabase("mijnDatabase", "1.0", "Dit is mijn database", 1024*1024); mijnDatabase.transaction(function(tx) { tx.executeSql("Hier plaats je een standaard sql statement met variabelen ? en ?", [‘x’, ‘y’]); });
woensdag 16 oktober 13
Syntax var mijnDatabase = window.openDatabase("mijnDatabase", "1.0", "Dit is mijn database", 1024*1024); mijnDatabase.transaction(function(tx) { tx.executeSql("Hier plaats je een standaard sql statement met variabelen ? en ?", [‘x’, ‘y’]); });
woensdag 16 oktober 13
IndexedDB var request = indexedDB.open("library"); request.onupgradeneeded = function() { // The database did not previously exist, so create object stores and indexes. var db = request.result; var store = db.createObjectStore("books", {keyPath: "isbn"}); var titleIndex = store.createIndex("by_title", "title", {unique: true}); var authorIndex = store.createIndex("by_author", "author"); // Populate with initial data. store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); }; request.onsuccess = function() { db = request.result; };
woensdag 16 oktober 13
IndexedDB var request = indexedDB.open("library"); request.onupgradeneeded = function() { // The database did not previously exist, so create object stores and indexes. var db = request.result; var store = db.createObjectStore("books", {keyPath: "isbn"}); var titleIndex = store.createIndex("by_title", "title", {unique: true}); var authorIndex = store.createIndex("by_author", "author"); // Populate with initial data. store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); }; request.onsuccess = function() { db = request.result; };
woensdag 16 oktober 13
IndexedDB VS webSQL
woensdag 16 oktober 13
IndexedDB VS webSQL
woensdag 16 oktober 13
sessionStorage & localStorage
woensdag 16 oktober 13
sessionStorage & localStorage
woensdag 16 oktober 13
sessionStorage & localStorage syntax ==
simpele key-value paren
wel bepaalde limieten
enkel strings
2.5MB (chrome), 5MB (firefox),...
woensdag 16 oktober 13
per “origin” (geservede pagina)
Syntax localStorage.setItem(‘key’, ‘value’); var mijnWaarde = localStorage.getItem(‘key’);
of localStorage[‘key’] = ‘value’; var mijnWaarde = localStorage[‘key’];
woensdag 16 oktober 13
maar wat met objecten? var mijnObject = {name: ‘Mante’, level: ‘Ninja’}
localStorage.setItem(‘objectje’, JSON.stringify(mijnObject));
var resultaat = localStorage.getItem(‘objectje’); resultaat = JSON.parse(resultaat);
woensdag 16 oktober 13
woensdag 16 oktober 13
geolocation
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
“We willen in onze apps zorgen voor een betere UX”
woensdag 16 oktober 13
“We willen in onze apps zorgen voor een betere UX” sensoren van de devices gebruiken
woensdag 16 oktober 13
“We willen in onze apps zorgen voor een betere UX” sensoren van de devices gebruiken
tijd
woensdag 16 oktober 13
beweging
bluetooth, ...
LOCATIE! Joepie!
Syntax?
navigator.geolocation.getCurrentPosition(function(p){ console.log(p); });
woensdag 16 oktober 13
Hoe zit het in elkaar?
woensdag 16 oktober 13
Hoe zit het in elkaar?
locatie op basis van IP, MAC, wifi-location, gps, gsm-masten,...
woensdag 16 oktober 13
Security
Werkt enkel nadat de USER expliciet toestemming heeft gegeven, elke keer opnieuw, per page. (w3c specs)
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
application cache
woensdag 16 oktober 13
application cache
woensdag 16 oktober 13
application cache
woensdag 16 oktober 13
application cache
woensdag 16 oktober 13
application cache
woensdag 16 oktober 13
application cache + offline browsing + snelheid + minder server load
woensdag 16 oktober 13
syntax CACHE MANIFEST ./icn/144x144.png ./css/style.css ./css/normalize-2.1.1.css ./data-fallback/groenzone.json ./js/app/router/applicationRouter.js ./js/app/view/templates/home.tmpl ./js/app/view/templates/noResult.tmpl ./js/app/view/templates/compiled/detail.js ./js/app/application.js ./js/main.js./js/lib/backbone/backbone-1.0.0.min.js ./js/lib/handlebars/handlebars-runtime-1.0.0.3.js ./js/lib/require/require-2.1.5.min.js ./img/history.svg ./img/logo_d01.svg ./img/tpark_logo.svg ./index.html #8e5d7a869f835fd11b2c97148d18a16c NETWORK: *
woensdag 16 oktober 13
syntax
cache.manifest-bestand: CACHE MANIFEST index.html css/style.css img/logo.png
woensdag 16 oktober 13
syntax CACHE MANIFEST index.html css/style.css img/logo.png # hierboven lijst je al je te cachen files op # Comments worden voorafgegaan door een hekje! NETWORK api.twitter.com/* # je kan gebruik maken van wildcards # in het network stuk vermeld je alle files/urls die niet mogen # gecached worden / die de app niet in de cache mag gaan zoeken. FALLBACK index.php offlinewarning.html #version: 1.2 (24/04/2013)
woensdag 16 oktober 13
syntax
woensdag 16 oktober 13
syntax
extensie mag je zelf kiezen maar... mime-type: text/cache-manifest
woensdag 16 oktober 13
syntax
applicationCache.status
applicationCache.update() applicationCache.swapCache()
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
http://district01.be/tpark
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
woensdag 16 oktober 13
AMD Asynchronous Module Definitions => structuur
woensdag 16 oktober 13
AMD Asynchronous Module Definitions => structuur
woensdag 16 oktober 13
woensdag 16 oktober 13
<script>
<script> <script>
<script>
<script> <script>
<script>
<script> <script> <script>
<script>
woensdag 16 oktober 13
<script>
woensdag 16 oktober 13
één js-file, included in the index.html :)
woensdag 16 oktober 13
één js-file, included in the index.html :) => configuration of all js-files
woensdag 16 oktober 13
district01.be/tpark/start.zip
woensdag 16 oktober 13
Live walkthrough “Require.js” + coding in backbone :)
district01.be/tpark/start.zip
woensdag 16 oktober 13
Live walkthrough “Require.js” + coding in backbone :)
Download start.zip op
district01.be/tpark/start.zip
woensdag 16 oktober 13
district01.be/tpark/backboneistof.zip
woensdag 16 oktober 13
Q&A
woensdag 16 oktober 13
Resources http://district01.be/tpark/start.zip http://district01.be/tpark/final.zip http://backbonejs.org/ http://requirejs.org/
web-guru’s:
http://www.district01.be/ Paul Irish @ paul_irish
Jonathan Stark @ jonathanstark
http://opendata.antwerpen.be/
John Resig @jeresig
Thomas Fuchs @ thomasfuchs
https://www.sublimetext.com/
Wilson Miner @ wilsonminer
bruce lawson @ brucel
David Kaneda @ DavidKaneda
Jeremy Ashkenas @ jashkenas
Dave Balmer @ balmer
BrendanEich @ BrendanEich
twitter: @district01
http://handlebarsjs.com
woensdag 16 oktober 13
Extra extra, read all about it!
GRUNT
woensdag 16 oktober 13