SlideShare a Scribd company logo
1 of 41
Download to read offline
React Native
Developing an app similar to Uber in JavaScript
Caio Ariede
Full Stack Developer at Parasail.com
2/16/2017
github.com/caioariede
Topics
● ECMAScript 6 (es6)
● React
● React Native
● Develop an app similar to Uber
ES 6
2015
"Harmony"
ES6: Modules
// lib/math.js
export function sum (x, y) { return x + y }
export var pi = 3.141593
// someApp.js
import * as math from "lib/math"
console.log("2π = " + math.sum(math.pi, math.pi))
ES6: Classes
class Circle extends Shape {
constructor (id, x, y, radius) {
super(id, x, y)
this.radius = radius
}
}
React
React: JSX
const element = (
<h1 className="greeting">
Hello, world!
</h1>
)
React: Components
class Welcome extends React.Component {
render() {
return <h1>Welcome, {this.props.name}</h1>;
}
}
// <Welcome name="Fulano" />
React: State
class Counter extends React.Component {
state = {counter: 0}
onClick() {
this.setState({counter: this.state.counter+1})
}
render() {
return <div>
<span>{this.state.counter}</span>
<button onClick={this.onClick}>add</button>
</div>
}
}
React: VirtualDOM
Component VirtualDOM DOM (Browser)
render
React Native
React Native: Who uses?
React Native: Features
● Native apps (native UI components)
● No need to recompile every time
● Reusable code for iOS and Android (80%)
● Communication with native functions
○ Objective-C, Java
Fonte: https://speakerdeck.com/frantic/react-native-under-the-hood
Idea: App similar to Uber
● Login with Facebook
● Geolocation (passenger)
● Real-time updates (drivers)
● Trace/display route
● Nearest driver
Using only JavaScript
Dependencies
Getting Started
● npm install -g react-native-cli
● react-native init UberProject
● react-native run-ios
Project dependencies
● firebase: backend/database
● react-native-fbsdk: login with facebook
● react-native-maps: native map components
● geofire: location queries
● mapbox: calculate routes
Firebase: what's?
● Backend as a service
● Real-time database
● Handles authentication
○ oAuth, Facebook, Google, etc.
Firebase: authentication
OAuth token
Check token
Login
onClick() {
LoginManager.logInWithReadPermissions(['public_profile']).then(result => {
if (!result.isCancelled) {
} else {
console.log('login: user cancelled')
}
})
}
onClick() {
LoginManager.logInWithReadPermissions(['public_profile']).then(result => {
if (!result.isCancelled) {
AccessToken.getCurrentAccessToken().then(tokenResult => {
return auth.signInWithCredential(
facebook.credential(tokenResult.accessToken))
}).catch(err => console.log('login error: ' + err))
} else {
console.log('login: user cancelled')
}
})
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger)
● Real-time updates (drivers)
● Trace/display route
● Nearest driver
Map
class Map extends Component {
state = {
passengerPosition: {latitude: 0, longitude: 0},
}
render() {
return (
<MapView>
<Marker coordinate={this.state.passengerPosition} />
</MapView>
)
}
}
watchPassenger() {
const positionOptions = {
enableHighAccuracy: true,
}
navigator.geolocation.watchPosition(pos => {
this.updatePassengerPosition({latitude: pos.latitude,
longitude: pos.longitude})
}, positionOptions)
}
updatePassengerPosition(passengerPosition) {
this.setState({passengerPosition})
}
Geolocation
Saving location to Firebase
updatePassengerPosition(passengerPosition) {
this.setState({passengerPosition})
const user = firebase.database().ref('users/' + this.userId)
user.update({passengerPosition})
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers)
● Trace/display route
● Nearest driver
Real-time updates of drivers
watchDrivers() {
firebase.database().ref('drivers').on('child_changed', data => {
let drivers = this.state.drivers
drivers[driver.id] = {id: data.key, position}
this.setState({drivers})
})
}
Displaying drivers on map
renderDrivers() {
return this.state.drivers.map(driver => (
<Marker key={driver.id} coordinate={driver.position}
image={carIcon} />
))
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers) √
● Trace/display route
● Nearest driver
Destination
class SetDestination extends MapMixin {
constructor(props) {
this.state.destinationPosition = randomPosition(
props.passengerPosition, 500) // 500 meters
}
renderDestinationPosition() {
return <Marker draggable image={markerIcon}
coordinate={this.state.destinationPosition} />
}
}
Trace route
calculateRoute() {
const mode = 'driving'
const origin = buildLngLat(this.state.pickupPosition)
const destination = buildLngLat(this.state.destinationPosition)
const accessToken = this.mapBoxAccessToken
const url = buildMapBoxUrl(mode, origin, destination, accessToken)
fetch(url).then(response => response.json()).then(json => {
this.setState({route: getCoordinates(json)})
}).catch(e => {
console.warn(e)
})
}
Display route
renderRoute() {
return (
<MapView.Polyline strokeWidth={4}
coordinates={[this.state.passengerPosition,
...this.state.route,
this.state.destinationPosition]} />
)
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers) √
● Trace/display route √
● Nearest driver
GeoFire
geofire
key1: 37,-122
key2: lat, lng
key3: lat, lng
geoFire.set("key1", [37, -122])
listener geoquery
lat, lng
raio
geoquery
lat, lng
raio
Notify current geoqueries
Nearest driver
let radius = 0.1 // 100m
let currentLocation = [
passengerPosition.latitude,
passengerPosition.longitude,
]
let geoQuery = this.geoFire.query({center: currentLocation, radius})
let driversFound = []
geoQuery.on('key_entered', (key, location, distance) => {
driversFound.push({key, location, distance})
})
watchDriversFound()
Nearest driver
watchDriversFound() {
if (driversFound.length === 0) {
geoQuery.updateCriteria({radius: radius + 0.1})
} else {
let minDistance = -1, nearestDriver = null
driversFound.forEach(driver => {
if (driver.distance < minDistance || minDistance === -1)
minDistance = driver.distance, nearestDriver = driver
})
this.setState({nearestDriver: driver})
}
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers) √
● Trace/display route √
● Nearest driver √
Questions?
caioariede
on github and twitter

