Presentation is loading. Please wait.

Presentation is loading. Please wait.

My first computer: The Apple ][ It wanted to be programmed.

Similar presentations

Presentation on theme: "My first computer: The Apple ][ It wanted to be programmed."— Presentation transcript:



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










Download ppt "My first computer: The Apple ][ It wanted to be programmed."

Similar presentations

Ads by Google