SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
ABCD Firebase Study
https://github.com/misolab/abcd-firebase
TODO
• Project Create

• Hosting

• Authentication

• Realtime Database

• Memo App

• Reference
Project Create
git clone https://github.com/misolab/abcd-firebase.git
실습 파일
auth : 인증
db : 실시간DB
memo : 메모앱
(*_start는 실습용)
firebase에서 만든 파일
index.html
404.html
*.json : 설정파일
Hosting
firebase init
https://firebase.google.com/docs/web/setup
firebase serve
https://firebase.google.com/docs/web/setup
firebase deploy
https://firebase.google.com/docs/hosting/deploying
firebase deploy
https://firebase.google.com/docs/hosting/deploying
Authentication
http://localhost:5000/auth/
https://firebase.google.com/docs/auth/web/start
https://firebase.google.com/docs/auth/web/manage-users
project_home > Authentication > 로그인방법
https://firebase.google.com/docs/auth/web/password-auth
project_home > Authentication > 사용자
https://firebase.google.com/docs/auth/web/password-auth
AUTH - authStateChanged
https://firebase.google.com/docs/auth/web/password-auth
document.addEventListener('DOMContentLoaded', function () {
firebase.auth().onAuthStateChanged(user => {
console.log('onAuthStateChanged');
console.log(user);
if (user) {
var displayName = user.displayName;
var email = user.email;
var photoURL = user.photoURL;
var uid = user.uid;
alert('Hi!! ' + email);
btnLogout.classList.remove('hide');
} else {
// User is signed out.
btnLogout.classList.add('hide');
}
});
});
AUTH - email, pwd
https://firebase.google.com/docs/auth/web/password-auth
btnLogin.addEventListener('click', e => {
console.log('login by email');
const email = txtEmail.value;
const password = txtPwd.value;
firebase.auth().signInWithEmailAndPassword(email, password)
.catch(e => {
console.log(e);
alert(e.message);
})
/*
.then(user => {
console.log('login Success!!');
console.log(user);
var displayName = user.displayName;
var email = user.email;
var photoURL = user.photoURL;
var uid = user.uid;
alert('Hi!! ' + email);
});
*/
});
AUTH - loggout
https://firebase.google.com/docs/auth/web/password-auth
btnLogout.addEventListener('click', e => {
if (!confirm("Loggout??")) {
return;
}
firebase.auth().signOut().then(() => {
alert("bye~bye!!");
});
});
project_home > Authentication > 로그인방법
https://firebase.google.com/docs/auth/web/google-signin
AUTH - google
btnLoginByGoogle.addEventListener('click', e => {
console.log('login by Google');
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider)
.catch(e => {
console.log(e);
alert(e.message);
})
.then(result => {
console.log('login Success!!');
var user = result.user;
console.log(user);
var displayName = user.displayName;
var email = user.email;
var photoURL = user.photoURL;
var uid = user.uid;
alert('Hi!! ' + email);
});
});
https://firebase.google.com/docs/auth/web/google-signin
project_home > Authentication > 사용자
https://firebase.google.com/docs/auth/web/password-auth
Realtime Database
보안 및 규칙
https://firebase.google.com/docs/database/security/
샘플 실습을 위한 것입니다!!
절대 운영환경에서 사용하지 말아주세요
http://localhost:5000/db/
https://firebase.google.com/docs/database/web/structure-data
DB - value, child_added, child_changed, child_remove
document.addEventListener('DOMContentLoaded', () => {
console.log('DOMContentLoaded');
const dbObjectRef = firebase.database().ref('object');
// TODO : rule change anonymous!!
dbObjectRef.on('value', snap => {
console.log(snap);
objValue.innerText = JSON.stringify(snap.val(), null, 3);
});
dbObjectRef.on('child_added', snap => {
console.log(snap);
objAdded.innerText = JSON.stringify(snap.val(), null, 3);
});
dbObjectRef.on('child_changed', snap => {
console.log(snap);
objChanged.innerText = JSON.stringify(snap.val(), null, 3);
});
dbObjectRef.on('child_removed', snap => {
console.log(snap);
objRemoved.innerText = JSON.stringify(snap.val(), null, 3);
});
});
https://firebase.google.com/docs/database/web/read-and-write
https://firebase.google.com/docs/database/web/lists-of-data
DB - push
https://firebase.google.com/docs/database/web/read-and-write
https://firebase.google.com/docs/database/web/lists-of-data
btnAdd.addEventListener('click', e => {
const newUser = {
age: txtAge.value,
name: txtName.value
};
const newUserRef = firebase.database().ref('object').push();
console.log('newUser key -' + newUserRef.key);
newUserRef.set(newUser);
});
DB - once
https://firebase.google.com/docs/database/web/read-and-write
https://firebase.google.com/docs/database/web/lists-of-data
btnSearch.addEventListener('click', e => {
const searchKey = txtKey.value;
const searchRef = firebase.database().ref('object/' + searchKey);
searchRef.once('value')
.then(snap => {
alert(JSON.stringify(snap.val(), null, 3));
}).catch(e => {
alert(e.message);
});
});
DB - update
https://firebase.google.com/docs/database/web/read-and-write
https://firebase.google.com/docs/database/web/lists-of-data
btnUpdate.addEventListener('click', e => {
const updateKey = txtKey.value;
const newData = {
age: txtAge.value,
name: txtName.value
};
const updateRef = firebase.database().ref('object/' + updateKey);
updateRef.update(newData);
});
DB - delete
https://firebase.google.com/docs/database/web/read-and-write
https://firebase.google.com/docs/database/web/lists-of-data
btnDel.addEventListener('click', e => {
if (!confirm('삭제하시겠습니까?')) {
return;
}
const deleteKey = txtKey.value;
const deleteRef = firebase.database().ref('object/' + deleteKey);
deleteRef.remove();
});
보안 및 규칙
https://firebase.google.com/docs/database/security/
실습이 끝났다면 꼭 원복해주세요!!
memo-webapp
inflean.com - 파이어베이스를 이용한 웹+안드로이드 메모 

