SlideShare ist ein Scribd-Unternehmen logo
1 von 152
Downloaden Sie, um offline zu lesen
Progressive Web Apps are
here!
Antonio Perić-Mažar, Locastic

27.10.2018., #sfcampua
Antonio Perić-Mažar
CEO @ Locastic
Co-Founder @ Blockada
antonio@locastic.com
@antonioperic
Locastic
• We help clients create amazing web and mobile apps (since 2011)
• mobile development
• web development
• UX/UI
• Training and Consulting
• Shift Conference, Symfony Croatia
• www.locastic.com t: @locastic
Not a Symfony talk!
[Mobile] User Experience
on Web
And trust me… you will never had enough cheese
“I don't care how many kick-ass Visio architecture diagrams
you have; as far as the user is concerned, the UI is the
application. I know UI US HARD, but you have to build an
impressive UI if you want to be taken seriously. Give your UI
the high priority it deserves.”
Jeff Atwood, Coding Horror blog
Capebility
Reach
“A Progressive Web App uses
modern web capabilities to deliver
an app-like user experience.”
“A Progressive Web App uses
modern web capabilities to deliver
an app-like user experience.”
PWA is:
• Progressive - Works for every user, regardless of browser choice because it's
built with progressive enhancement as a core tenet.
• Responsive - Fits any form factor: desktop, mobile, tablet, or whatever is next.
• Connectivity independent - Enhanced with service workers to work offline or
on low-quality networks.
• App-like - Feels like an app, because the app shell model separates the
application functionality from application content .
• Fresh - Always up-to-date thanks to the service worker update process.
PWA is:
• Safe - Served via HTTPS to prevent snooping and to ensure content hasn't been
tampered with.
• Discoverable - Is identifiable as an "application" thanks to W3C manifest and
service worker registration scope, allowing search engines to find it.
• Re-engageable - Makes re-engagement easy through features like push
notifications.
• Installable - Allows users to add apps they find most useful to their home
screen without the hassle of an app store.
• Linkable - Easily share the application via URL, does not require complex
installation.
Fast Integrated
Reliable Engaging
4
things to focus on
Fast Integrated
Reliable Engaging
Fast
• No junky scrolling
• No slow load performance
• Measure and improve all the time
• Bad connection (or no connection) is not excuse
53%
of users abandon
sites that take longer
than 3 seconds to load
https://cloudfour.com/thinks/ios-doesnt-support-progressive-web-apps-so-what/
App shell model
• Reliable performance that is consistently fast
• Native-like interactions
• Economical use of data
Fast Integrated
Reliable Engaging
Integrated
• User should not reach browser to reach your app
• They should be able to interact same as with any other
app on their device
• They expect to have all possibilities as other apps
• Users should be able to start app from their home
screen
https://www.mobigyaan.com/android-8-0-oreo-vs-ios-11-which-is-better
https://techcrunch.com/2017/08/25/majority-of-u-s-consumers-still-download-zero-apps-per-month-says-comscore/
https://techcrunch.com/2017/08/25/majority-of-u-s-consumers-still-download-zero-apps-per-month-says-comscore/
https://www.technology.org/2017/07/28/progressive-web-apps-vs-native-which-is-better-for-your-business/
80%
users intentionally moved apps
to their home screen
Broken experience
• Required user interaction
• Where it will start?
• Would it work offline?
https://medium.com/@saigeleslie/how-to-create-a-progressive-web-app-with-react-in-5-mins-or-less-3aae3fe98902
Web manifest
• Simple JSON file
• Tell browsers about your app and how it should behave once
app is ‘installed’
• Having manifest is required to show add to home screen pop-up
• Works for desktop and mobile apps (chrome)
• https://manifest-validator.appspot.com/
• https://app-manifest.firebaseapp.com/
{
   "background_color":"#ffffff",
   "description":"It's what's happening. From breaking news and entertainment, sports
 and politics, to big events and everyday interests.",
   "display":"standalone",
   "gcm_sender_id":"49625052041",
   "gcm_user_visible_only":true,
   "icons":[
      {
         "src":"https://abs.twimg.com/responsive-web/web/ltr/icon-default.
604e2486a34a2f6e.png",
         "sizes":"192x192",
         "type":"image/png"
      },
      {
         "src":"https://abs.twimg.com/responsive-web/web/ltr/icon-default.
604e2486a34a2f6e.png",
         "sizes":"512x512",
         "type":"image/png"
      }
   ],
   "name":"Twitter",
   "share_target":{
      "action":"compose/tweet",
      "params":{
         "title":"title",
         "text":"text",
         "url":"url"
      }
   },
   "short_name":"Twitter",
   "start_url":"/",
   "theme_color":"#ffffff",
   “scope":"/"
}
{
   "background_color":"#ffffff",
   "display":"standalone",
   "icons":[
 …
   ],
   "name":"Twitter",
   "short_name":"Twitter",
   "start_url":"/",
   "theme_color":"#ffffff",
   “scope":"/"
}
<link rel="manifest" href="/manifest.json">
You can add it now to 