More Related Content

What's hot

M M Purchasing
M M    PurchasingM M    Purchasing
M M Purchasingvijaysap
 
Database design and Development
Database design and DevelopmentDatabase design and Development
Database design and DevelopmentMd. Mahbub Alam
 
Ch4-Software Engineering 9
Ch4-Software Engineering 9Ch4-Software Engineering 9
Ch4-Software Engineering 9Ian Sommerville
 
Sap mm interview questions and answers
Sap mm interview questions and answersSap mm interview questions and answers
Sap mm interview questions and answersNancy Nelida
 
Project report final
Project report finalProject report final
Project report finalJaya Saini
 
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...Beat Signer
 
Database
DatabaseDatabase
DatabaseRū Sh
 
computer network NCC l4dc assingment
computer network NCC l4dc assingment computer network NCC l4dc assingment
computer network NCC l4dc assingment David Parker
 
Chat Application | RSD
Chat Application | RSDChat Application | RSD
Chat Application | RSDRajon
 
CS8494 SOFTWARE ENGINEERING Unit-2
CS8494 SOFTWARE ENGINEERING Unit-2CS8494 SOFTWARE ENGINEERING Unit-2
CS8494 SOFTWARE ENGINEERING Unit-2SIMONTHOMAS S
 
SRS For Online Store
SRS For Online StoreSRS For Online Store
SRS For Online StoreAhsan Rizwan
 
Unit 3 system models
Unit 3 system modelsUnit 3 system models
Unit 3 system modelsAzhar Shaik
 
Object oriented modeling and design
Object oriented modeling and designObject oriented modeling and design
Object oriented modeling and designjayashri kolekar
 
database normalization case study
database normalization case studydatabase normalization case study
database normalization case studyi i
 

What's hot (20)

M M Purchasing
M M    PurchasingM M    Purchasing
M M Purchasing
 
Database design and Development
Database design and DevelopmentDatabase design and Development
Database design and Development
 
Ch4-Software Engineering 9
Ch4-Software Engineering 9Ch4-Software Engineering 9
Ch4-Software Engineering 9
 
Ch5 system modeling
Ch5 system modelingCh5 system modeling
Ch5 system modeling
 
System design
System designSystem design
System design
 
Sap mm interview questions and answers
Sap mm interview questions and answersSap mm interview questions and answers
Sap mm interview questions and answers
 
Project report final
Project report finalProject report final
Project report final
 
Ch1 introduction
Ch1 introductionCh1 introduction
Ch1 introduction
 
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
 
Database
DatabaseDatabase
Database
 
computer network NCC l4dc assingment
computer network NCC l4dc assingment computer network NCC l4dc assingment
computer network NCC l4dc assingment
 
Chat Application | RSD
Chat Application | RSDChat Application | RSD
Chat Application | RSD
 
Structure chart
Structure chartStructure chart
Structure chart
 
Database normalization
Database normalizationDatabase normalization
Database normalization
 