어플리케이션 만들기 (신휴창 님)
http://localhost:5000/memo/
1. auth - google
document.addEventListener('DOMContentLoaded', () => {
console.log('DOMContentLoaded');
$('.textarea').blur(() => {
saveMemoData();
});
// 1. auth - google
firebase.auth().onAuthStateChanged(user => {
console.log(user);
if (user) {
userInfo = user;
alert('hi!! ' + user.displayName);
initMemoData();
} else {
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider)
.catch(e => {
alert(e.message);
});
}
});
});
2. db - init
// 2. db - 0) init
function initMemoData() {
memoRef = firebase.database().ref('memos/' + userInfo.uid);
console.log(memoRef);
}
2. db - create
// 2. db - 1) create
function saveMemoData() {
var txt = $(".textarea").val();
if (txt == "") {
return;
}
memoRef.push({
txt: txt,
createTime: new Date().getTime()
});
}
2. db - read
// 2. db - 0) init
function initMemoData() {
memoRef = firebase.database().ref('memos/' + userInfo.uid);
// 2. db - 2) read
memoRef.on("child_added", (data) => {
var key = data.key;
var memoData = data.val();
var txt = memoData.txt;
var title = txt.substr(0, txt.indexOf('n'));
var firstTxt = txt.substr(0, 1);
var html =
"<li id='" + key + "' class="collection-item avatar" >" +
"<i class="material-icons circle red">" + firstTxt + "</i>" +
"<span class="title">" + title + "</span>" +
"<p class='txt'>" + txt + "<br>" +
"</p>" +
"</li>";
$(".collection").append(html);
});
}
2. db - read ( once )
// 2. db - 2) read
function loadMemoData(key) {
selectedKey = key;
var currentRef = firebase.database().ref('memos/' + userInfo.uid + "/" + key);
currentRef.once("value").then((snapshot) => {
$(".textarea").val(snapshot.val().txt);
});
}
2. db - read ( once )
// 2. db - 2) read
function loadMemoData(key) {
selectedKey = key;
var currentRef = firebase.database().ref('memos/' + userInfo.uid + "/" + key);
currentRef.once("value").then((snapshot) => {
$(".textarea").val(snapshot.val().txt);
});
}
2. db - update
// 2. db - 0) init
function initMemoData() {
memoRef = firebase.database().ref('memos/' + userInfo.uid);
...
// 2. db - 3) update
memoRef.on("child_changed", (data) => {
var key = data.key;
var txt = data.val().txt;
var title = txt.substr(0, txt.indexOf('n'));
$("#" + key + " > .title").text(title);
$("#" + key + " > .txt").text(txt);
});
}
2. db - update
// 2. db - 1) create
function saveMemoData() {
var txt = $(".textarea").val();
if (txt == "") {
return;
}
// 2. db - 3) update
if (selectedKey) {
var currentRef = firebase.database()
.ref(‘memos/' + userInfo.uid + "/" + selectedKey);
currentRef.update({
txt: txt,
updateTime: new Date().getTime()
});
} else {
const newMemoRef = memoRef.push({
txt: txt,
createTime: new Date().getTime()
});
selectedKey = newMemoRef.key;
}
}
2. db - create (new)
// 2. db - 1) create (new)
function newMemoData() {
$(".textarea").val("");
selectedKey = null;
}
2. db - delete
// 2. db - 4) delete
function deleteMemoData(key) {
if (!confirm("삭제하시겠습니까?")) {
return;
}
var currentRef = firebase.database().ref('memos/' + userInfo.uid + "/" + key);
currentRef.remove();
$("#" + key).remove();
newMemoData();
}
var html =
"<li id='" + key + "' class="collection-item avatar" onclick="loadMemoData(this.id);">" +
"<i class="material-icons circle red">" + firstTxt + "</i>" +
"<span class="title">" + title + "</span>" +
"<p class='txt'>" + txt + "<br>" +
"</p>" +
// 2. db - 4) delete
"<a href="#!" onclick="deleteMemoData('" + key + "');" class=”secondary-content">
<i class=”material-icons">delete</i></a>"
"</li>";
3. deploy
도움 받은 곳
• https://firebase.google.com/docs/

• https://www.youtube.com/firebase

튜토리얼 부분은 꼭 보세요!! 

• https://github.com/firebase

• 인프런 신휴창님 강좌 

• udacity.com - Firebase in a Weekend (android, iOS)

• https://brunch.co.kr/@bokyungkimp19d/5

https://www.slideshare.net/ssuserdef905/ss-77688033

ABCD firebase

Más contenido relacionado

La actualidad más candente

RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK - Nicola Iarocci - Co...
RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK -  Nicola Iarocci - Co...RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK -  Nicola Iarocci - Co...
RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK - Nicola Iarocci - Co...Codemotion
 
Top 10 F5 iRules to migrate to a modern load balancing platform
Top 10 F5 iRules to migrate to a modern load balancing platformTop 10 F5 iRules to migrate to a modern load balancing platform
Top 10 F5 iRules to migrate to a modern load balancing platformAvi Networks
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it meansRobert Nyman
 
Doctype htm1
Doctype htm1Doctype htm1
Doctype htm1Eddy_TKJ
 
Websockets talk at Rubyconf Uruguay 2010
Websockets talk at Rubyconf Uruguay 2010Websockets talk at Rubyconf Uruguay 2010
Websockets talk at Rubyconf Uruguay 2010Ismael Celis
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, MontevideoJavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, MontevideoRobert Nyman
 
Angular&node js upload file
Angular&node js upload fileAngular&node js upload file
Angular&node js upload fileHu Kenneth
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORMYaroslav Muravskyi
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, ChileJavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, ChileRobert Nyman
 
JavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos AiresJavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos AiresRobert Nyman
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web AppsMark
 
Simple Photo Processing and Web Display with Perl
Simple Photo Processing and Web Display with PerlSimple Photo Processing and Web Display with Perl
Simple Photo Processing and Web Display with PerlKent Cowgill
 
神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)guregu
 