your app
What are the criteria?
• The web app is not already installed
• Meets a user engagement heuristic (currently, the user
has interacted with the domain for at least 30 seconds)
• Served over HTTPS (required for service workers)
• Has registered a service worker with a fetch event
handler
What are the criteria?
• Includes a web app manifest that includes:
• Short name or name
• Icons must include a 192px and a 512px sized icons
• start_url
• Display must be: fullscreen, standalone, or minimal-
ui
What are the criteria?
• When these criteria are met, Chrome will fire a
beforeinstallprompt event that you can use to
prompt the user to install your Progressive Web App.
let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {
// Prevent Chrome 67 and earlier from automatically showing the prompt
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
});
What are the criteria?
btnAdd.addEventListener('click', (e) => {
// hide our user interface that shows our A2HS button
btnAdd.style.display = 'none';
// Show the prompt
deferredPrompt.prompt();
// Wait for the user to respond to the prompt
deferredPrompt.userChoice
.then((choiceResult) => {
if (choiceResult.outcome === 'accepted') {
console.log('User accepted the A2HS prompt');
} else {
console.log('User dismissed the A2HS prompt');
}
deferredPrompt = null;
});
});
https://ponyfoo.com/articles/progressive-app-serviceworker
40%
higher interaction rate from
Home screen
Web Payment API!
66%
of purchases on mobile are
on the web
1/3
of purchases on Web are
via mobile
That means the UX 

is BROKEN!
Checkout forms today:
• Manual
• Tedious
• Slow
• N-taps
http://www.alyssatucker.com/improving-hollars-ios-checkout-process/
Autofill - step forward
• Autocomplete attributes
• 30% faster
• Automatic
• Simple
• Slow
• n-taps
http://www.alyssatucker.com/improving-hollars-ios-checkout-process/
Web Payment API!
// Supported payment methods
const paymentMethods = [{
supportedMethods: 'basic-card',
data: {
supportedNetworks: [
'visa', 'mastercard', 'amex', 'discover',
'diners', 'jcb', 'unionpay'
]
}
}, {
supportedMethods: 'https://bobpay.xyz/pay',
}];
Define payment methods
var options = {
requestShipping: true,
requestPayerEmail: true,
requestPayerPhone: true,
requestPayerName: true,
shippingType: 'delivery'
};
var request = new PaymentRequest(paymentMethods, paymentDetails,
paymentOptions);
Setup your payment options
request.show().then(response => {
// [process payment]
// send to a PSP etc.
response.complete('success');
});
Show payment screen
{ // example response

"methodName": "basic-card",

"details": {

"cardholderName": "Larry Page",

"cardNumber": "4111111111111111",

"expiryMonth": "12",

"expiryYear": "2020",

"cardSecurityCode": "111",

"billingAddress": { ... }

},

"payerName": "Larry Page",

"payerPhone": "212-555-1212",

"payerEmail": "user@example.com"

}

Payment response
Web Payment API!
• Automatic
• Simple
• Fast
• 1-tap
• Supportes payment gatway,

or some applications payment 

