offline-first apps with pouchdb and ibm...
TRANSCRIPT
![Page 1: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/1.jpg)
Cloud Computing Expo
Bradley Holt, Developer Advocate Wednesday, June 8, 2016
Offline-First Apps with PouchDB and IBM Cloudant
@BradleyHolt
![Page 2: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/2.jpg)
@BradleyHolt
![Page 3: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/3.jpg)
![Page 4: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/4.jpg)
IBM Cloud Data Services
Open for Data Acomprehensivepor.olioofopensourcedataservices
![Page 5: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/5.jpg)
Why offline first?
![Page 6: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/6.jpg)
![Page 7: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/7.jpg)
![Page 8: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/8.jpg)
Mobile First Design for the smallest device first and then apply progressive enhancement techniques to take advantage of larger screen sizes when available
![Page 9: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/9.jpg)
Offline First Design for offline usage first and then apply progressive enhancement techniques to take advantage of network connectivity when available
![Page 10: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/10.jpg)
Ubiquitous Connectivity Why offline first in a world of ubiquitous connectivity?
![Page 11: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/11.jpg)
The Eight Fallacies of Distributed Computing
1. The network is reliable 2. Latency is zero 3. Bandwidth is infinite 4. The network is secure 5. Topology doesn't change 6. There is one administrator 7. Transport cost is zero 8. The network is homogeneous
@BradleyHolt
![Page 12: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/12.jpg)
Mobile Backend What happens when your mobile backend service is unreachable?
![Page 13: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/13.jpg)
Benefits of Offline First
![Page 14: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/14.jpg)
Faster User Experience Better, faster user experience — both offline and online
![Page 15: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/15.jpg)
Works Offline Ability to disconnect and continue to work offline
![Page 16: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/16.jpg)
Battery and Bandwidth Limited access to power and communications infrastructure in disaster scenarios
![Page 17: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/17.jpg)
Offline-First Patterns and Anti-Patterns
![Page 18: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/18.jpg)
![Page 19: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/19.jpg)
![Page 20: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/20.jpg)
![Page 21: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/21.jpg)
![Page 22: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/22.jpg)
![Page 23: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/23.jpg)
Tools and Use Cases
![Page 24: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/24.jpg)
CouchDB Replication Protocol
@BradleyHolt
Cloudant Sync CouchDB PouchDB
CouchDB Replication Protocol
CouchDB
![Page 25: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/25.jpg)
![Page 26: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/26.jpg)
@BradleyHolt
![Page 27: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/27.jpg)
PouchDB Code Examples github.com/bradley-holt/offline-first
![Page 28: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/28.jpg)
![Page 29: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/29.jpg)
JSON Documents
{ _id: "6EF9D2B0-13D3-1378-8D30-39E3CE0B36C2", _rev: "1-0b457efcf82fb29492ef927ba5b6ee15", type: "Feature", geometry: { type: "Point", coordinates: [ -71.1028, 42.3691 ] }, properties: { session_id: "3486b13f-7b8a-8a96-dfbf-9b82800e367f", timestamp: 1422928591717 } }
@BradleyHolt
![Page 30: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/30.jpg)
Creating a PouchDB Database
var db = new PouchDB("smart-meter");
@BradleyHolt
![Page 31: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/31.jpg)
Creating a New Document
var db = new PouchDB("smart-meter");
db.put({
_id: "2014-11-12T23:27:03.794Z",
kilowatt_hours: 14
}).then(function() {
console.log("Document created");
}).catch(function(error) {
console.log(error);
});
@BradleyHolt
![Page 32: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/32.jpg)
Updating a Document
db.put({
_id: "2014-11-12T23:27:03.794Z",
kilowatt_hours: 14
}).then(function(response) { return db.get(response.id);}).then(function(doc) {
// Update the value for kilowatt hours
doc.kilowatt_hours = 15;
// Put the document back to the database
return db.put(doc);
}).catch(function(error) {
console.log(error);
});@BradleyHolt
![Page 33: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/33.jpg)
Querying a Database with allDocs
db.bulkDocs([
{_id: "2014-11-12T23:27:03.794Z", kilowatt_hours: 14},
{_id: "2014-11-13T00:52:01.471Z", kilowatt_hours: 15},
{_id: "2014-11-13T01:39:28.911Z", kilowatt_hours: 16},
{_id: "2014-11-13T02:52:01.471Z", kilowatt_hours: 17}
]).then(function(result) {
// Get all documents
return db.allDocs({include_docs: true});
}).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
});@BradleyHolt
![Page 34: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/34.jpg)
allDocs Options
§ include_docs– conflicts– attachments
§ startkey
§ endkey
§ inclusive_end (true by default)
§ limit
§ skip
§ descending
§ key
§ keys
@BradleyHolt
![Page 35: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/35.jpg)
Querying a Database with Map/Reduce
§ Most queries can be done with allDocs (in PouchDB)
§ Map functions transform documents into indexes
§ Reduce functions aggregate results of Map functions – _sum– _count– _stats
@BradleyHolt
![Page 36: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/36.jpg)
Querying a Database with PouchDB Find
§ Based on Cloudant Query (Mango)
§ Declarative indexes
§ MongoDB-style query language
@BradleyHolt
![Page 37: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/37.jpg)
PouchDB Data Storage Limits
@BradleyHolt
Firefox Chrome Opera 15+
Internet Exporer
10+
iOS Safari Safari (desktop)
Android PhoneGap / Cordova
Data Storage Limit
50MB (more with
user permission)
calculated calculated
250MB (prompts user at 10
MB)
50MB (prompts
user at 5MB and at
increments)
unlimited (prompts
user at 5MB and at
increments)
calculated / 200MB unlimited
Adapter IndexedDB IndexedDB / WebSQL
IndexedDB / WebSQL IndexedDB WebSQL WebSQL IndexedDB /
WebSQL SQLite
![Page 38: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/38.jpg)
Replication
![Page 39: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/39.jpg)
Apache CouchDB CouchDB is a document database featuring an HTTP API, JSON documents, and peer-to-peer replication
@BradleyHolt
![Page 40: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/40.jpg)
![Page 41: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/41.jpg)
Creating a Remote PouchDB Database
var remoteDb = new PouchDB("https://bradley-holt.cloudant.com/smart-meter");
@BradleyHolt
![Page 42: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/42.jpg)
Cross-Origin Resource Sharing (CORS) A security restriction implemented by browsers on cross-site HTTP requests
@BradleyHolt
![Page 43: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/43.jpg)
Bidirectional Replication
@BradleyHolt
![Page 44: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/44.jpg)
Bidirectional Replication
db.sync(remoteDb, {
live: false,
retry: false
}).on("change", function(info) {
// Replication has written a new document
console.log(info);
}).on("complete", function(info) {
// Replication has complete or been cancelled
console.log(info);
}).on("error", function(error) {
// Replication has stopped due to an unrecoverable failure
console.log(error);
}); @BradleyHolt
![Page 45: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/45.jpg)
Live Replication
@BradleyHolt
![Page 46: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/46.jpg)
Live Replication
var sync = db.sync(remoteDb, {
live: true,
retry: true
}).on("change", function(info) {
// Replication has written a new document
console.log(info);
}).on("complete", function(info) {
// Replication has complete or been cancelled
console.log(info);
}).on("error", function(error) {
// Replication has stopped due to an unrecoverable failure
console.log(error);
}); @BradleyHolt
![Page 47: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/47.jpg)
Filtered Replication
@BradleyHolt
![Page 48: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/48.jpg)
Filtered Replication
db.replicate.to(remoteDb, {
filter: function(doc) {
return doc._id >= "2014-11-13T00:00:00.000Z";
}
}).on("change", function(info) {
// Replication has written a new document
console.log(info);
}).on("complete", function(info) {
// Replication has complete or been cancelled
console.log(info);
});
@BradleyHolt
![Page 49: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/49.jpg)
One Database Per User
@BradleyHolt
userdb-d76846userdb-905cec
userdb-adc95b
userdb-c082f2
userdb-730bba
userdb-c3d3e5
userdb-a1ec1f
userdb-85a327userdb-9b9aba
userdb-85bcfe
userdb-da3d25
![Page 50: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/50.jpg)
![Page 51: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/51.jpg)
Boilerplates & Tools
§ Frontend Web Apps – React Boilerplate with Service Workers
<https://github.com/mbrio/react-boilerplate/tree/react-0.13-flummox-service>
§ Backend Web Apps – PouchDB npm Package
<https://www.npmjs.com/package/pouchdb> – PouchDB Server npm Package
<https://www.npmjs.com/package/pouchdb-server>
§ Mobile Apps – PouchDB for Ionic Framework
<https://github.com/nolanlawson/pouchdb-ionic> – "Hello world" Cordova app with PouchDB
<https://github.com/nolanlawson/pouchdb-cordova-hello-world> – "Hello world" Cordova app with PouchDB, using the SQLite Plugin
<https://github.com/nolanlawson/pouchdb-cordova-hello-world-with-sqlite-plugin> – Cloudant FoodTracker (uses Cloudant Sync for iOS)
<https://github.com/ibm-cds-labs/cloudant-food-tracker>
§ Desktop Apps – PouchDB for Electron (formerly Atom Shell)
<https://github.com/nolanlawson/pouchdb-electron> – PouchDB for Chrome packaged apps
<https://github.com/nolanlawson/pouchdb-chrome-app> – "Hello world" Chrome app with PouchDB
<https://github.com/nolanlawson/pouchdb-chrome-app-hello-world> – PouchDB for NW.js (aka Node-Webkit)
<https://github.com/nolanlawson/pouchdb-nw>
§ Internet of Things (IoT) Apps – Node-RED
<http://nodered.org/>
@BradleyHolt
![Page 52: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/52.jpg)
Cloudant FoodTracker An offline-first demo app built with Swift and Cloudant Sync for iOS
![Page 53: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/53.jpg)
![Page 54: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/54.jpg)
Offline Camp June 24th - 26th, Catskill Mountains
![Page 55: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/55.jpg)
offlinefirst.org/camp
![Page 56: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/56.jpg)
Image Credits
§ A mockup of the golden Apple iPhone 5S by Zach Vega, on Wikimedia Commons <https://commons.wikimedia.org/wiki/File:IPhone_5s.png>
§ Joan Touzet (@wohali), ASF Member, CouchDB PMC Member <https://twitter.com/wohali/status/595689720933445632>
§ Device landscape by Jeremy Keith, on Flickr <https://flic.kr/p/anLcHu>
§ Cloud Formation Over the Adirondacks by Bradley Holt, on Twitter <https://twitter.com/BradleyHolt/status/623030107679002624>
§ Cell phone tower by Gary Lerude, on Flickr <https://flic.kr/p/crL7TN> § Pneumatic Central by Sleestak, on Flickr <https://flic.kr/p/mRvRQ>
§ Colunas by Daniel Zanini H., on Flickr <https://flic.kr/p/5ZwHWv>
§ Speed DLR on Doklands by Umberto Rotundo, on Flickr <https://flic.kr/p/7GmcUo>
§ Waterfall by Paulo Valdivieso, on Flickr <https://flic.kr/p/oNkvRP>
§ Wildfire by U.S. Fish and Wildlife Service Southeast Region, on Flickr <https://flic.kr/p/8zkWGd>
§ Arduino Uno by Pete Prodoehl, on Flickr <https://flic.kr/p/a3ky7E> § Mango with section on a white background by bangdoll, on Flickr
<https://flic.kr/p/9CBP2h>
§ Warning by Stefano Brivio, on Flickr <https://flic.kr/p/tuBHA>
@BradleyHolt
![Page 57: Offline-First Apps with PouchDB and IBM Cloudantres.cdn.sys-con.com/session/3150/Bradley_Holt.pdf · Cloud Computing Expo Bradley Holt, Developer Advocate Wednesday, June 8, 2016](https://reader034.vdocuments.us/reader034/viewer/2022051600/5a9b7f997f8b9a451b8deb06/html5/thumbnails/57.jpg)
Questions?
@BradleyHolt