La actualidad más candente (20)

Perl Web Client
Perl Web ClientPerl Web Client
Perl Web Client
 
RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK - Nicola Iarocci - Co...
RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK -  Nicola Iarocci - Co...RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK -  Nicola Iarocci - Co...
RESTFUL SERVICES MADE EASY: THE EVE REST API FRAMEWORK - Nicola Iarocci - Co...
 
Top 10 F5 iRules to migrate to a modern load balancing platform
Top 10 F5 iRules to migrate to a modern load balancing platformTop 10 F5 iRules to migrate to a modern load balancing platform
Top 10 F5 iRules to migrate to a modern load balancing platform
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it means
 
Doctype htm1
Doctype htm1Doctype htm1
Doctype htm1
 
Websockets talk at Rubyconf Uruguay 2010
Websockets talk at Rubyconf Uruguay 2010Websockets talk at Rubyconf Uruguay 2010
Websockets talk at Rubyconf Uruguay 2010
 
Nubilus Perl
Nubilus PerlNubilus Perl
Nubilus Perl
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, MontevideoJavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
JavaScript APIs - The Web is the Platform - MDN Hack Day, Montevideo
 
Angular&node js upload file
Angular&node js upload fileAngular&node js upload file
Angular&node js upload file
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORM
 
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, ChileJavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
JavaScript APIs - The Web is the Platform - MDN Hack Day, Santiago, Chile
 
JavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos AiresJavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
JavaScript APIs - The Web is the Platform - MozCamp, Buenos Aires
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web Apps
 
HTML,CSS Next
HTML,CSS NextHTML,CSS Next
HTML,CSS Next
 
Simple Photo Processing and Web Display with Perl
Simple Photo Processing and Web Display with PerlSimple Photo Processing and Web Display with Perl
Simple Photo Processing and Web Display with Perl
 
Mongo db for C# Developers
Mongo db for C# DevelopersMongo db for C# Developers
Mongo db for C# Developers
 
Intro to Parse
Intro to ParseIntro to Parse
Intro to Parse
 
Play!ng with scala
Play!ng with scalaPlay!ng with scala
Play!ng with scala
 
Mongo db for c# developers
Mongo db for c# developersMongo db for c# developers
Mongo db for c# developers
 
神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)
 

Similar a ABCD firebase

Intoduction on Playframework
Intoduction on PlayframeworkIntoduction on Playframework
Intoduction on PlayframeworkKnoldus Inc.
 
Service worker: discover the next web game changer
Service worker: discover the next web game changerService worker: discover the next web game changer
Service worker: discover the next web game changerSandro Paganotti
 
Taking Web Apps Offline
Taking Web Apps OfflineTaking Web Apps Offline
Taking Web Apps OfflinePedro Morais
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejsNick Lee
 
Softshake - Offline applications
Softshake - Offline applicationsSoftshake - Offline applications
Softshake - Offline applicationsjeromevdl
 
Riak with node.js
Riak with node.jsRiak with node.js
Riak with node.jsSean Cribbs
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of usOSCON Byrum
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015Fernando Daciuk
 
From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)Night Sailer
 
Future of Web Apps: Google Gears
Future of Web Apps: Google GearsFuture of Web Apps: Google Gears
Future of Web Apps: Google Gearsdion
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF Luc Bors
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02PL dream
 

Similar a ABCD firebase (20)

Intoduction on Playframework
Intoduction on PlayframeworkIntoduction on Playframework
Intoduction on Playframework
 
Service worker: discover the next web game changer
Service worker: discover the next web game changerService worker: discover the next web game changer
Service worker: discover the next web game changer
 
Taking Web Apps Offline
Taking Web Apps OfflineTaking Web Apps Offline
Taking Web Apps Offline
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejs
 
Softshake - Offline applications
Softshake - Offline applicationsSoftshake - Offline applications
Softshake - Offline applications
 
Riak with node.js
Riak with node.jsRiak with node.js
Riak with node.js
 
Firebase with Android
Firebase with AndroidFirebase with Android
Firebase with Android
 
Backendless apps
Backendless appsBackendless apps
Backendless apps
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015
 
实战Ecos
实战Ecos实战Ecos
实战Ecos
 
From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)
 
Future of Web Apps: Google Gears
Future of Web Apps: Google GearsFuture of Web Apps: Google Gears
Future of Web Apps: Google Gears
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF
 
How te bring common UI patterns to ADF
How te bring common UI patterns to ADFHow te bring common UI patterns to ADF
How te bring common UI patterns to ADF
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
 
Zend framework service
Zend framework serviceZend framework service
Zend framework service
 
Zend framework service
Zend framework serviceZend framework service
Zend framework service
 

Último

VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 

Último (20)

VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 

ABCD firebase