SlideShare a Scribd company logo
1 of 124
Download to read offline
Instant

Loading
Add to 

Home Screen
Push

Noti8cations
Fast Secure Responsive
Responsive
Secure
Secure
Trust
Data integrity
User privacy
HTTP
attackerssensitive
data
HTTP
Best deal!
Only today.
inject advertisement
Instant loading
P R P L
Push critical resources
for the initial URL route
Render initial route
Pre-cache remaining
routes
Lazy-load and create
remaining routes on
demand
App shell Content
<app-drawer-layout>

<app-drawer>

<app-toolbar>Menu</app-toolbar>

<iron-selector selected="[[page]]">

<a name="view1" href="/view1">View One</a>

...

</iron-selector>

</app-drawer>



<app-header-layout>

...

</app-header-layout>

</app-drawer-layout>
<iron-pages selected="[[page]]" attr-for-selected="name">

<my-view1 name="view1"></my-view1>

<my-view2 name="view2"></my-view2>

<my-view3 name="view3"></my-view3>

<my-view404 name="view404"></my-view404>

</iron-pages>
class MyApp extends Polymer.Element {
static get is() {
return ‘my-app';
}
static get properties() {
return {
page: {
type: String,
observer: '_pageChanged',
},
};
}
_pageChanged(page) {
const resolvedPageUrl = this.resolveUrl('my-' + page + '.html');
this.importHref(resolvedPageUrl, null, this._showPage404, true);
}
_showPage404() {
this.page = 'view404';
}
}
HTTP/2
Server Push
h>ps://shop.polymer-project.org
Demo time
Add to Home Screen
<html lang="en">

<head>

<meta charset="utf-8">

<title>GDG DevFest Ukraine 2017</title>

