Download presentation
Presentation is loading. Please wait.
Published byTina Milliman Modified over 9 years ago
3
My first computer: The Apple ][ It wanted to be programmed
12
Bigger is better. Multiplatform means more. Make it a webapp!
13
What’s a web app?.j s What do we have?
14
It’s immediate (just refresh the page) It’s popular (just bing around for answers) It’s fast (CSS animations, rendering speed) It’s simple (e.g., list viewer is just a ) It’s resilient (doesn’t crash on errors) HTML5 & CSS3 instead of XAML
15
It’s immediate (just refresh the page) It’s popular (just bing around for answers) It’s reasonably fast (with modern JITs) It’s not simple (e.g., 20 ways of doing OO) It’s not resilient (a typo makes it crash) Now to that JavaScript thing....js
25
Standard Model: Shared Data on Server Database Programmer communicates with server Each query is a server roundtrip Programmer exposed to Slow connection (unpleasant experience) Connection errors, disconnected operation (app stops working) Atomicity errors (cannot update multiple entities simultaneously) App Code Data API
26
Revisions Model: Replica on Device Database Local Replica Sync API App Code Data API Separation of Data API from Sync API. Much simpler to write apps that provide good experience Predictable latency (access to local storage) Works when disconnected Support for atomic updates (a kind of transaction)
27
Target: Non-enterprise Apps Need simple solution for average app programmers Most apps can benefit from structured offline storage User settings, navigation context, collaborative apps, social features in apps Best target: small DBs that fit on device For example, index of your MP3 collection Not necessarily all actual MP3 files
28
Data Model: Cloud Types Primitive cloud types Cloud Integers (get, set, add) Cloud Strings (get, set, set-if-empty) Structured cloud types Cloud Tables (cf. relational tables with implicit primary key) Cloud Arrays (cf. key-value stores) Cloud Sets (cf. observed-remove sets by Shapiro et al.)
29
fork copies state join merges state Cloud types define automatic conflict resolution at joins Diagrams are flexible, permit Fully asynchronous communication disconnected operation fork join Global State is a Revision Diagram
30
Example: Birdwatching Let’s build an app for a birdwatchers Let’s first try something simple: count the number of bald eagles we have all seen. var eagles : cloud integer;
31
Don’t use Set() to increment code on device 1code on device 2 eagles.Set(1) storage eagles.Set(1) eagles.Get() -> 1 var eagles : cloud integer; Set() operations do not commute. Last writer wins.
32
code on device 1code on device 2 eagles.Add(1) storage eagles.Add(1) eagles.Get() -> 2 var eagles : cloud integer; Use Add() to increment
33
Next step: different birds Want to count not just eagles, but all kinds of birds Can use a cloud array for this (similar to key-value store, with values having cloud types) var birds: cloud array [ name: string ] { count : cloud integer }
34
Direct access to entries code on device 1code on device 2 birds[“jay”].count.Add(5) storage birds[“jay”].count.Add(1) birds[“gull”].count.Add(2) birds[“jay”].count.Get() -> 6 var birds: cloud array [name: string] {count : cloud integer} No initialization necessary Conceptually, all (infinite) entries already exist -> avoid create-if-not-exist antipattern
35
What we have today Research Detailed mechanics of how track updates and consistently applying them to replicas, for a bunch of “cloud types”: integers, strings, tables, key-value stores TouchDevelop implementation all of the cloud types directly integrated into language & IDE windows phone client azure service based on table/blob storage
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.