SlideShare une entreprise Scribd logo
1  sur  91
Télécharger pour lire hors ligne
BUILDING YOUR MOBILE BACKEND WITH PARSE 
ALI PARR 
PLATFORM PARTNERSHIPS
IDENTITY 
SHARING 
PUSH NOTIFICATIONS 
APP INSTALLS 
MONETIZATION
PUSMAHPO NISPNDHO EIEATNTNIRISFZTIITAINCTATGAYLIOTLSINONS
2 YEAR 
CORE API STABILITY GUARANTEE
VERSIONING 
FOR ALL APIs
48 HOUR 
MAJOR BUG FIX SLA
BUILD GROW 
App Installs 
Sharing 
Messaging 
MONETIZE 
Payments 
Audience Network 
Parse 
Login 
App Events 
App Links
UI BINDINGS 
FILES 
PUSH NOTIFICATIONS 
SOCIAL 
USER SESSIONS 
DATA MODELS 
CACHING 
NETWORKING 
APP BUSINESS LOGIC 
APP SECURITY 
MIDDLEWARE 
ROUTING 
RESTful API 
DATABASE BINDINGS 
LOAD BALANCING 
PHYSICAL SERVERS
YOUR APP 
UI BINDINGS 
FILES 
PUSH NOTIFICATIONS 
SOCIAL 
USER SESSIONS 
DATA MODELS 
CACHING 
NETWORKING 
APP BUSINESS LOGIC 
APP SECURITY 
MIDDLEWARE 
ROUTING 
RESTful API 
DATABASE BINDINGS 
LOAD BALANCING 
PHYSICAL SERVERS
YOUR APP 
PARSE
Parse Core Parse Push Parse Analytics
Completely Open Source
PARSE CORE 
Your backend in the cloud 
Save data to and fetch 
data from Parse 
Run custom app code on 
Parse’s servers 
Easily create and manage 
user accounts and sessions
THE F8 APP
THE F8 APP 
Key Value 
Title 
Everything You Need to Know About 
Login 
Time 12:30 
Speaker Eddie O’Neil 
isFavorite FALSE
SAVING TO PARSE 
ParseObject talk = new ParseObject(”Talk”); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SAVING TO PARSE 
ParseObject talk = new ParseObject(”Talk”); 
talk.put(“title”, “Opening Keynote”); 
talk.put(“speaker”, “Mark Zuckerberg”); 
talk.put(“time”, talkDate); // Date 
talk.put(“isFavorite”, false); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SAVING TO PARSE 
ParseObject talk = new ParseObject(”Talk”); 
talk.put(“title”, “Opening Keynote”); 
talk.put(“speaker”, “Mark Zuckerberg”); 
talk.put(“time”, talkDate); // Date 
talk.put(“isFavorite”, false); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere talk.saveInBackground(); 
in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
DEMO TIME!
PARSE QUERY 
ParseQuery<ParseObject> query = 
ParseQuery.getQuery(”Talk”); 
// Find only the talks that are in the Build track 
query.whereEqualTo(”track”,”Build”); 
query.findInBackground(new FindCallback<ParseObject>(){ 
p ublic void done(List<ParseObject> buildTalks, ParseException e) { 
if (e == null) { 
// We have a list of all the Build track talks 
} else { 
// Something went wrong; check the ParseException 
} 
}
PARSE QUERY 
ParseQuery<ParseObject> query = 
ParseQuery.getQuery(”Talk”); 
} 
// Find only the talks that are in the Build track 
query.whereEqualTo(”track”,”Build”); 
query.findInBackground(new FindCallback<ParseObject>(){ 
p ublic void done(List<ParseObject> buildTalks, ParseException e) { 
if (e == null) { 
// We have a list of all the Build track talks 
} else { 
// Something went wrong; check the ParseException 
} 
}
PARSE SOCIAL 
Easy User & Session Management 
Sign up 
Improve app 
security with ACLs 
Log in & add 3rd Create Roles 
party auth 
Manage user session 
with “currentUser”
SIGN UP A PERSON 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SIGN UP A PERSON 
ParseUser user = new ParseUser(); 
user.setUsername(”janedoe”); 
user.setPassword(”mypass123”); 
user.setEmail(”janedoe@fb.com”); 
user.signUpInBackground(); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
LOG A PERSON IN 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
LOG A PERSON IN 
ParseUser.logInInBackground( ”janedoe”, 
”mypass123”, new LogInCallback() { 
public void done(ParseUser user, ParseException e) { 
if (user != null) { 
// The user is logged in 
} else { 
Lorem ipsum // dolor Something sit amet, went consectetur wrong; check the adipiscing ParseException 
elit. Nam urna nisi, 
} 
posuere } 
in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor }); 
vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SAVING TO PARSE WITH A CURRENT USER 
ParseObject post = new ParseObject(”Post”); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SAVING TO PARSE WITH A CURRENT USER 
ParseObject post = new ParseObject(”Post”); 
post.put(“title”, “Restrict screen orientation”); 
post.put(“author”, ParseUser.getCurrentUser()); 
post.put(“topic”, “Android”); 
post.put(“content”, ”How can I make my app work in portrait 
Lorem ipsum dolor sit amet, orientation consectetur only?”); 
adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SAVING TO PARSE WITH A CURRENT USER 
ParseObject post = new ParseObject(”Post”); 
post.put(“title”, “Restrict screen orientation”); 
post.put(“author”, ParseUser.getCurrentUser()); 
post.put(“topic”, “Android”); 
post.put(“content”, ”How can I make my app work in portrait 
Lorem ipsum dolor sit amet, orientation consectetur only?”); 
adipiscing elit. Nam urna nisi, 
posuere post.saveInBackground(); 
in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor // This post vitae, is commodo now saved with a nisi. an Morbi ACL; the tincidunt default felis is 
lacus, nec 
congue // public tortor read, consectetur writes only id. by Lorem the user ipsum that dolor saved it 
sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
SAVE A FILE 
byte[] data = myPhotoObject.toByteArray();
SAVE A FILE 
byte[] data = myPhotoObject.toByteArray(); 
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data); 
speakerPhoto.saveInBackground();
SAVE A FILE 
byte[] data = myPhotoObject.toByteArray(); 
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data); 
speakerPhoto.saveInBackground(); 
ParseObject speaker = new ParseObject(”Speaker”); 
picture.put(”name”, ”Héctor Ramos”); 
picture.put(”photo”, speakerPhoto); 
picture.saveInBackground();
SAVE A FILE 
byte[] data = myPhotoObject.toByteArray(); 
ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data); 
speakerPhoto.saveInBackground(); 
ParseObject speaker = new ParseObject(”Speaker”); 
picture.put(”name”, ”Héctor Ramos”); 
picture.put(”photo”, speakerPhoto); 
picture.saveInBackground();
CLOUD CODE 
Run custom app code in Parse’s cloud 
Run code when objects 
are saved or deleted 
Create custom functions 
and web hooks 
Schedule long-running jobs 
with Background Jobs
CLOUD MODULES 
Easy third-party integration 
with pre-built modules 
Send email Take payments 
Add SMS to your 
app 
Connect with any RESTful service 
using Parse.Cloud.httpRequest
BACKGROUND JOBS 
Schedule long-running jobs 
For operations that need 
to be performed regularly 
or on command 
Longer timeouts— 
15 minutes 
Trigger from the web 
UI or REST endpoint
BACKGROUND JOBS 
Schedule long-running jobs 
For operations that need 
to be performed regularly 
or on command 
Longer timeouts— 
15 minutes 
Trigger from the web 
UI or REST endpoint
A SIMPLE JOB 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
A SIMPLE JOB 
Parse.Cloud.job(”lowercaseallthethings”, function (request, status) { 
// Set up to modify user data 
Parse.Cloud.useMasterKey(); 
// Query for all users 
var query = new Parse.Query(Parse.User); 
query.each(function(user) { 
// Set and save the change 
user.set(”name”, user.name.toLowerCase()); 
return user.save(); 
}).then(function() { 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor // vitae, Set the commodo job’s success a nisi. and Morbi error tincidunt statuses 
felis lacus, nec 
status.success(”All users now have lowercase names”); 
congue }, tortor function(consectetur error) { 
id. Lorem ipsum dolor sit amet, 
consectetur status.error(”Job did not complete.”); 
}); 
adipiscing elit. Sed semper dapibus eleifend. 
}
Parse Local Datastore
Parse Local Datastore
Parse.enableLocalDatastore(); 
ParseQuery<ParseObject> query = ParseQuery.getQuery(“GameScore"); 
query.orderByDescending(“score”); 
query.fromLocalDatastore(); 
query.findInBackground(new FindCallback<ParseObject>() { 
... 
}); 
Parse Local Datastore
Parse Config 
Create and manage configuration variables for your apps from the Parse Dashboard
PARSE PUSH
INSTALLATIONS 
1 device + 1 install of your app = 1 Installation 
Pushes are sent to 
Installations 
Add relationships to objects 
of interest, e.g. users 
ParseInstallation.getCurrentInstallation().saveInBackground();
PUSH TARGETING 
Channels vs Queries 
Target stable interest 
groups with channels 
Send pushes to ad-hoc or 
changing groups by 
pushing to queries 
To push to a query, your 
Installation class must point 
to the class of interest
PUSH TO A CHANNEL 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
PUSH TO A CHANNEL 
ParsePush push = new ParsePush(); 
push.setChannel(”PSGFans”); 
push.setMessage(”The game starts now on channel 5!”); 
push.sendInBackground(); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
PUSH TO A QUERY 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
PUSH TO A QUERY 
ParseQuery pushQuery = ParseInstallation.getQuery(); 
pushQuery.whereEqualTo(”hasCheckedInToVenue”, true); 
ParsePush push = new ParsePush(); 
push.setQuery(pushQuery); 
push.setMessage(”The keynote is about to start!”); 
push.sendInBackground(); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
DEMO TIME!
PARSE ANALYTICS
PARSE ANALYTICS 
Measure App Usage 
API calls 
Burst rates Responses to push 
notifications
CUSTOM EVENTS 
Events + Dimensions 
Create your own events 
and track custom user 
behaviour 
Slice and dice your data 
however you choose 
Save additional 
parameters with 
dimensions
CUSTOM EVENTS
CUSTOM EVENTS 
event: "signedUp" 
dimensions: { 
gender: "f", 
source: "web", 
friendsUsingApp: "35", 
wasReferred: "true" 
}
CUSTOM EVENTS 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
CUSTOM EVENTS 
Map<String, String> dimensions = new HashMap<String, String>(); 
// Add key-value pairs to be saved alongside event 
dimensions.put(”gender”,”f”); 
dimensions.put(”source”,”web”); 
// Consider using buckets to meaningfully segment events 
dimensions.put(”friendsUsingApp”,”25-50”); 
dimensions.put(”wasReferred”,”true”); 
ParseAnalytics.trackEvent(”signup”, dimensions); 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, 
posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt 
ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec 
congue tortor consectetur id. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Sed semper dapibus eleifend.
CUSTOM EVENTS 
Knowledge is Power 
Is the first level of my 
game too hard? 
Why aren’t people 
completing purchases 
in my app? 
How successful was our 
last push campaign?
Understanding Growth
Understanding Retention
Understanding Retention
Understanding Retention
300,000 
250,000 
200,000 
150,000 
100,000 
50,000 
0 
2011 2012 2013 2014 
2015 
Apps built on Parse
300,000 
250,000 
200,000 
150,000 
100,000 
50,000 
0 
2011 2012 2013 2014 
2015 
Apps built on Parse
Over260,000Apps Built! 
300,000 
250,000 
200,000 
150,000 
100,000 
50,000 
0 
2011 2012 2013 2014 
2015 
Apps built on Parse
180,000 new developers this year
New Parse Customers
Pricing
Parse Core Parse Push Parse Analytics 
FREE & 
UNLIMITED 
up to 30 requests/sec 
($100pcm extra per 10 r/sec extra) 
FREE & 
UNLIMITED 
up to 1,000,000 recipients 
($0.05 per 1,000 recipients extra) 
FREE & 
UNLIMITED 
data points
THANKS, QUESTIONS?

Contenu connexe

En vedette

How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...
How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...
How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...Amazon Web Services
 
State of application development - 2017 research report
State of application development - 2017 research reportState of application development - 2017 research report
State of application development - 2017 research reportOutSystems
 
AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...
AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...
AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...Amazon Web Services
 
It's Time For Real-Time | TemboStatus
It's Time For Real-Time | TemboStatusIt's Time For Real-Time | TemboStatus
It's Time For Real-Time | TemboStatusTemboStatus
 
50 Ways To Understand The Digital Customer Experience
50 Ways To Understand The Digital Customer Experience50 Ways To Understand The Digital Customer Experience
50 Ways To Understand The Digital Customer ExperienceCognizant
 
Digital Disruption: Embracing the Future of Work
Digital Disruption: Embracing the Future of Work Digital Disruption: Embracing the Future of Work
Digital Disruption: Embracing the Future of Work accenture
 
Internet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An IcebergInternet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An IcebergDr. Mazlan Abbas
 
Digital Trends in 2017: Making Business Impact in a Changing World
Digital Trends in 2017: Making Business Impact in a Changing WorldDigital Trends in 2017: Making Business Impact in a Changing World
Digital Trends in 2017: Making Business Impact in a Changing WorldEdelman
 
Internet of Things and its applications
Internet of Things and its applicationsInternet of Things and its applications
Internet of Things and its applicationsPasquale Puzio
 
IoT - IT 423 ppt
IoT - IT 423 pptIoT - IT 423 ppt
IoT - IT 423 pptMhae Lyn
 

En vedette (12)

How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...
How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...
How Parse Built a Mobile Backend as a Service on AWS (MBL307) | AWS re:Invent...
 
State of application development - 2017 research report
State of application development - 2017 research reportState of application development - 2017 research report
State of application development - 2017 research report
 
AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...
AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...
AWS re:Invent 2016: IoT and Beyond: Building IoT Solutions for Exploring the ...
 
It's Time For Real-Time | TemboStatus
It's Time For Real-Time | TemboStatusIt's Time For Real-Time | TemboStatus
It's Time For Real-Time | TemboStatus
 
50 Ways To Understand The Digital Customer Experience
50 Ways To Understand The Digital Customer Experience50 Ways To Understand The Digital Customer Experience
50 Ways To Understand The Digital Customer Experience
 
Digital Disruption: Embracing the Future of Work
Digital Disruption: Embracing the Future of Work Digital Disruption: Embracing the Future of Work
Digital Disruption: Embracing the Future of Work
 
Cisco final ppt
Cisco final pptCisco final ppt
Cisco final ppt
 
Internet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An IcebergInternet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An Iceberg
 
Digital Trends in 2017: Making Business Impact in a Changing World
Digital Trends in 2017: Making Business Impact in a Changing WorldDigital Trends in 2017: Making Business Impact in a Changing World
Digital Trends in 2017: Making Business Impact in a Changing World
 
Internet of Things and its applications
Internet of Things and its applicationsInternet of Things and its applications
Internet of Things and its applications
 
IoT - IT 423 ppt
IoT - IT 423 pptIoT - IT 423 ppt
IoT - IT 423 ppt
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Similaire à Workshop: building your mobile backend with Parse - Droidcon Paris2014

Apache Aries Blog Sample
Apache Aries Blog SampleApache Aries Blog Sample
Apache Aries Blog SampleSkills Matter
 
Software Project Management
Software Project ManagementSoftware Project Management
Software Project ManagementWidoyo PH
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Pythongturnquist
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Red Hat Developers
 
Easy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & MercurialEasy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & MercurialWidoyo PH
 
Ten Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-onsTen Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-onsAtlassian
 
SCULPT! YOUR! TESTS!
SCULPT! YOUR! TESTS!SCULPT! YOUR! TESTS!
SCULPT! YOUR! TESTS!Taras Oleksyn
 
#SPUG - Legacy applications
#SPUG - Legacy applications#SPUG - Legacy applications
#SPUG - Legacy applicationsPiotr Pasich
 
IPaste SDK v.1.0
IPaste SDK v.1.0IPaste SDK v.1.0
IPaste SDK v.1.0xrebyc
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSGunnar Hillert
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsChris Bailey
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...tdc-globalcode
 
Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018
Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018
Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018Codemotion
 
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NETSilicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NETMats Bryntse
 
Java ee 7 New Features
Java ee 7   New FeaturesJava ee 7   New Features
Java ee 7 New FeaturesShahzad Badar
 
Secure Coding For Java - Une introduction
Secure Coding For Java - Une introductionSecure Coding For Java - Une introduction
Secure Coding For Java - Une introductionSebastien Gioria
 
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVCConstruindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVCEmmanuel Neri
 
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks
 
Mozilla Web Apps - Super-VanJS
Mozilla Web Apps - Super-VanJSMozilla Web Apps - Super-VanJS
Mozilla Web Apps - Super-VanJSRobert Nyman
 

Similaire à Workshop: building your mobile backend with Parse - Droidcon Paris2014 (20)

Apache Aries Blog Sample
Apache Aries Blog SampleApache Aries Blog Sample
Apache Aries Blog Sample
 
Software Project Management
Software Project ManagementSoftware Project Management
Software Project Management
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
 
Easy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & MercurialEasy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & Mercurial
 
Ten Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-onsTen Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-ons
 
SCULPT! YOUR! TESTS!
SCULPT! YOUR! TESTS!SCULPT! YOUR! TESTS!
SCULPT! YOUR! TESTS!
 
#SPUG - Legacy applications
#SPUG - Legacy applications#SPUG - Legacy applications
#SPUG - Legacy applications
 
IPaste SDK v.1.0
IPaste SDK v.1.0IPaste SDK v.1.0
IPaste SDK v.1.0
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.js
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
 
Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018
Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018
Bringing order to the chaos! - Paulo Lopes - Codemotion Amsterdam 2018
 
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NETSilicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
Silicon Valley CodeCamp 2008: High performance Ajax with ExtJS and ASP.NET
 
Java ee 7 New Features
Java ee 7   New FeaturesJava ee 7   New Features
Java ee 7 New Features
 
Secure Coding For Java - Une introduction
Secure Coding For Java - Une introductionSecure Coding For Java - Une introduction
Secure Coding For Java - Une introduction
 
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVCConstruindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
 
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
 
Mozilla Web Apps - Super-VanJS
Mozilla Web Apps - Super-VanJSMozilla Web Apps - Super-VanJS
Mozilla Web Apps - Super-VanJS
 
REST API for your WP7 App
REST API for your WP7 AppREST API for your WP7 App
REST API for your WP7 App
 

Plus de Paris Android User Group

Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Paris Android User Group
 
Extending your apps to wearables - DroidCon Paris 2014
Extending your apps to wearables -  DroidCon Paris 2014Extending your apps to wearables -  DroidCon Paris 2014
Extending your apps to wearables - DroidCon Paris 2014Paris Android User Group
 
Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Paris Android User Group
 
Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Paris Android User Group
 
Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Paris Android User Group
 
Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Paris Android User Group
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Paris Android User Group
 
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Paris Android User Group
 
maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014Paris Android User Group
 
Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Paris Android User Group
 
Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Paris Android User Group
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Paris Android User Group
 
Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Paris Android User Group
 
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Paris Android User Group
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseParis Android User Group
 
Efficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas RoardEfficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas RoardParis Android User Group
 

Plus de Paris Android User Group (20)

Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014
 
Extending your apps to wearables - DroidCon Paris 2014
Extending your apps to wearables -  DroidCon Paris 2014Extending your apps to wearables -  DroidCon Paris 2014
Extending your apps to wearables - DroidCon Paris 2014
 
Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014
 
Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014
 
Framing the canvas - DroidCon Paris 2014
Framing the canvas - DroidCon Paris 2014Framing the canvas - DroidCon Paris 2014
Framing the canvas - DroidCon Paris 2014
 
Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014
 
Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014
 
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
 
Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014
 
maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014
 
Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014
 
Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014
 
Death to passwords - DroidCon Paris 2014
Death to passwords - DroidCon Paris 2014Death to passwords - DroidCon Paris 2014
Death to passwords - DroidCon Paris 2014
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014
 
Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014
 
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet Haase
 
Efficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas RoardEfficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas Roard
 
Build a user experience by Eyal Lezmy
Build a user experience by Eyal LezmyBuild a user experience by Eyal Lezmy
Build a user experience by Eyal Lezmy
 

Dernier

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 

Dernier (20)

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 

Workshop: building your mobile backend with Parse - Droidcon Paris2014

  • 1. BUILDING YOUR MOBILE BACKEND WITH PARSE ALI PARR PLATFORM PARTNERSHIPS
  • 2.
  • 3.
  • 4. IDENTITY SHARING PUSH NOTIFICATIONS APP INSTALLS MONETIZATION
  • 6. 2 YEAR CORE API STABILITY GUARANTEE
  • 8. 48 HOUR MAJOR BUG FIX SLA
  • 9.
  • 10.
  • 11.
  • 12. BUILD GROW App Installs Sharing Messaging MONETIZE Payments Audience Network Parse Login App Events App Links
  • 13.
  • 14.
  • 15.
  • 16. UI BINDINGS FILES PUSH NOTIFICATIONS SOCIAL USER SESSIONS DATA MODELS CACHING NETWORKING APP BUSINESS LOGIC APP SECURITY MIDDLEWARE ROUTING RESTful API DATABASE BINDINGS LOAD BALANCING PHYSICAL SERVERS
  • 17. YOUR APP UI BINDINGS FILES PUSH NOTIFICATIONS SOCIAL USER SESSIONS DATA MODELS CACHING NETWORKING APP BUSINESS LOGIC APP SECURITY MIDDLEWARE ROUTING RESTful API DATABASE BINDINGS LOAD BALANCING PHYSICAL SERVERS
  • 19.
  • 20. Parse Core Parse Push Parse Analytics
  • 21.
  • 23. PARSE CORE Your backend in the cloud Save data to and fetch data from Parse Run custom app code on Parse’s servers Easily create and manage user accounts and sessions
  • 25. THE F8 APP Key Value Title Everything You Need to Know About Login Time 12:30 Speaker Eddie O’Neil isFavorite FALSE
  • 26. SAVING TO PARSE ParseObject talk = new ParseObject(”Talk”); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 27. SAVING TO PARSE ParseObject talk = new ParseObject(”Talk”); talk.put(“title”, “Opening Keynote”); talk.put(“speaker”, “Mark Zuckerberg”); talk.put(“time”, talkDate); // Date talk.put(“isFavorite”, false); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 28. SAVING TO PARSE ParseObject talk = new ParseObject(”Talk”); talk.put(“title”, “Opening Keynote”); talk.put(“speaker”, “Mark Zuckerberg”); talk.put(“time”, talkDate); // Date talk.put(“isFavorite”, false); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere talk.saveInBackground(); in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 29.
  • 31. PARSE QUERY ParseQuery<ParseObject> query = ParseQuery.getQuery(”Talk”); // Find only the talks that are in the Build track query.whereEqualTo(”track”,”Build”); query.findInBackground(new FindCallback<ParseObject>(){ p ublic void done(List<ParseObject> buildTalks, ParseException e) { if (e == null) { // We have a list of all the Build track talks } else { // Something went wrong; check the ParseException } }
  • 32. PARSE QUERY ParseQuery<ParseObject> query = ParseQuery.getQuery(”Talk”); } // Find only the talks that are in the Build track query.whereEqualTo(”track”,”Build”); query.findInBackground(new FindCallback<ParseObject>(){ p ublic void done(List<ParseObject> buildTalks, ParseException e) { if (e == null) { // We have a list of all the Build track talks } else { // Something went wrong; check the ParseException } }
  • 33. PARSE SOCIAL Easy User & Session Management Sign up Improve app security with ACLs Log in & add 3rd Create Roles party auth Manage user session with “currentUser”
  • 34. SIGN UP A PERSON Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 35. SIGN UP A PERSON ParseUser user = new ParseUser(); user.setUsername(”janedoe”); user.setPassword(”mypass123”); user.setEmail(”janedoe@fb.com”); user.signUpInBackground(); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 36. LOG A PERSON IN Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 37. LOG A PERSON IN ParseUser.logInInBackground( ”janedoe”, ”mypass123”, new LogInCallback() { public void done(ParseUser user, ParseException e) { if (user != null) { // The user is logged in } else { Lorem ipsum // dolor Something sit amet, went consectetur wrong; check the adipiscing ParseException elit. Nam urna nisi, } posuere } in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor }); vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 38. SAVING TO PARSE WITH A CURRENT USER ParseObject post = new ParseObject(”Post”); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 39. SAVING TO PARSE WITH A CURRENT USER ParseObject post = new ParseObject(”Post”); post.put(“title”, “Restrict screen orientation”); post.put(“author”, ParseUser.getCurrentUser()); post.put(“topic”, “Android”); post.put(“content”, ”How can I make my app work in portrait Lorem ipsum dolor sit amet, orientation consectetur only?”); adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 40. SAVING TO PARSE WITH A CURRENT USER ParseObject post = new ParseObject(”Post”); post.put(“title”, “Restrict screen orientation”); post.put(“author”, ParseUser.getCurrentUser()); post.put(“topic”, “Android”); post.put(“content”, ”How can I make my app work in portrait Lorem ipsum dolor sit amet, orientation consectetur only?”); adipiscing elit. Nam urna nisi, posuere post.saveInBackground(); in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor // This post vitae, is commodo now saved with a nisi. an Morbi ACL; the tincidunt default felis is lacus, nec congue // public tortor read, consectetur writes only id. by Lorem the user ipsum that dolor saved it sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 41. SAVE A FILE byte[] data = myPhotoObject.toByteArray();
  • 42. SAVE A FILE byte[] data = myPhotoObject.toByteArray(); ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data); speakerPhoto.saveInBackground();
  • 43. SAVE A FILE byte[] data = myPhotoObject.toByteArray(); ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data); speakerPhoto.saveInBackground(); ParseObject speaker = new ParseObject(”Speaker”); picture.put(”name”, ”Héctor Ramos”); picture.put(”photo”, speakerPhoto); picture.saveInBackground();
  • 44. SAVE A FILE byte[] data = myPhotoObject.toByteArray(); ParseFile speakerPhoto = new ParseFile(”hector_bw.jpg”, data); speakerPhoto.saveInBackground(); ParseObject speaker = new ParseObject(”Speaker”); picture.put(”name”, ”Héctor Ramos”); picture.put(”photo”, speakerPhoto); picture.saveInBackground();
  • 45. CLOUD CODE Run custom app code in Parse’s cloud Run code when objects are saved or deleted Create custom functions and web hooks Schedule long-running jobs with Background Jobs
  • 46. CLOUD MODULES Easy third-party integration with pre-built modules Send email Take payments Add SMS to your app Connect with any RESTful service using Parse.Cloud.httpRequest
  • 47. BACKGROUND JOBS Schedule long-running jobs For operations that need to be performed regularly or on command Longer timeouts— 15 minutes Trigger from the web UI or REST endpoint
  • 48. BACKGROUND JOBS Schedule long-running jobs For operations that need to be performed regularly or on command Longer timeouts— 15 minutes Trigger from the web UI or REST endpoint
  • 49. A SIMPLE JOB Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 50. A SIMPLE JOB Parse.Cloud.job(”lowercaseallthethings”, function (request, status) { // Set up to modify user data Parse.Cloud.useMasterKey(); // Query for all users var query = new Parse.Query(Parse.User); query.each(function(user) { // Set and save the change user.set(”name”, user.name.toLowerCase()); return user.save(); }).then(function() { Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor // vitae, Set the commodo job’s success a nisi. and Morbi error tincidunt statuses felis lacus, nec status.success(”All users now have lowercase names”); congue }, tortor function(consectetur error) { id. Lorem ipsum dolor sit amet, consectetur status.error(”Job did not complete.”); }); adipiscing elit. Sed semper dapibus eleifend. }
  • 51.
  • 52.
  • 53.
  • 54.
  • 57. Parse.enableLocalDatastore(); ParseQuery<ParseObject> query = ParseQuery.getQuery(“GameScore"); query.orderByDescending(“score”); query.fromLocalDatastore(); query.findInBackground(new FindCallback<ParseObject>() { ... }); Parse Local Datastore
  • 58. Parse Config Create and manage configuration variables for your apps from the Parse Dashboard
  • 60. INSTALLATIONS 1 device + 1 install of your app = 1 Installation Pushes are sent to Installations Add relationships to objects of interest, e.g. users ParseInstallation.getCurrentInstallation().saveInBackground();
  • 61. PUSH TARGETING Channels vs Queries Target stable interest groups with channels Send pushes to ad-hoc or changing groups by pushing to queries To push to a query, your Installation class must point to the class of interest
  • 62. PUSH TO A CHANNEL Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 63. PUSH TO A CHANNEL ParsePush push = new ParsePush(); push.setChannel(”PSGFans”); push.setMessage(”The game starts now on channel 5!”); push.sendInBackground(); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 64. PUSH TO A QUERY Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 65. PUSH TO A QUERY ParseQuery pushQuery = ParseInstallation.getQuery(); pushQuery.whereEqualTo(”hasCheckedInToVenue”, true); ParsePush push = new ParsePush(); push.setQuery(pushQuery); push.setMessage(”The keynote is about to start!”); push.sendInBackground(); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 66.
  • 67.
  • 70. PARSE ANALYTICS Measure App Usage API calls Burst rates Responses to push notifications
  • 71.
  • 72. CUSTOM EVENTS Events + Dimensions Create your own events and track custom user behaviour Slice and dice your data however you choose Save additional parameters with dimensions
  • 74. CUSTOM EVENTS event: "signedUp" dimensions: { gender: "f", source: "web", friendsUsingApp: "35", wasReferred: "true" }
  • 75. CUSTOM EVENTS Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 76. CUSTOM EVENTS Map<String, String> dimensions = new HashMap<String, String>(); // Add key-value pairs to be saved alongside event dimensions.put(”gender”,”f”); dimensions.put(”source”,”web”); // Consider using buckets to meaningfully segment events dimensions.put(”friendsUsingApp”,”25-50”); dimensions.put(”wasReferred”,”true”); ParseAnalytics.trackEvent(”signup”, dimensions); Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam urna nisi, posuere in magna eget, aliquet luctus eros. Nam metus nisi, tincidunt ac tempor vitae, commodo a nisi. Morbi tincidunt felis lacus, nec congue tortor consectetur id. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed semper dapibus eleifend.
  • 77.
  • 78. CUSTOM EVENTS Knowledge is Power Is the first level of my game too hard? Why aren’t people completing purchases in my app? How successful was our last push campaign?
  • 79.
  • 84. 300,000 250,000 200,000 150,000 100,000 50,000 0 2011 2012 2013 2014 2015 Apps built on Parse
  • 85. 300,000 250,000 200,000 150,000 100,000 50,000 0 2011 2012 2013 2014 2015 Apps built on Parse
  • 86. Over260,000Apps Built! 300,000 250,000 200,000 150,000 100,000 50,000 0 2011 2012 2013 2014 2015 Apps built on Parse
  • 90. Parse Core Parse Push Parse Analytics FREE & UNLIMITED up to 30 requests/sec ($100pcm extra per 10 r/sec extra) FREE & UNLIMITED up to 1,000,000 recipients ($0.05 per 1,000 recipients extra) FREE & UNLIMITED data points