<link rel="manifest" href="manifest.json">
...
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "standalone",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "standalone",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "standalone",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "standalone",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "standalone",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "browser",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "standalone",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "browser",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
{

"name": “GDG DevFest Ukraine 2016",

"short_name": “GDG DevFest",

"icons": [{

"src": "images/icons/splash-icon-128.png",

"sizes": "128x128",

"type": "image/png"

},{

"src": "images/icons/splash-icon-192.png",

"sizes": "192x192",

"type": "image/png"

},{

"src": "images/icons/splash-icon-384.png",

"sizes": "384x384",

"type": "image/png"

}],

"start_url": "/",

"display": "browser",

"background_color": "#607d8b",

"theme_color": "#607d8b"

}
h>ps://devfest.gdg.org.ua
Demo time
56.83%
Source (Mar 2017): http://caniuse.com/#feat=web-app-manifest
IN DEV IN DEV
OOine access
navigator.serviceWorker.register('/service-worker.js')
.then(reg => {
console.log('Service Worker Registered', reg);
})
.catch(err => {
console.log('Error registering Service Worker', err);
});
Register Service Worker
const cacheName = 'app-shell-cache-v1';
const filesToCache = ['/', '/index.html', ...];
self.addEventListener('install', event => {
event.waitUntil(caches.open(cacheName)
.then(cache => cache.addAll(filesToCache))
.then(() => self.skipWaiting())
);
});
Cache Files
const cacheName = 'app-shell-cache-v1';
const filesToCache = ['/', '/index.html', ...];
self.addEventListener('install', event => {
event.waitUntil(caches.open(cacheName)
.then(cache => cache.addAll(filesToCache))
.then(() => self.skipWaiting())
);
});
Cache Files
self.addEventListener('activate', event => {
event.waitUntil(caches.keys()
.then(keyList => {
return Promise.all(keyList.map(key => {
if (key !== cacheName) {
return caches.delete(key);
}
}));
}));
return self.clients.claim();
});
Remove Outdated Resources
self.addEventListener('activate', event => {
event.waitUntil(caches.keys()
.then(keyList => {
return Promise.all(keyList.map(key => {
if (key !== cacheName) {
return caches.delete(key);
}
}));
}));
return self.clients.claim();
});
Remove Outdated Resources
self.addEventListener('fetch', event => {
event.respondWith(caches.match(event.request)
.then(response => {
return response || fetch(event.request);
}));
});
Return Resources from Cache
self.addEventListener('fetch', event => {
event.respondWith(caches.match(event.request)
.then(response => {
return response || fetch(event.request);
}));
});
Return Resources from Cache
Amsterdam, NL - Go Daddy - Chrome - 3G
First View (3.7s)
Repeat View (0.6s)
h>ps://devfest.gdg.org.ua
Demo time
Browser quota limits
6% of free disk
space per
origin
10% of free
disk space
(shared
across
eTLD+1)
at least 10%
of free disk
space
8GB: 10MB
32GB: 50MB
128GB: 250MB
>128GB: 500MB
62.8%
Source (Mar 2017): http://caniuse.com/#feat=serviceworkers
CONS. IN DEV
Push Noti8cations
Timely Precise Relevant
Check if User
is Subscribed
Ask User
To Subscribe
User
Subscribes
Send
Subscription
Save
Subscription
Browser Server
Subscribing Users
navigator.serviceWorker.register('/service-worker.js')
.then(reg => {
reg.pushManager.getSubscription()
.then(sub => {
console.log('Subscription Info', sub);
});
});
Check for Subscriptions
navigator.serviceWorker.register('/service-worker.js')
.then(reg => {
reg.pushManager.getSubscription()
.then(sub => {
console.log('Subscription Info', sub);
});
});
Check for Subscription
const opts = { userVisibleOnly: true, applicationServerKey: pubKey };
navigator.serviceWorker.getRegistration()
.then(reg => {
reg.pushManager.subscribe(opts)
.then(sub => {
console.log('Update Server with sub obj', sub);
})
.catch(error => {
console.log('Unable to subscribe user', error);
});
});
Subscribe the User
JSONi8ed Subscription Object
{

"endpoint": "https://example.com/push/ddj4Sk3abw:A49b...",

"keys": {

"auth": "qLAYRzG9TnUwbprns6H2Ew==",

"p256dh": "BILXd-c1-zuEQYXH_tc3qmLcqZclw7-Xs0Nlu/sG..."

}

}
navigator.serviceWorker.getRegistration()
.then(reg => {
reg.pushManager.getSubscription()
.then(sub => {
if (sub) {
sub.unsubscribe();
console.log('Update our server to remove subscription');
}
});
})
.catch(error => {
console.log('Error while trying to unsubscribe', error);
});
Unsubscribe the User
Generate
Message
Send to
End Point
Send to
Browser
Received
by Browser
Server BrowserEnd Point
Sending Messages
Push Arrives SW Starts Handle
Message
Show
Notification
Browser
Receiving Messages
self.addEventListener('push', event => {
let data;
if (event.data) {
data = event.data.json();
} else {
// fetch data from server
}
self.registration.showNotification(data.title, {
body: data.body, icon: data.icon, tag: data.tag
});
});
Listen For Messages
self.addEventListener('push', event => {
let data;
if (event.data) {
data = event.data.json();
} else {
// fetch data from server
}
self.registration.showNotification(data.title, {
body: data.body, icon: data.icon, tag: data.tag
});
});
Listen For Messages
{

"body": "Did you make a $1,000,000 purchase at Dr. Evil...",

"icon": "images/card.png",

"vibrate": [200, 100, 200, 100, 200, 100, 400],

"tag": "request",

"actions": [

{ "action": "yes", "title": "Yes", "icon": "images/yes.png" },

{ "action": "no", "title": "No", "icon": "images/no.png" }

]

}
self.registration.showNotification(data.title, {

body: data.body,

icon: data.icons,

tag: data.tag,

actions: [

{action: 'like', title: 'Like', icon: ic_li},

{action: 'reshare', title: 'Reshare', icon: ic_re}

]

});
Add Action Bu>ons
Respond To The User
self.addEventListener('notificationclick', event => {

if (event.action === 'like') {

event.waitUntil(fetch('/like-from-notification'));

} else if (event.action === 'reshare') {

event.waitUntil(fetch('/reshare-from-notification'));

} else {

clients.openWindow(event.srcElement.location.origin);

}

});
h>ps://tests.peter.sh/noti8cation-generator
Demo time
62.33%
Source (Mar 2017): http://caniuse.com/#feat=push-api
IN DEV
Responsive
— 100%
Secure
— 100%
Fast
— 100%
Instant Loading
— 62.8%
Push Noti8cations
— 62.33%
Add to Home Screen
— 56.83%
Lighthouse
Project page: https://github.com/GoogleChrome/lighthouse
Project page: https://github.com/GoogleChrome/lighthouse
Project page: https://github.com/GoogleChrome/lighthouse
Maximize reach
Source (June 2015): https://goo.gl/nArG5B
2.5x
Monthly unique visitors on mobile
8.9
3.3
BROWSER APP
Fewer clicks,
more patience
A seamless
inter-app
experience
Is this the end of 