(Google Pay)
https://paymentrequest.show/images/pr-woocommerce.gif
More APIs
• Media Session
• Media Capture API
• Casting support
• Web bluetooth
• Web Share
More APIs
• Media Session
• Media Capture API
• Casting support
• Web bluetooth
• Web Share
Remember
users expect to be able to
interact with your app in the
same way that they do all of
the other apps on their device
Fast Integrated
Reliable Engaging
Reliable
Reliability means, never showing the Downsaur
Reliable
• The quality of a network connection can be affected by a number of factors such as:
• Poor coverage of a provider.
• Extreme weather conditions.
• Power outages.
• Users travelling into “dead zones” such as buildings that block their network
connections.
• Travelling on a train and going through a tunnel.
• Internet connection is managed by a third party and time boxed when it will be
active or inactive like in an airport or hotel.
• Cultural practises that require limited or no internet access at specific times or days.
Reliable
• We need instant loading offline
• 60% of mobile connection is 2G
• Fast Application is UX
• 14 sec to load average website on 4g
• 19 sec to load average website on 3G
Service Workers
Service Workers
Service WorkersService Workers
Service Workers
• Rich offline experiences
• Background syncs
• Push notifications
• …
Service Workers
• Script that browser runs in background, separated
from web page
• It is Javascript worker, so it cannot access to DOM
directly
• Service worker is a programmable network proxy,
allowing you to control how network requests from
your page are handled.
Service Workers
• It's terminated when not in use, and restarted when
it's next needed, so you cannot rely on global state
within a service worker's onfetch and onmessage
handlers.
• Service workers make extensive use of promises
• Service worker is for second load
Service Workers lifecycle
Register a Service Worker
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js').then(function(registration)
{
// Registration was successful
console.log('ServiceWorker registration successful with scope: ',
registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
On Install
var CACHE_NAME = 'my-site-cache-v1';
var urlsToCache = [
'/',
'/styles/main.css',
'/script/main.js'
];
self.addEventListener('install', function(event) {
// Perform install steps
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
Cache and return requests
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
return fetch(event.request);
}
)
);
});
Service workers Events
• On install - as a dependency
• On install - not as a dependency
• On activate
• On user interaction
• On network response
• Stale-while-revalidate
• On push message
• On background-sync
Update Service Worker
• Update your service worker JavaScript file. When the user navigates to your
site, the browser tries to redownload the script file that defined the service
worker in the background. If there is even a byte's difference in the service
worker file compared to what it currently has, it considers it new.
• Your new service worker will be started and the install event will be fired.
• At this point the old service worker is still controlling the current pages so the
new service worker will enter a waiting state.
• When the currently open pages of your site are closed, the old service worker
will be killed and the new service worker will take control.
• Once your new service worker takes control, its activate event will be fired.
Update Service Worker
• self.skipWaiting()
• Skips waiting for refresh to start using new SW
On User Interaction
// on user interaction
document.querySelector('.cache-article').addEventListener('click',
function(event) {
event.preventDefault();
var id = this.dataset.articleId;
caches.open('mysite-article-' + id).then(function(cache) {
fetch('/get-article-urls?id=' + id).then(function(response) {
// /get-article-urls returns a JSON-encoded array of
// resource URLs that a given article depends on
return response.json();
}).then(function(urls) {
cache.addAll(urls);
});
});
});
On Network response
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.open('mysite-dynamic').then(function(cache) {
return cache.match(event.request).then(function (response) {
return response || fetch(event.request).then(function(response) {
cache.put(event.request, response.clone());
return response;
});
});
})
);
});
On Background Sync
self.addEventListener('sync', function(event) {
if (event.id == 'update-leaderboard') {
event.waitUntil(
caches.open('mygame-dynamic').then(function(cache) {
return cache.add('/leaderboard.json');
})
);
}
});
SW: Serving suggestions - responding to requests
• Cache only
• Network only
• Cache, falling back to network
• Cache & network race
• Network falling back to cache
• Cache then network
• Generic fallback
• ServiceWorker-side templating
Cache only
Cache only
self.addEventListener('fetch', function(event) {
// If a match isn't found in the cache, the response
// will look like a connection error
event.respondWith(caches.match(event.request));
});
Network only
Network only
self.addEventListener('fetch', function(event) {
event.respondWith(fetch(event.request));
// or simply don't call event.respondWith, which
// will result in default browser behaviour
});
Cache, falling back to network
Cache, falling back to network
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request).then(function(response) {
return response || fetch(event.request);
})
);
});
Network, falling back to Cache
Network, falling back to Cache
self.addEventListener('fetch', function(event) {
event.respondWith(
fetch(event.request).catch(function() {
return caches.match(event.request);
})
);
});
Cache, than Network
Cache, than Networkvar networkDataReceived = false;
startSpinner();
// fetch fresh data
var networkUpdate = fetch('/data.json').then(function(response) {
return response.json();
}).then(function(data) {
networkDataReceived = true;
updatePage(data);
});
// fetch cached data
caches.match('/data.json').then(function(response) {
if (!response) throw Error("No data");
return response.json();
}).then(function(data) {
// don't overwrite newer network data
if (!networkDataReceived) {
updatePage(data);
}
}).catch(function() {
// we didn't get cached data, the network is our last hope:
return networkUpdate;
}).catch(showErrorMessage).then(stopSpinner);
Cache, than Network
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.open('mysite-dynamic').then(function(cache) {
return fetch(event.request).then(function(response) {
cache.put(event.request, response.clone());
return response;
});
})
);
});
Reliable conclusion
• Think how you design for the success, failure and instability of a
network connection
• Data may be expensive, so be considerate to the user
• Make sure performance is part of your design process and UX
• Try to provide offline by default if your app doesn't require much
data
• Inform users of their current state and of changes in states
• https://serviceworke.rs/ - different examples
Your goal is to provide a good
experience that lessens the
impact of changes in
connectivity
Fast Integrated
Reliable Engaging
Engaging
• Charming and Attractive
• Shift way how we think in patterns and designs from
web patterns to some native patterns
• Push notifications (browser doesn’t need to be
opened)
• Push Notification API
Engaging
What makes good notification
Push. Push. Back upon now. (Courtesy Enrique Iglesias)
What makes good notification
• Timely - I feel I need and it matters now
• Precise - specific info, what happens
• Personal - make it personal
What makes good notification
https://www.slideshare.net/SeulgiChoi4/pwa-push-notification
https://www.slideshare.net/SeulgiChoi4/pwa-push-notification
self.addEventListener('push', function(event) {
if (event.data.text() == 'new-email') {
event.waitUntil(
caches.open('mysite-dynamic').then(function(cache) {
return fetch('/inbox.json').then(function(response) {
cache.put('/inbox.json', response.clone());
return response.json();
});
}).then(function(emails) {
registration.showNotification("New email", {
body: "From " + emails[0].from.name
tag: "new-email"
});
})
);
}
});
self.addEventListener('notificationclick', function(event) {
if (event.notification.tag == 'new-email') {
// Assume that all of the resources needed to render
// /inbox/ have previously been cached, e.g. as part
// of the install handler.
new WindowClient('/inbox/');
}
});
Push Notifications
{
"body": "Did you make a $1,000,000 purchase at Dr. Evil...",
"icon": "images/ccard.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" }
]
}
43%
agrees to an app’s request to
allow push notifications
Credentials API!
• Removes friction from sign-in flows - Users can be
automatically signed back into a site even if their session has
expired or they saved credentials on another device.
• Allows one tap sign in with account chooser - Users can choose
an account in a native account chooser.
• Stores credentials - Your application can store either a
username and password combination or even federated account
details. These credentials can be synced across devices by the
browser.
Tools!
Lighthouse
Some show case!
65% increase in page per session
75% increase in Tweets sent