CS8494 SOFTWARE ENGINEERING Unit-2
CS8494 SOFTWARE ENGINEERING Unit-2CS8494 SOFTWARE ENGINEERING Unit-2
CS8494 SOFTWARE ENGINEERING Unit-2
 
SRS For Online Store
SRS For Online StoreSRS For Online Store
SRS For Online Store
 
Ch7
Ch7Ch7
Ch7
 
Unit 3 system models
Unit 3 system modelsUnit 3 system models
Unit 3 system models
 
Object oriented modeling and design
Object oriented modeling and designObject oriented modeling and design
Object oriented modeling and design
 
database normalization case study
database normalization case studydatabase normalization case study
database normalization case study
 

Viewers also liked

React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptReact Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptKobkrit Viriyayudhakorn
 
React native sharing
React native sharingReact native sharing
React native sharingSam Lee
 
A tour of React Native
A tour of React NativeA tour of React Native
A tour of React NativeTadeu Zagallo
 
Creating books app with react native
Creating books app with react nativeCreating books app with react native
Creating books app with react nativeAli Sa'o
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react nativeModusJesus
 
What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?Evan Stone
 
What is FED
What is FEDWhat is FED
What is FEDSam Lee
 
Trend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding toolTrend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding toolSam Lee
 
React Native for ReactJS Devs
React Native for ReactJS DevsReact Native for ReactJS Devs
React Native for ReactJS DevsBarak Cohen
 
React native redux_sharing
React native redux_sharingReact native redux_sharing
React native redux_sharingSam Lee
 
Comunicado a los venezolanos - Hugo Carvajal‏
Comunicado a los venezolanos - Hugo Carvajal‏Comunicado a los venezolanos - Hugo Carvajal‏
Comunicado a los venezolanos - Hugo Carvajal‏contrapuntovzla
 
React Native for Web
React Native for WebReact Native for Web
React Native for WebSam Lee
 
Dialnet filosofia delderechoencompendio-2058922
Dialnet filosofia delderechoencompendio-2058922Dialnet filosofia delderechoencompendio-2058922
Dialnet filosofia delderechoencompendio-2058922Cybernautic.
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - WorkshopFellipe Chagas
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativeRami Sayar
 
Southern Traditions Outdoors July - August 2014
Southern Traditions Outdoors July - August 2014Southern Traditions Outdoors July - August 2014
Southern Traditions Outdoors July - August 2014Kalli Collective
 
Southern Traditions Outdoors - November/December 2015
Southern Traditions Outdoors - November/December 2015Southern Traditions Outdoors - November/December 2015
Southern Traditions Outdoors - November/December 2015Kalli Lipke
 

Viewers also liked (20)

React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptReact Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
 
React native sharing
React native sharingReact native sharing
React native sharing
 
A tour of React Native
A tour of React NativeA tour of React Native
A tour of React Native
 
SONY BBS - React Native
SONY BBS - React NativeSONY BBS - React Native
SONY BBS - React Native
 
Creating books app with react native
Creating books app with react nativeCreating books app with react native
Creating books app with react native
 
React native - What, Why, How?
React native - What, Why, How?React native - What, Why, How?
React native - What, Why, How?
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react native
 
What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?
 
What is FED
What is FEDWhat is FED
What is FED
 
Trend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding toolTrend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding tool
 
React Native for ReactJS Devs
React Native for ReactJS DevsReact Native for ReactJS Devs
React Native for ReactJS Devs
 
React native redux_sharing
React native redux_sharingReact native redux_sharing
React native redux_sharing
 
Comunicado a los venezolanos - Hugo Carvajal‏
Comunicado a los venezolanos - Hugo Carvajal‏Comunicado a los venezolanos - Hugo Carvajal‏
Comunicado a los venezolanos - Hugo Carvajal‏
 
React Native for Web
React Native for WebReact Native for Web
React Native for Web
 
Dialnet filosofia delderechoencompendio-2058922
Dialnet filosofia delderechoencompendio-2058922Dialnet filosofia delderechoencompendio-2058922
Dialnet filosofia delderechoencompendio-2058922
 
Andres 3
Andres 3Andres 3
Andres 3
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - Workshop
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
Southern Traditions Outdoors July - August 2014
Southern Traditions Outdoors July - August 2014Southern Traditions Outdoors July - August 2014
Southern Traditions Outdoors July - August 2014
 
Southern Traditions Outdoors - November/December 2015
Southern Traditions Outdoors - November/December 2015Southern Traditions Outdoors - November/December 2015
Southern Traditions Outdoors - November/December 2015
 

Similar to React Native: Developing an app similar to Uber in JavaScript

Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Astrails
 