Native apps?
BROWSERBROWSERBROWSERBROWSERBROWSER
14%
10% 9% 8%
20%
158 162
220
251
300
Q1 2013 Q1 2014 Q2 2015 Q4 2015 Q4 2016
Source (Feb 2017): http://flurrymobile.tumblr.com
US Daily Mobile Time Spent
Progressive web apps have limited
capabilities when it comes to offering
integration with a smartphone or
tablet’s hardware features
Auth
navigator.credentials.get()

navigator.credentials.store()

navigator.credentials.requireUserMediation()
Credential Management API
const cred = new FederatedCredential({

id: id, 

name: name, 

provider: 'https://accounts.google.com', 

iconURL: iconUrl 

});


navigator.credentials.store(cred);
Credential Management API
navigator.credentials.get({

password: true,

federated: {

providers: [

'https://accounts.google.com',

'https://www.facebook.com'

]

},

unmediated: true // `unmediated: true` lets the user automatically sign in

}).then(cred => {

if (cred) // auto sign-in possible

else // auto sign-in not possible

});
Credential Management API
navigator.credentials.get().then(cred => {

if (cred.type === 'federated'

&& cred.provider === 'https://accounts.google.com') {

const auth2 = gapi.auth2.getAuthInstance();



return auth2.signIn({

login_hint: cred.id || ''

}).then(profile => {

...

});

}

});
Credential Management API
Enable users to sign in with just one
tap
Remember the federated account
the user has used to sign in with
Sign users back in when a session
expires
h>ps://credential-management-sample.appspot.com
Demo time
50.08%
Source (Mar 2017): http://caniuse.com/#feat=credential-management
CONS.CONS.
Payments
const request = new PaymentRequest(
methodData, // required payment method data
details, // required information about transaction
options // optional parameter for things like shipping, etc.
);
Payment Request API
const methodData = [{
supportedMethods: [ "basic-card" ],
data: {
supportedNetworks: [ "visa", "mastercard" ]
}
}];
Payment Request API
const details = {
displayItems: [{
label: "Original donation amount",
amount: { currency: "USD", value : "65.00" }, // US$65.00
},
{
label: "Friends and family discount",
amount: { currency: "USD", value : "-10.00" }, // -US$10.00
pending: true // The price is not determined yet
}],
total: {
label: "Total",
amount: { currency: "USD", value : "55.00" }, // US$55.00
}
};
Payment Request API
const options = {
requestShipping: true,
shippingType: "shipping" // "shipping"(default), "delivery" or "pickup"
};
Payment Request API
const request = new PaymentRequest(methodData, details, options);
request.show()
.then(paymentResponse => {
// Process paymentResponse here
paymentResponse.complete("success");
})
.catch(err => {
console.error("Uh oh, something bad happened", err.message);
});
Payment Request API
Standardize the payment
communication flow as much as
possible
Support different secure payment
methods
Integrates into existing checkout
flow
h>ps://emerald-eon.appspot.com
Demo time
25.64%
Source (Mar 2017): http://caniuse.com/#feat=payment-request
FLAGFLAG
Bluetooth
navigator.bluetooth.requestDevice({
acceptAllDevices: true, optionalServices: ['generic_access']
})
.then(device => device.gatt.connect())
.then(server => {
...
})
.catch(error => {
console.log(error);
});
Web Bluetooth API
h>ps://beaufodfrancois.github.io/sandbox/web-bluetooth/eddystone-url-con8g
Demo time
43.32%
Source (Mar 2017): http://caniuse.com/#feat=web-bluetooth
VR
navigator.getVRDisplays().then(displays => {
displays = displays.filter(display => display.capabilities.canPresent);
if (displays.length === 0) {
console.warn('No devices available able to present.');
return;
}
this._vr.display = displays[0];
this._vr.display.depthNear = DemoVR.CAMERA_SETTINGS.near;
this._vr.display.depthFar = DemoVR.CAMERA_SETTINGS.far;
});
WebVR API
h>ps://ad-socks.herokuapp.com/demo.html
Demo time
0%
Source (Mar 2017): http://caniuse.com/#feat=webvr
FLAG FLAG
Share
navigator.share({

title: 'Web Share API Demo',

text: 'Hello, United Dev Conf. #pwa #webShareAPI #webrocks',

url: 'https://web-today.firebaseapp.com/share'

})