20% decrease in bounce rate
Twitter Lite
76% higher conversation across browsers
4x higher interaction rate from Add to screen
Increased usage of native apps also
Alibaba
80%+ conversation
54% smaller than Android app
120% smaller than iOS app
BookMyShow
Cut load times from 11.91 to 4.69
seconds
90% smaller than Native Android
App
https://medium.com/@addyosmani/a-tinder-progressive-web-app-performance-
case-study-78919d98ece0
Tinder
Myths about PWA!
PWAs are only for
offline apps
PWAs are a mobile thing
PWAs are a Google-only
thing
PWAs are not ready yet
https://pwa.rocks/
Don’t be driven with hype,
choose the best fit for your
project
It is not about PWA vs Native
apps, it is about Users
Thank you!
QnA?

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

The web - What it has, what it lacks and where it must go - Bulgaria Web Summ...
The web - What it has, what it lacks and where it must go - Bulgaria Web Summ...The web - What it has, what it lacks and where it must go - Bulgaria Web Summ...
The web - What it has, what it lacks and where it must go - Bulgaria Web Summ...
 
Introduction to Progressive Web App
Introduction to Progressive Web AppIntroduction to Progressive Web App
Introduction to Progressive Web App
 
Progressive web apps
 Progressive web apps Progressive web apps