Developing web-apps like it's 2013
Developing web-apps like it's 2013Developing web-apps like it's 2013
Developing web-apps like it's 2013Laurent_VB
 
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017Codemotion
 
Universal JS Applications with React
Universal JS Applications with ReactUniversal JS Applications with React
Universal JS Applications with ReactThanh Trần Trọng
 
Rntb20200805
Rntb20200805Rntb20200805
Rntb20200805t k
 
Workshop 25: React Native - Components
Workshop 25: React Native - ComponentsWorkshop 25: React Native - Components
Workshop 25: React Native - ComponentsVisual Engineering
 
Http Communication in Angular 2.0
Http Communication in Angular 2.0Http Communication in Angular 2.0
Http Communication in Angular 2.0Eyal Vardi
 
Higher Order Components and Render Props
Higher Order Components and Render PropsHigher Order Components and Render Props
Higher Order Components and Render PropsNitish Phanse
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0Takuya Tejima
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Robert DeLuca
 
Creating an Uber Clone - Part XXIX.pdf
Creating an Uber Clone - Part XXIX.pdfCreating an Uber Clone - Part XXIX.pdf
Creating an Uber Clone - Part XXIX.pdfShaiAlmog1
 
React, Redux and es6/7
React, Redux and es6/7React, Redux and es6/7
React, Redux and es6/7Dongho Cho
 
Adding where to your ruby apps
Adding where to your ruby appsAdding where to your ruby apps
Adding where to your ruby appsRoberto Pepato
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs偉格 高
 

Similar to React Native: Developing an app similar to Uber in JavaScript (20)

Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Developing web-apps like it's 2013
Developing web-apps like it's 2013Developing web-apps like it's 2013
Developing web-apps like it's 2013
 
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
 
React lecture
React lectureReact lecture
React lecture
 
Universal JS Applications with React
Universal JS Applications with ReactUniversal JS Applications with React
Universal JS Applications with React
 
Rntb20200805
Rntb20200805Rntb20200805
Rntb20200805
 
Express JS
Express JSExpress JS
Express JS
 
Workshop 25: React Native - Components
Workshop 25: React Native - ComponentsWorkshop 25: React Native - Components
Workshop 25: React Native - Components
 
Http Communication in Angular 2.0
Http Communication in Angular 2.0Http Communication in Angular 2.0
Http Communication in Angular 2.0
 
Higher Order Components and Render Props
Higher Order Components and Render PropsHigher Order Components and Render Props
Higher Order Components and Render Props
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
 
Creating an Uber Clone - Part XXIX.pdf
Creating an Uber Clone - Part XXIX.pdfCreating an Uber Clone - Part XXIX.pdf
Creating an Uber Clone - Part XXIX.pdf
 
Advanced redux
Advanced reduxAdvanced redux
Advanced redux
 
React native by example by Vadim Ruban
React native by example by Vadim RubanReact native by example by Vadim Ruban
React native by example by Vadim Ruban
 
Why react matters
Why react mattersWhy react matters
Why react matters
 
React, Redux and es6/7
React, Redux and es6/7React, Redux and es6/7
React, Redux and es6/7
 
Adding where to your ruby apps
Adding where to your ruby appsAdding where to your ruby apps
Adding where to your ruby apps
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
 

Recently uploaded

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
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
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
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
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
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
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 

Recently uploaded (20)

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
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
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
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
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 