.then(() => console.log('Successful share'))

.catch(error => console.log('Error sharing:', error));
Web Share API
h>ps://justmarkup.com/log/2016/10/using-the-web-share-api
Demo time
0%
Source (Mar 2017): https://paul.kinlan.me/navigator.share
FLAG
Credential Management API
— 50.08%
Payment Request API
— 25.64%
Web Bluetooth API
— 43.32%
WebVR API
— 0%
Web Share API
— 0%
Reduce
development
time
Simple updates
Unified
customer
experience
Easier access
and increased
engagement
104% for new users across all browsers
82% increase in iOS conversion rate
2X more pages visited per session
74% increase in time spent per session
across all browsers
Live: https://aliexpress.com Source: https://developers.google.com/web/showcase/2016/aliexpress
76% higher conversions across browsers
14% more monthly active users on iOS,
30% on Android
4X higher interaction rate from Add to
Homescreen
Live: http://www.alibaba.com Source: https://developers.google.com/web/showcase/2016/alibaba
38% more conversions
40% lower bounce rate
10% longer average session
30% faster page load
Live: https://housing.com Source: https://developers.google.com/web/showcase/2016/housing
Source: https://developers.google.com/web/progressive-web-apps/checklist
Site is served over HTTPS
Pages are responsive on tablets &
mobile devices
The start URL (at least) loads while
offline
Metadata provided for Add to Home
screen
First load fast even on 3G
Site works cross-browser
Page transitions don't feel like they
block on the network
Each page has a URL
Progressive Web App Checklist
https://developers.google.com/web/progressive-web-apps
https://www.youtube.com/user/ChromeDevelopers
https://whatwebcando.today
Learn More
Thank you
Oleh Zasadnyy

@ozasadnyy

More Related Content

What's hot

A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019Matt Raible
 
A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019Matt Raible
 
JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011Shreedhar Ganapathy
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web AppsFITC
 
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RSSpark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RSArun Gupta
 
High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)Nicholas Zakas
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video PlayerJim Jeffers
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5dynamis
 
webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)Hendrik Ebbers
 
High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010Nicholas Zakas
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!David Gibbons
 
Our application got popular and now it breaks
Our application got popular and now it breaksOur application got popular and now it breaks
Our application got popular and now it breaksColdFusionConference
 
Learning from the Best jQuery Plugins
Learning from the Best jQuery PluginsLearning from the Best jQuery Plugins
Learning from the Best jQuery PluginsMarc Grabanski
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Matt Raible
 
The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)David Gibbons
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitAriya Hidayat
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Matt Raible
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Nicholas Zakas
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13Fred Sauer
 

What's hot (20)

A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
 
A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019
 
JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RSSpark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RS
 
High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5
 
webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)
 
High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!
 
Web Components
Web ComponentsWeb Components
Web Components
 
Our application got popular and now it breaks
Our application got popular and now it breaksOur application got popular and now it breaks
Our application got popular and now it breaks
 
Learning from the Best jQuery Plugins
Learning from the Best jQuery PluginsLearning from the Best jQuery Plugins
Learning from the Best jQuery Plugins
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
 
The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
 

Similar to Oleh Zasadnyy "Progressive Web Apps: line between web and native apps become thinner"

[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
[cssdevconf] Adaptive Images in RWD
[cssdevconf] Adaptive Images in RWD[cssdevconf] Adaptive Images in RWD
[cssdevconf] Adaptive Images in RWDChristopher Schmitt
 
[rwdsummit2012] Adaptive Images in Responsive Web Design
[rwdsummit2012] Adaptive Images in Responsive Web Design[rwdsummit2012] Adaptive Images in Responsive Web Design
[rwdsummit2012] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
[html5tx] Adaptive Images in Responsive Web Design
[html5tx] Adaptive Images in Responsive Web Design[html5tx] Adaptive Images in Responsive Web Design
[html5tx] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)
How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)
How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)Seven Peaks Speaks
 