Progressive web apps
 
Guidance on how to develop a progressive web app using react native!
Guidance on how to develop a progressive web app using react native!Guidance on how to develop a progressive web app using react native!
Guidance on how to develop a progressive web app using react native!
 
PWA - Progressive Web App
PWA - Progressive Web AppPWA - Progressive Web App
PWA - Progressive Web App
 
Mobile applications chapter 2
Mobile applications chapter 2Mobile applications chapter 2
Mobile applications chapter 2
 
Progressive web apps with Angular 2
Progressive web apps with Angular 2Progressive web apps with Angular 2
Progressive web apps with Angular 2
 
The web - What it has, what it lacks and where it must go - keynote at Riga D...
The web - What it has, what it lacks and where it must go - keynote at Riga D...The web - What it has, what it lacks and where it must go - keynote at Riga D...
The web - What it has, what it lacks and where it must go - keynote at Riga D...
 
PWA
PWAPWA
PWA
 
Bruce Lawson: Progressive Web Apps: the future of Apps
Bruce Lawson: Progressive Web Apps: the future of AppsBruce Lawson: Progressive Web Apps: the future of Apps
Bruce Lawson: Progressive Web Apps: the future of Apps
 
Basic Understanding of Progressive Web Apps
Basic Understanding of Progressive Web AppsBasic Understanding of Progressive Web Apps
Basic Understanding of Progressive Web Apps
 
Anatomy of a Progressive Web App
Anatomy of a Progressive Web AppAnatomy of a Progressive Web App
Anatomy of a Progressive Web App
 
Mobile applications chapter 4
Mobile applications chapter 4Mobile applications chapter 4
Mobile applications chapter 4
 
Mobile App Development and Xamarin as a Complete Mobile Solution
Mobile App Development and Xamarin as a Complete Mobile SolutionMobile App Development and Xamarin as a Complete Mobile Solution
Mobile App Development and Xamarin as a Complete Mobile Solution
 
Progressive Web Applications
Progressive Web ApplicationsProgressive Web Applications
Progressive Web Applications
 
Progressive Web Apps / GDG DevFest - Season 2016
Progressive Web Apps / GDG DevFest - Season 2016Progressive Web Apps / GDG DevFest - Season 2016
Progressive Web Apps / GDG DevFest - Season 2016
 
Introduction to Progressive Web Apps, Google Developer Summit, Seoul - South ...
Introduction to Progressive Web Apps, Google Developer Summit, Seoul - South ...Introduction to Progressive Web Apps, Google Developer Summit, Seoul - South ...
Introduction to Progressive Web Apps, Google Developer Summit, Seoul - South ...
 
Offline-First Progressive Web Apps
Offline-First Progressive Web AppsOffline-First Progressive Web Apps
Offline-First Progressive Web Apps
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web apps
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web apps
 

Ähnlich wie 20181023 progressive web_apps_are_here_sfcampua

Ähnlich wie 20181023 progressive web_apps_are_here_sfcampua (20)

JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
From AMP to PWA
From AMP to PWAFrom AMP to PWA
From AMP to PWA
 
Progressive Web App
Progressive Web AppProgressive Web App
Progressive Web App
 
Web application development full &amp; detailed guide for 2022
Web application development  full &amp; detailed guide for 2022Web application development  full &amp; detailed guide for 2022
Web application development full &amp; detailed guide for 2022
 
SenchaCon 2016: Using Ext JS 6 for Cross-Platform Development on Mobile - And...
SenchaCon 2016: Using Ext JS 6 for Cross-Platform Development on Mobile - And...SenchaCon 2016: Using Ext JS 6 for Cross-Platform Development on Mobile - And...
SenchaCon 2016: Using Ext JS 6 for Cross-Platform Development on Mobile - And...
 
How to Manage Digital User Experience for Web Applications
How to Manage Digital User Experience for Web ApplicationsHow to Manage Digital User Experience for Web Applications
How to Manage Digital User Experience for Web Applications
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Testing Strategy for Progressive Web Apps
Testing Strategy for Progressive Web AppsTesting Strategy for Progressive Web Apps
Testing Strategy for Progressive Web Apps
 
Progressive Web Apps - Porque nativo no es significa mejor
Progressive Web Apps - Porque nativo no es significa mejorProgressive Web Apps - Porque nativo no es significa mejor
Progressive Web Apps - Porque nativo no es significa mejor
 
How to deal with mobile traffic expansion
How to deal with mobile traffic expansionHow to deal with mobile traffic expansion
How to deal with mobile traffic expansion
 
Meet.js Summit 2019 - PWA in practice
Meet.js Summit 2019 - PWA in practiceMeet.js Summit 2019 - PWA in practice
Meet.js Summit 2019 - PWA in practice
 
Progressive Web Apps for Education
Progressive Web Apps for EducationProgressive Web Apps for Education
Progressive Web Apps for Education
 
progressive web app
 progressive web app progressive web app
progressive web app
 
Progressive Web Apps –The Future of Apps
Progressive Web Apps –The Future of Apps   Progressive Web Apps –The Future of Apps
Progressive Web Apps –The Future of Apps
 
Progressive Web Apps - Up & Running
Progressive Web Apps - Up & RunningProgressive Web Apps - Up & Running
Progressive Web Apps - Up & Running
 
Basic fundamentals of web application development
Basic fundamentals of web application developmentBasic fundamentals of web application development
Basic fundamentals of web application development
 
WTF R PWAs?
WTF R PWAs?WTF R PWAs?
WTF R PWAs?
 
Secret Web Performance Metric - DevDayBe
Secret Web Performance Metric - DevDayBeSecret Web Performance Metric - DevDayBe
Secret Web Performance Metric - DevDayBe
 
New trends on web platform
New trends on web platformNew trends on web platform
New trends on web platform
 

Mehr von Юлия Коваленко (7)

Архитектура фронтенда и дизайн-системы
Архитектура фронтенда и дизайн-системыАрхитектура фронтенда и дизайн-системы
Архитектура фронтенда и дизайн-системы
 
Blockchain
Blockchain Blockchain
Blockchain
 
Symfony 2018 slides
Symfony 2018 slidesSymfony 2018 slides
Symfony 2018 slides
 
Modularity problems
Modularity  problemsModularity  problems
Modularity problems
 
Filesystem abstractions and msg queue sergeev - symfony camp 2018
Filesystem abstractions and msg queue   sergeev - symfony camp 2018Filesystem abstractions and msg queue   sergeev - symfony camp 2018
Filesystem abstractions and msg queue sergeev - symfony camp 2018
 
Contract testing symfony camp 2018
  Contract testing symfony camp 2018  Contract testing symfony camp 2018
Contract testing symfony camp 2018
 
Database types-1 (1)
Database types-1 (1)Database types-1 (1)
Database types-1 (1)
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
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
vu2urc
 

Kürzlich hochgeladen (20)

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
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
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
 
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...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
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...
 
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
 
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
 

20181023 progressive web_apps_are_here_sfcampua