SlideShare ist ein Scribd-Unternehmen logo
1 von 89
Downloaden Sie, um offline zu lesen
projects
Beyond the
LAMP stack
By Thijs Feryn
PHP
Hi, I’m Thijs
I’m
@ThijsFeryn
on Twitter
I’m an
Evangelist
At
I’m a
at
board member
LAMP
Stack?
CPU memory I/O
PHP consumes lots of
FasterPHP
Differentapproach
Offloading
•Webserver
•Database
•User process
Caching
Optimizedatabase
Optimizeruntime
Avoid
Avoid
Don’t
recompute
data that
hasn’t
changed
Offloadthewebserver
Varnish
Reverse proxy
User Varnish Server
Proxy	
in	the	data	
center
✓ Varnish Configuration Language
✓ Edge Side Include support
✓ Gzip compression/decompression
✓ Cache purging
✓ HTTP streaming
✓ Grace mode
✓ Configure backends
✓ Backend loadbalancing
✓ ACL protection
✓ VMODs in C
Varnish
Extend the
default behavior
in VCL
✓Strip tracking cookies (Google
Analytics, …)
✓Sanitize URL
✓URL whitelist/blacklist
✓PURGE ACLs
✓Edge Side Include rules
✓Alway cache static files
✓Extend hash keys
✓Override TTL
✓Define grace mode
What to extend?
vcl 4.0;
import std;
acl purge {
"127.0.0.1"
}
backend default {
.host = "176.62.160.59";
.port = "80";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
sub vcl_recv {
if (req.http.Authorization) {
return (pass);
}
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
}
else if (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
}
else {
unset req.http.Accept-Encoding;
}
}
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
Minimal VCL
Let the
application
handle it
Cachinginyourarchitecture
RespectHTTP
Cache-control: public, max-
age=3600, s-maxage=7200
Cache-control: no-cache, no-
store
VS
Cookies?
State
Non-
cacheable
content
Edge Side
Includes
<!DOCTYPE html>
<html>
<head>
<title>The Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/bootstrap-theme.min.css">
<script src=“/js/jquery-2.1.4.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<esi:include src=“http://mysite.dev/nav" />
</nav>
<div class="jumbotron">
<esi:include src="http://mysite.dev/jumbotron" />
</div>
<div class="container">
{% block content %}{% endblock %}
<hr>
<footer>
<esi:include src="http://mysite.dev/footer" />
</footer>
</div>
</body>
</html>
ESI tags
Or just
use AJAX
Async
Graceful
degradition
✓Cache pages and static assets
✓Fastest way
✓Hit rate may vary
✓Chop your content up in pieces
✓Use ESI or AJAX
✓Gateway to your application
Where does Varnish fit in?
You can also
host your
static files on
a separate set
of Nginx
servers
ContentDeliveryNetwork
CDNs are
nothing but a
bunch of
reverse
caching
proxies
Put the content
where your
user is
Offloadthedatabase
Data is stored for
flexibility, not for
performance
SQL (joins) allow
different
compositions of the
same data
Makethedataretrievalfaster
✓ Key-value store
✓ Fast
✓ Lightweight
✓ Data stored in RAM
✓ ~Memcached
✓ Data types
✓ Data persistance
✓ Replication
✓ Clustering
Redis
Redis
$ redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set mykey somevalue
OK
127.0.0.1:6379> get mykey
"somevalue
✓ Strings
✓ Hashes
✓ Lists
✓ Sets
✓ Sorted sets
✓ Geo
✓ …
Redis data types
Redis
$ redis-cli
127.0.0.1:6379> hset customer_1234 id 1234
(integer) 1
127.0.0.1:6379> hset customer_1234 items_in_cart 2
(integer) 1
127.0.0.1:6379> hmset customer_1234 firstname Thijs lastname
Feryn
OK
127.0.0.1:6379> hgetall customer_1234
1) "id"
2) "1234"
3) "items_in_cart"
4) "2"
5) "firstname"
6) "Thijs"
7) "lastname"
8) "Feryn"
127.0.0.1:6379>
$ redis-cli
127.0.0.1:6379> lpush products_for_customer_1234 5
(integer) 1
127.0.0.1:6379> lpush products_for_customer_1234 345
(integer) 2
127.0.0.1:6379> lpush products_for_customer_1234 78 12 345
(integer) 5
127.0.0.1:6379> llen products_for_customer_1234
(integer) 5
127.0.0.1:6379> lindex products_for_customer_1234 1
"12"
127.0.0.1:6379> lindex products_for_customer_1234 2
"78"
127.0.0.1:6379> rpop products_for_customer_1234
"5"
127.0.0.1:6379> rpop products_for_customer_1234
"345"
127.0.0.1:6379> rpop products_for_customer_1234
"78"
127.0.0.1:6379> rpop products_for_customer_1234
"12"
127.0.0.1:6379> rpop products_for_customer_1234
"345"
127.0.0.1:6379> rpop products_for_customer_1234
(nil)
127.0.0.1:6379>
Redis
Clustering
✓ Database/API cache
✓ PHP session storage
✓ Message queue (lists)
✓ NoSQL database
✓ Real-time data retrieval
Where does Redis fit in?
Basically:
Real-time
&
volatile data
BUT:
MySQL can still
remain “source of
truth” database
✓Full-text search engine
✓Analytics engine
✓NoSQL database
✓Lucene based
✓Built-in clustering, replication,
sharding
✓RESTful interface
✓Schemaless
ElasticSearch
POST /my-index
{"acknowledged":true}
POST/my-index/my-type
{
"key" : "value",
"date" : "2015-05-10",
"counter" : 1,
"tags" : ["tag1","tag2","tag3"]
}
{
"_index": "my-index",
"_type": "my-type",
"_id": "AU089olr9oI99a_rK9fi",
"_version": 1,
"created": true
}
Confirmation
GET/my-index/my-type/AU089olr9oI99a_rK9fi?pretty
{
"_index": "my-index",
"_type": "my-type",
"_id": "AU089olr9oI99a_rK9fi",
"_version": 1,
"found": true,
"_source": {
"key": "value",
"date": "2015-05-10",
"counter": 1,
"tags": [
"tag1",
"tag2",
"tag3"
]
}
}
Retrieve
document by
id
Document &
meta data
Analyzed
vs
non-analyzed
Full-text
vs
exact value
Filter
vs
Query
Search
POST /products/product/_search?pretty
{
"query": {
"match": {
"name.raw": "Linen Blazer"
}
}
}
POST /products/product/_search?pretty
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"name": "Linen Blazer"
}
}
}
}
}
Matches
2 products
Matches 1
product
Aggregations
Group by on steroids
POST /products/product/_search?pretty
{
"fields": ["category","price","name"],
"query": {
"match": {
"name.raw": "blazer"
}
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
},
"min_price" : {
"min": {
"field": "price"
}
},
"max_price" : {
"max": {
"field": "price"
}
},
"number_of_products_per_category" : {
"terms": {
"field": "category",
"size": 10
}
}
}
}
Multi-group
by
&
query
"aggregations": {
"min_price": {
"value": 455
},
"number_of_products_per_category": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Blazers",
"doc_count": 2
},
{
"key": "Default Category",
"doc_count": 2
},
{
"key": "Men",
"doc_count": 2
}
]
},
"max_price": {
"value": 490
},
"avg_price": {
"value": 472.5
}
}
Aggregation
output
Clustering
✓ Full-text search engine
with drill-down search
✓ Human language & text
analysis
✓ NoSQL database
✓ Big data analytics tool
using Kibana
Where does ElasticSearch fit in?
Offloadtheuserprocess
Workerscripts
✓ Uses PHP-CLI
✓ Runs continuously
✓ Process forking
✓ Pthreads
✓ Run worker scripts in
parallel
✓ Managed by supervisord
Worker scripts
✓ Sync MySQL & Redis/
ElasticSearch
✓ Resize images
✓ Async logging & metrics
✓ Other tasks that shouldn’t
block the user process
Worker scripts
Messagequeues
✓ Pub/sub
✓ Speaks AMQP protocol
✓ Supported by Pivotal
✓ Channels/Exchanges/
Queues
✓ Built-in clustering
✓ Reliable messaging
RabbitMQ
✓ Take load away from user
process
✓ Free up resources on
frontend servers
✓ Elaborate messaging
strategies
✓ Async event-based actions
Where do RabbitMQ/workers fit in?
But with most of
these tools we still
go through the
PHP runtime …
SOA
Microservices
AJAX
Websockets
✓ Javascript runtime
✓ Async
✓ Event-driven
✓ Non-blocking I/O
✓ Callbacks
✓ Lightweight
✓ NPM packages
✓ Backend-code in Javascript
NodeJS
const http = require('http');
const hostname = '127.0.0.1';
const port = 1337;
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello Worldn');
}).listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Gateway to
ElasticSearch,
RabbitMQ & Redis
✓ Compiled language for the web
✓ Invented by Google
✓ Strictly typed
✓ Feels like your average
interpreted language
✓ Async features
✓ Built for systems programming
✓ REALLY fast
✓ Not object oriented
Go(lang)
package main
import (
"fmt"
"net/http"
"goji.io"
"goji.io/pat"
"golang.org/x/net/context"
)
func hello(ctx context.Context, w http.ResponseWriter, r *http.Request) {
name := pat.Param(ctx, "name")
fmt.Fprintf(w, "Hello, %s!", name)
}
func main() {
mux := goji.NewMux()
mux.HandleFuncC(pat.Get("/hello/:name"), hello)
http.ListenAndServe("localhost:8000", mux)
}
Really fast workers
Really fast APIs
Could
replace PHP
workers
Could
replace
NodeJS
Theendgame
✓ Cache pages (Varnish)
✓ Assemble content via ESI or AJAX
✓ Static assets on Nginx or CDN
✓ Business logic in lightweight API calls
(NodeJS, Go)
✓ Key-value stores for volatile & real-time
data in Redis
✓ ElasticSearch as a NoSQL database
✓ RabbitMQ for async communication
✓ Worker processes read from message
queue
End game
Use the right tool
for the job
Use the tools you like
PHP projects beyond the LAMP stack