How We Build NG-MY Websites: Performance, SEO, CI, CD
How We Build NG-MY Websites: Performance, SEO, CI, CDHow We Build NG-MY Websites: Performance, SEO, CI, CD
How We Build NG-MY Websites: Performance, SEO, CI, CDSeven Peaks Speaks
 
Pinkoi Mobile Web
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Webmikeleeme
 
[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web Design[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
Responsive Web in Brief
Responsive Web in BriefResponsive Web in Brief
Responsive Web in BriefEPAM
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and ImprovedTimothy Fisher
 
[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclientHoneynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclientAngelo Dell'Aera
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3masahiroookubo
 
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web DesignChristopher Schmitt
 

Similar to Oleh Zasadnyy "Progressive Web Apps: line between web and native apps become thinner" (20)

[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design
 
[cssdevconf] Adaptive Images in RWD
[cssdevconf] Adaptive Images in RWD[cssdevconf] Adaptive Images in RWD
[cssdevconf] Adaptive Images in RWD
 
[rwdsummit2012] Adaptive Images in Responsive Web Design
[rwdsummit2012] Adaptive Images in Responsive Web Design[rwdsummit2012] Adaptive Images in Responsive Web Design
[rwdsummit2012] Adaptive Images in Responsive Web Design
 
Introduction to Html5
Introduction to Html5Introduction to Html5
Introduction to Html5
 
[html5tx] Adaptive Images in Responsive Web Design
[html5tx] Adaptive Images in Responsive Web Design[html5tx] Adaptive Images in Responsive Web Design
[html5tx] Adaptive Images in Responsive Web Design
 
How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)
How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)
How We Build NG-MY Websites: Performance, SEO, CI, CD (Thai version)
 
How We Build NG-MY Websites: Performance, SEO, CI, CD
How We Build NG-MY Websites: Performance, SEO, CI, CDHow We Build NG-MY Websites: Performance, SEO, CI, CD
How We Build NG-MY Websites: Performance, SEO, CI, CD
 
Pinkoi Mobile Web
Pinkoi Mobile WebPinkoi Mobile Web
Pinkoi Mobile Web
 
[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design
 
[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web Design[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web Design
 
Responsive Web in Brief
Responsive Web in BriefResponsive Web in Brief
Responsive Web in Brief
 
Progressive What Apps?
Progressive What Apps?Progressive What Apps?
Progressive What Apps?
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design
 
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclientHoneynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclient
 
AspNetWhitePaper
AspNetWhitePaperAspNetWhitePaper
AspNetWhitePaper
 
AspNetWhitePaper
AspNetWhitePaperAspNetWhitePaper
AspNetWhitePaper
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3
 
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
 
Presentation Tier optimizations
Presentation Tier optimizationsPresentation Tier optimizations
Presentation Tier optimizations
 

More from IT Event

Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...IT Event
 
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"IT Event
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...IT Event
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "IT Event
 
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"IT Event
 
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"IT Event
 
Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"IT Event
 
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"IT Event
 
James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"IT Event
 
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...IT Event
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"IT Event
 
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"IT Event
 
Наш ответ Uber’у
Наш ответ Uber’уНаш ответ Uber’у
Наш ответ Uber’уIT Event
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
 
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"IT Event
 
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...IT Event
 
Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"IT Event
 
Andrew Stain "User acquisition"
Andrew Stain "User acquisition"Andrew Stain "User acquisition"
Andrew Stain "User acquisition"IT Event
 

More from IT Event (20)

Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
 
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
 
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
 
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
 
Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"
 
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
 
James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"
 
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"
 
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
 
Наш ответ Uber’у
Наш ответ Uber’уНаш ответ Uber’у
Наш ответ Uber’у
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
 
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
 
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
 
Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"
 
Andrew Stain "User acquisition"
Andrew Stain "User acquisition"Andrew Stain "User acquisition"
Andrew Stain "User acquisition"
 

Recently uploaded

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
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
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 Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
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
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 

Recently uploaded (20)

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...
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
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 Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
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
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 

Oleh Zasadnyy "Progressive Web Apps: line between web and native apps become thinner"