React Native: Developing an app similar to Uber in JavaScript

  • 1. React Native Developing an app similar to Uber in JavaScript
  • 2. Caio Ariede Full Stack Developer at Parasail.com 2/16/2017 github.com/caioariede
  • 3. Topics ● ECMAScript 6 (es6) ● React ● React Native ● Develop an app similar to Uber
  • 5. ES6: Modules // lib/math.js export function sum (x, y) { return x + y } export var pi = 3.141593 // someApp.js import * as math from "lib/math" console.log("2π = " + math.sum(math.pi, math.pi))
  • 6. ES6: Classes class Circle extends Shape { constructor (id, x, y, radius) { super(id, x, y) this.radius = radius } }
  • 8. React: JSX const element = ( <h1 className="greeting"> Hello, world! </h1> )
  • 9. React: Components class Welcome extends React.Component { render() { return <h1>Welcome, {this.props.name}</h1>; } } // <Welcome name="Fulano" />
  • 10. React: State class Counter extends React.Component { state = {counter: 0} onClick() { this.setState({counter: this.state.counter+1}) } render() { return <div> <span>{this.state.counter}</span> <button onClick={this.onClick}>add</button> </div> } }
  • 14. React Native: Features ● Native apps (native UI components) ● No need to recompile every time ● Reusable code for iOS and Android (80%) ● Communication with native functions ○ Objective-C, Java
  • 16.
  • 17. Idea: App similar to Uber ● Login with Facebook ● Geolocation (passenger) ● Real-time updates (drivers) ● Trace/display route ● Nearest driver Using only JavaScript
  • 19. Getting Started ● npm install -g react-native-cli ● react-native init UberProject ● react-native run-ios
  • 20. Project dependencies ● firebase: backend/database ● react-native-fbsdk: login with facebook ● react-native-maps: native map components ● geofire: location queries ● mapbox: calculate routes
  • 21.
  • 22. Firebase: what's? ● Backend as a service ● Real-time database ● Handles authentication ○ oAuth, Facebook, Google, etc.
  • 24. Login onClick() { LoginManager.logInWithReadPermissions(['public_profile']).then(result => { if (!result.isCancelled) { } else { console.log('login: user cancelled') } }) } onClick() { LoginManager.logInWithReadPermissions(['public_profile']).then(result => { if (!result.isCancelled) { AccessToken.getCurrentAccessToken().then(tokenResult => { return auth.signInWithCredential( facebook.credential(tokenResult.accessToken)) }).catch(err => console.log('login error: ' + err)) } else { console.log('login: user cancelled') } }) }
  • 25. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) ● Real-time updates (drivers) ● Trace/display route ● Nearest driver
  • 26. Map class Map extends Component { state = { passengerPosition: {latitude: 0, longitude: 0}, } render() { return ( <MapView> <Marker coordinate={this.state.passengerPosition} /> </MapView> ) } }
  • 27. watchPassenger() { const positionOptions = { enableHighAccuracy: true, } navigator.geolocation.watchPosition(pos => { this.updatePassengerPosition({latitude: pos.latitude, longitude: pos.longitude}) }, positionOptions) } updatePassengerPosition(passengerPosition) { this.setState({passengerPosition}) } Geolocation
  • 28. Saving location to Firebase updatePassengerPosition(passengerPosition) { this.setState({passengerPosition}) const user = firebase.database().ref('users/' + this.userId) user.update({passengerPosition}) }
  • 29. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) ● Trace/display route ● Nearest driver
  • 30. Real-time updates of drivers watchDrivers() { firebase.database().ref('drivers').on('child_changed', data => { let drivers = this.state.drivers drivers[driver.id] = {id: data.key, position} this.setState({drivers}) }) }
  • 31. Displaying drivers on map renderDrivers() { return this.state.drivers.map(driver => ( <Marker key={driver.id} coordinate={driver.position} image={carIcon} /> )) }
  • 32. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) √ ● Trace/display route ● Nearest driver
  • 33. Destination class SetDestination extends MapMixin { constructor(props) { this.state.destinationPosition = randomPosition( props.passengerPosition, 500) // 500 meters } renderDestinationPosition() { return <Marker draggable image={markerIcon} coordinate={this.state.destinationPosition} /> } }
  • 34. Trace route calculateRoute() { const mode = 'driving' const origin = buildLngLat(this.state.pickupPosition) const destination = buildLngLat(this.state.destinationPosition) const accessToken = this.mapBoxAccessToken const url = buildMapBoxUrl(mode, origin, destination, accessToken) fetch(url).then(response => response.json()).then(json => { this.setState({route: getCoordinates(json)}) }).catch(e => { console.warn(e) }) }
  • 35. Display route renderRoute() { return ( <MapView.Polyline strokeWidth={4} coordinates={[this.state.passengerPosition, ...this.state.route, this.state.destinationPosition]} /> ) }
  • 36. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) √ ● Trace/display route √ ● Nearest driver
  • 37. GeoFire geofire key1: 37,-122 key2: lat, lng key3: lat, lng geoFire.set("key1", [37, -122]) listener geoquery lat, lng raio geoquery lat, lng raio Notify current geoqueries
  • 38. Nearest driver let radius = 0.1 // 100m let currentLocation = [ passengerPosition.latitude, passengerPosition.longitude, ] let geoQuery = this.geoFire.query({center: currentLocation, radius}) let driversFound = [] geoQuery.on('key_entered', (key, location, distance) => { driversFound.push({key, location, distance}) }) watchDriversFound()
  • 39. Nearest driver watchDriversFound() { if (driversFound.length === 0) { geoQuery.updateCriteria({radius: radius + 0.1}) } else { let minDistance = -1, nearestDriver = null driversFound.forEach(driver => { if (driver.distance < minDistance || minDistance === -1) minDistance = driver.distance, nearestDriver = driver }) this.setState({nearestDriver: driver}) } }
  • 40. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) √ ● Trace/display route √ ● Nearest driver √