Weitere ähnliche Inhalte

Was ist angesagt?

Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Ontico
 
ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016
Derek Downey
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
OnGameServer
 
Globo.com & Varnish
Globo.com & VarnishGlobo.com & Varnish
Globo.com & Varnish
lokama
 

Was ist angesagt? (20)

Scaling PHP web apps
Scaling PHP web appsScaling PHP web apps
Scaling PHP web apps
 
Running php on nginx
Running php on nginxRunning php on nginx
Running php on nginx
 
PHP conference Berlin 2015: running PHP on Nginx
PHP conference Berlin 2015: running PHP on NginxPHP conference Berlin 2015: running PHP on Nginx
PHP conference Berlin 2015: running PHP on Nginx
 
Scaling php applications with redis
Scaling php applications with redisScaling php applications with redis
Scaling php applications with redis
 
Boost your website by running PHP on Nginx
Boost your website by running PHP on NginxBoost your website by running PHP on Nginx
Boost your website by running PHP on Nginx
 
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Building Scalable, Distributed Job Queues with Redis and Redis::Client
Building Scalable, Distributed Job Queues with Redis and Redis::ClientBuilding Scalable, Distributed Job Queues with Redis and Redis::Client
Building Scalable, Distributed Job Queues with Redis and Redis::Client
 
Running PHP on Nginx
Running PHP on NginxRunning PHP on Nginx
Running PHP on Nginx
 
HighLoad Solutions On MySQL / Xiaobin Lin (Alibaba)
HighLoad Solutions On MySQL / Xiaobin Lin (Alibaba)HighLoad Solutions On MySQL / Xiaobin Lin (Alibaba)
HighLoad Solutions On MySQL / Xiaobin Lin (Alibaba)
 
Memcached
MemcachedMemcached
Memcached
 
Redis ndc2013
Redis ndc2013Redis ndc2013
Redis ndc2013
 
Troubleshooting redis
Troubleshooting redisTroubleshooting redis
Troubleshooting redis
 
ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
NginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniquesNginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniques
 
Happy Browser, Happy User! WordSesh 2019
Happy Browser, Happy User! WordSesh 2019Happy Browser, Happy User! WordSesh 2019
Happy Browser, Happy User! WordSesh 2019
 
Making the case for write-optimized database algorithms / Mark Callaghan (Fac...
Making the case for write-optimized database algorithms / Mark Callaghan (Fac...Making the case for write-optimized database algorithms / Mark Callaghan (Fac...
Making the case for write-optimized database algorithms / Mark Callaghan (Fac...
 
Proxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynoteProxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynote
 
Globo.com & Varnish
Globo.com & VarnishGlobo.com & Varnish
Globo.com & Varnish
 

Andere mochten auch

sell sheet 806 Print Me
sell sheet 806 Print Mesell sheet 806 Print Me
sell sheet 806 Print Me
Jamie Keaton
 
СТРАТЕГИЯ: разработка, понимание, ответственность
СТРАТЕГИЯ: разработка, понимание, ответственностьСТРАТЕГИЯ: разработка, понимание, ответственность
СТРАТЕГИЯ: разработка, понимание, ответственность
Бути Ковец
 
معايير اعداد العروض التقديمية الجماعية
معايير اعداد العروض التقديمية الجماعيةمعايير اعداد العروض التقديمية الجماعية
معايير اعداد العروض التقديمية الجماعية
nemra1
 

Andere mochten auch (17)

Додаток 53. Дидактичне завдання для учнів початкового рівня
Додаток 53. Дидактичне завдання для учнів початкового рівняДодаток 53. Дидактичне завдання для учнів початкового рівня
Додаток 53. Дидактичне завдання для учнів початкового рівня
 
Site General Layout
Site General LayoutSite General Layout
Site General Layout
 
#14,#23 1° c
#14,#23     1° c#14,#23     1° c
#14,#23 1° c
 
Wimpycrawling
WimpycrawlingWimpycrawling
Wimpycrawling
 
Tosol ajil 2
Tosol ajil 2Tosol ajil 2
Tosol ajil 2
 
My UG Degree
My UG DegreeMy UG Degree
My UG Degree
 
Industrial Process for CO2 Sequestration by Aqueous Mineral Carbonisation Usi...
Industrial Process for CO2 Sequestration by Aqueous Mineral Carbonisation Usi...Industrial Process for CO2 Sequestration by Aqueous Mineral Carbonisation Usi...
Industrial Process for CO2 Sequestration by Aqueous Mineral Carbonisation Usi...
 
sell sheet 806 Print Me
sell sheet 806 Print Mesell sheet 806 Print Me
sell sheet 806 Print Me
 
Large scale machine learning challenges for systems biology
Large scale machine learning challenges for systems biologyLarge scale machine learning challenges for systems biology
Large scale machine learning challenges for systems biology
 
Polymer is production ready, how about you?
Polymer is production ready, how about you?Polymer is production ready, how about you?
Polymer is production ready, how about you?
 
СТРАТЕГИЯ: разработка, понимание, ответственность
СТРАТЕГИЯ: разработка, понимание, ответственностьСТРАТЕГИЯ: разработка, понимание, ответственность
СТРАТЕГИЯ: разработка, понимание, ответственность
 
معايير اعداد العروض التقديمية الجماعية
معايير اعداد العروض التقديمية الجماعيةمعايير اعداد العروض التقديمية الجماعية
معايير اعداد العروض التقديمية الجماعية
 
Open source CMS tool for web based job portal and recruitment system
Open source CMS tool for web based job portal and recruitment systemOpen source CMS tool for web based job portal and recruitment system
Open source CMS tool for web based job portal and recruitment system
 
Mg(OH)2 (& high-value by-products) from Serpentines & Olivines for scalable l...
Mg(OH)2 (& high-value by-products) from Serpentines & Olivines for scalable l...Mg(OH)2 (& high-value by-products) from Serpentines & Olivines for scalable l...
Mg(OH)2 (& high-value by-products) from Serpentines & Olivines for scalable l...
 
Research Coordination Network on Carbon Capture, Utilization and Storage Fund...
Research Coordination Network on Carbon Capture, Utilization and Storage Fund...Research Coordination Network on Carbon Capture, Utilization and Storage Fund...
Research Coordination Network on Carbon Capture, Utilization and Storage Fund...
 
Susie Almaneih: Executive Moms Show You 7 Ways They Manage Career and Family
Susie Almaneih: Executive Moms Show You 7 Ways They Manage Career and FamilySusie Almaneih: Executive Moms Show You 7 Ways They Manage Career and Family
Susie Almaneih: Executive Moms Show You 7 Ways They Manage Career and Family
 
introduction to Lamp Stack
introduction to Lamp Stackintroduction to Lamp Stack
introduction to Lamp Stack
 

Ähnlich wie PHP projects beyond the LAMP stack

Using Apache as an Application Server
Using Apache as an Application ServerUsing Apache as an Application Server
Using Apache as an Application Server
Phil Windley
 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
Derek Collison
 

Ähnlich wie PHP projects beyond the LAMP stack (20)

(DAT407) Amazon ElastiCache: Deep Dive
(DAT407) Amazon ElastiCache: Deep Dive(DAT407) Amazon ElastiCache: Deep Dive
(DAT407) Amazon ElastiCache: Deep Dive
 
Next Generation DevOps in Drupal: DrupalCamp London 2014
Next Generation DevOps in Drupal: DrupalCamp London 2014Next Generation DevOps in Drupal: DrupalCamp London 2014
Next Generation DevOps in Drupal: DrupalCamp London 2014
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Play framework productivity formula
Play framework   productivity formula Play framework   productivity formula
Play framework productivity formula
 
Top ten-list
Top ten-listTop ten-list
Top ten-list
 
Woa. Reloaded
Woa. ReloadedWoa. Reloaded
Woa. Reloaded
 
IT Operations for Web Developers
IT Operations for Web DevelopersIT Operations for Web Developers
IT Operations for Web Developers
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Zend Con 2008 Slides
Zend Con 2008 SlidesZend Con 2008 Slides
Zend Con 2008 Slides
 
Using Apache as an Application Server
Using Apache as an Application ServerUsing Apache as an Application Server
Using Apache as an Application Server
 
UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...
UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...
UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...
 
Develop and deploy using Hybrid Cloud Strategies confoo2012
Develop and deploy using Hybrid Cloud Strategies confoo2012Develop and deploy using Hybrid Cloud Strategies confoo2012
Develop and deploy using Hybrid Cloud Strategies confoo2012
 
Content-Security-Policy 2018.0
Content-Security-Policy 2018.0Content-Security-Policy 2018.0
Content-Security-Policy 2018.0
 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
 
AppFabric Velocity
AppFabric VelocityAppFabric Velocity
AppFabric Velocity
 
Rails Security
Rails SecurityRails Security
Rails Security
 
Unleash the Power of Redis with Amazon ElastiCache
Unleash the Power of Redis with Amazon ElastiCache Unleash the Power of Redis with Amazon ElastiCache
Unleash the Power of Redis with Amazon ElastiCache
 
Unleash the Power of Redis with Amazon ElastiCache
Unleash the Power of Redis with Amazon ElastiCacheUnleash the Power of Redis with Amazon ElastiCache
Unleash the Power of Redis with Amazon ElastiCache
 

Mehr von Codemotion

Mehr von Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Kürzlich hochgeladen

Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Monica Sydney
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Monica Sydney
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
ydyuyu
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
ydyuyu
 
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
ayvbos
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
ydyuyu
 
一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理
F
 
一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
F
 

Kürzlich hochgeladen (20)

Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
 
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac RoomVip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
 
Best SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency DallasBest SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency Dallas
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
 
Local Call Girls in Seoni 9332606886 HOT & SEXY Models beautiful and charmin...
Local Call Girls in Seoni  9332606886 HOT & SEXY Models beautiful and charmin...Local Call Girls in Seoni  9332606886 HOT & SEXY Models beautiful and charmin...
Local Call Girls in Seoni 9332606886 HOT & SEXY Models beautiful and charmin...
 
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
 
Mira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
Mira Road Housewife Call Girls 07506202331, Nalasopara Call GirlsMira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
Mira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
 
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime BalliaBallia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
 
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf
 
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
 
一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理
 
一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
 

PHP projects beyond the LAMP stack