SlideShare a Scribd company logo
1 of 143
Download to read offline
at
Productivity and Performance at Scale
You are a developer using Java to
build web services.
This is your life:
Waiting. [1]
tail -f logs/catalina.out
XML soup
"Convenient proxy factory bean superclass for proxy
factory beans that create only singletons." [2]
Thread pool usage
Latency
Thread pool hell
There is a better way.
Ruby on Rails!
Nah, just kidding. We have real work to do.
A modern web framework for Java and Scala
The worldโ€™s largest professional network
at
We've been using Play in production for
more than 6 months [3]
A few apps built on Play
Channels (frontend)
Premium Subscriptions (frontend)
Polls (frontend + backend)
REST search (internal tool)
About me
Leading the Play project as part of LinkedIn's Service Infrastructure Team.
Also: hackdays, engineering blog, incubator, open source.
This talk is the story of building web services
at massive scale with Java and Scala...
... while maintaining performance,
reliability, and developer
productivity.
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
Download and install Play from
http://www.playframework.com
> play new my-app
> play idea
> play eclipse
> play run
http://localhost:9000
Application layout
app โ†’ Application sources
โ”” assets โ†’ Compiled asset sources
โ”” controllers โ†’ Application controllers
โ”” models โ†’ Application business layer
โ”” views โ†’ Templates
conf โ†’ Configurations files
โ”” application.conf โ†’ Main configuration file
โ”” routes โ†’ Routes definition
public โ†’ Public assets
โ”” stylesheets โ†’ CSS files
โ”” javascripts โ†’ Javascript files
โ”” images โ†’ Image files
project โ†’ sbt configuration files
โ”” Build.scala โ†’ Application build script
โ”” plugins.sbt โ†’ sbt plugins
lib โ†’ Unmanaged libraries
dependencies
logs โ†’ Standard logs folder
target โ†’ Generated stuff
test โ†’ Unit or functional tests
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
public class HelloWorld extends Controller {
public static Result index() {
return ok("Hello World");
}
}
Create a new controller and action
app/controllers/HelloWorld.java
Don't worry about the use of static. Yes,
Play supports IOC. Using static (and other
shortcuts) lets me keep the examples simple.
GET /hello controllers.HelloWorld.index()
Expose the controller/action at a URL
conf/routes
Now, restart the server.
Nah, just kidding. Refresh the page.
Woohoo, hot reload!
http://localhost:9000/hello
public class HelloWorld extends Controller {
public static Result index(String name) {
return ok("Hello " + name);
}
}
Add a parameter
app/controllers/HelloWorld.java
GET /hello controllers.HelloWorld.index( name)
Read the parameter from the query string
conf/routes
http://localhost:9000/hello?name=Jim
GET /hello/:name controllers.HelloWorld.index(name)
Read the parameter from the URL instead
conf/routes
http://localhost:9000/hello/Jim
public class HelloWorld extends Controller {
public static Result index(String name, int age) {
return ok("Hello " + name + " you are " + age +
" years old");
}
}
Add another parameter, this time an int
app/controllers/HelloWorld.java
GET /hello/:name/ :age controllers.HelloWorld.index(name: String, age: Int)
Add the parameter. Note the type checking!
conf/routes
http://localhost:9000/hello/Jim/28
@(name: String, age: Int)
<html>
<head></head>
<body>
<img src="/assets/images/play-logo.png"/>
<p>
Hello <b>@name</b>, you are <b>@age</b> years old
</p>
</body>
</html>
Add a view
app/views/hello.scala.html
public class HelloWorld extends Controller {
public static Result index(String name, int age) {
return ok(views.html.hello.render(name, age));
}
}
Render the view from the controller
app/controllers/HelloWorld.java
http://localhost:9000/hello/Jim/28
location = "JaxConf"
How about some config?
app/conf/application.conf
public class HelloWorld extends Controller {
public static Result index(String name, int age) {
String location = getConfig().getString("location");
return ok(views.html.hello.render(name, age,
location));
}
private static Configuration getConfig() {
return Play.application().configuration();
}
}
Read the config and pass it to the view
app/controllers/HelloWorld.java
@(name: String, age: Int, location: String)
<html>
<head></head>
<body>
<img src="/assets/images/play-logo.png"/>
<p>
Hello <b>@name</b>, you are <b>@age</b> years old
and you are at <b>@location</b>
</p>
</body>
</html>
Update the view
app/views/hello.scala.html
Refresh the page. Config hot reloads too!
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
In dev mode, Play shows error messages
right in the browser.
Parameter type checking
A helpful 404 page
Compile errors show problematic source code
in the browser
Views are compiled as well
The routes file too
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
Most people are used to threaded servers
Threaded servers assign one thread per
request and use blocking I/O
void doGet(HttpServletRequest req, HttpServletResponse res) {
// Apache HttpClient
HttpClient client = new HttpClient();
GetMethod method = new GetMethod("www.example.com/");
// executeMethod is a blocking, synchronous call
int statusCode = client.executeMethod(method);
System.out.println("Response " + statusCode);
}
MyServlet.java
Evented servers are gaining popularity
Evented servers have one thread/process per
CPU core and use non-blocking I/O
MyNodeApp.js
var callback = function(data) {
console.log("Response: " + data);
};
var options = {
hostname: 'www.google.com',
path: '/upload'
};
// Non-blocking HTTP call
http.request(options, callback);
console.log('This line may execute before the callback!');
Why threaded vs. evented matters for
LinkedIn
LinkedIn uses a Service Oriented Architecture
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
void doGet(HttpServletRequest req, HttpServletResponse res) {
// Call a number of backend services to get data
Profile profile = profileSvc.getProfile();
Company company = companySvc.getCompany();
Skills skills = skillsSvc.getSkills();
}
MyServlet.java
Our services spend most of their time waiting
for data from other services and data stores
I/O is very expensive [4]
In a threaded server, threads spend most of
the time idle, waiting on I/O
Threading dilemma
1. Creating new threads on the fly is expensive:
a. Use a thread pool
2. Too many threads in the thread pool:
a. Memory overhead
b. Context switching overhead
3. Too few threads in the thread pool:
a. Run out of threads, latency goes up
b. Sensitive to downstream latency!
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
Let's say latency goes
up a little here
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
Causes threads to get
backed up here
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
Latency goes up
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
Now threads get
backed up here
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
And here
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
Here too
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
And there
Internet Load
Balancer
Frontend
Server
Frontend
Server
Frontend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Backend
Server
Data
Store
Data
Store
Data
Store
Data
Store
And... the site is down.
This is thread pool hell [5]
Play is built on top of Netty, so it supports non-
blocking I/O [6]
NIO benefits
1. No sensitivity to downstream slowness
2. Easy to parallelize I/O
3. Supports many concurrent and long-running
connections, enabling:
a. WebSockets
b. Comet
c. Server-Sent Events
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
public class Proxy extends Controller {
public static Result index(String url) {
// Non blocking HTTP call
Promise<Response> responsePromise = WS.url(url).get();
// How do we turn a Promise into a Play Result?
}
}
app/controllers/Proxy.java
Use Play's built in WS library to make a non-
blocking HTTP call
A Promise<T> will eventually contain the
value T (or an error)
(Play Framework source code)
Play has a built-in subclass of Result called
AsyncResult that takes a Promise<Result>
public static class AsyncResult implements Result {
private final Promise<Result> promise;
public AsyncResult(Promise<Result> promise) {
this.promise = promise;
}
}
public class Proxy extends Controller {
public static Result index(String url) {
// Non blocking HTTP call
Promise<Response> response = WS.url(url).get();
// Transform asynchronously into a Play Result
Promise<Result> result = response.map(toResult);
return async(result);
}
// A function that can transform a Response into a Result
private static Function<Response, Result> toResult =
new Function<Response, Result>() {
public Result apply(Response response) {
return ok(response.getBody()).as("text/html");
}
};
}
app/controllers/Proxy.java
We can use the map method to turn a
Promise<Response> into a Promise<Result>
GET /proxy controllers.Proxy.index(url)
Let's add this endpoint to the routes file
conf/routes
http://localhost:9000/proxy?url=http://example.com
We just built a completely
non-blocking proxy!
public class Proxy extends Controller {
public static Result index(String url) {
Logger.info("Before the HTTP call");
Promise<Response> response = WS.url(url).get();
Promise<Result> result = response.map(toResult);
Logger.info("After the HTTP call");
return async(result);
}
private static Function<Response, Result> toResult =
new Function<Response, Result>() {
public Result apply(Response response) {
Logger.info("Inside the toResult function");
return ok(response.getBody()).as("text/html");
}
};
}
app/controllers/Proxy.java
To see that it's non-blocking, let's add logging
Refresh the page and the logs show the
HTTP call really is non-blocking
NIO makes parallel requests easy.
Let's try it.
class Timing {
public String url;
public long latency;
public Timing(String url, long latency) {
this.url = url;
this.latency = latency;
}
// Fire an HTTP request and record how long it took
public static Promise<Timing> timedRequest(final String url) {
final long start = System.currentTimeMillis();
Promise<Response> res = WS.url(url).get();
return res.map(new Function<Response, Timing>() {
public Timing apply(Response response) {
long latency = System.currentTimeMillis() - start;
return new Timing(url, latency);
}
});
}
}
app/models/Timing.java
First, define a class that times an HTTP request
public class Parallel extends Controller {
public static Result index() {
// A Promise that will redeem when the 3 parallel
// HTTP requests are done
Promise<List<Timing>> all = Promise.waitAll(
Timing.timedRequest("http://www.yahoo.com"),
Timing.timedRequest("http://www.google.com"),
Timing.timedRequest("http://www.bing.com")
);
// Asynchronously transform timings into a JSON response
return async(all.map(new Function<List<Timing>, Result>() {
public Result apply(List<Timing> timings) {
return ok(Json.toJson(timings));
}
}));
}
}
app/controllers/Parallel.java
Next, add a controller that fetches 3 URLs in
parallel and returns the timings as JSON
GET /parallel controllers.Parallel.index()
Add it to the routes file
conf/routes
http://localhost:9000/parallel
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
Play has native support for Scala
app/controllers/HelloWorldScala.scala
Just add a .scala file under /app and
Play will compile it
object HelloWorldScala extends Controller {
def index = Action {
Ok("Hello World Scala")
}
}
GET /scala controllers.HelloWorldScala.index()
Add it to the routes file as usual
conf/routes
http://localhost:9000/scala
Play/Scala: the good parts
Sequential async calls
// 2 sequential async calls
for {
foo <- WS.url(url1).get()
bar <- WS.url(buildUrl(foo)).get()
} yield {
Ok(...)
}
API is more concise, expressive, &
composable, especially for async code.
Sequential async calls
// 2 parallel async calls
val fooFuture = WS.url(url1).get()
val barFuture = WS.url(url2).get()
for {
foo <- fooFuture
bar <- barFuture
} yield {
Ok(...)
}
Interactive console with full classpath of your app
Play is Scala at its core: main libraries,
routes, templates, SBT, etc [7]
Play/Scala: the less good parts
Simple Build Tool: Play's build system. Very
powerful, but very steep learning curve.
project/Build.scala
val settings = Seq(
bootPath <<= target( _ / "boot" ),
buildDir <<= baseDirectory(_ / ".." / "build"),
srcDir <<= baseDirectory(_/ ".." / "src"),
enableConfigCompile := true,
fabrics <++= Seq("EI", "EI2")
)
Abandon all hope, ye who enter here
without knowing Scala.
project/Build.scala
fabrics <++= Seq("EI", "EI2")
WTF is <++=? Some kind of fish bones?
How do I google that?
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
Is Play web scale? [8]
Scalability can be measured along
many dimensions
Raw
horsepower
Concurrent
horsepower
Single
developer
Multiple
developers
Raw horsepower: theoretical maximum
performance for the server in ideal
conditions. A measure of language and
framework overhead.
Concurrent horsepower: performance with
many users, I/O, and more real-world
scenarios. A measure of the framework's
approach to concurrency.
Single developer: how easy it is to get
started, how quickly a single developer can
build things. A measure of the framework's
raw productivity and tooling.
Multiple developers: how the framework
tolerates many developers working
concurrently over many years. A measure of
code rot and maintainability.
Here is how I'd rate some of the
frameworks I've used. YMMV.
โ— Pros
โ—‹ Good raw throughput (qps, latency)
โ—‹ Type safety reduces code rot
โ— Cons
โ—‹ Not developer friendly. Getting things done takes
forever.
โ—‹ Threaded, synchronous approach difficult to scale
for lots of I/O in a SOA environment.
MVC
Raw
horsepower
Concurrent
horsepower
Single
developer
Multiple
developers
SpringMVC
โ— Pros
โ—‹ Set the bar for developer productivity; all other
frameworks are still trying to catch up.
โ— Cons
โ—‹ Ruby is slow
โ—‹ Ruby doesn't have real multithreading nor a great
evented framework
โ—‹ Dynamic language makes it tougher to maintain a
large codebase
Raw
horsepower
Concurrent
horsepower
Single
developer
Multiple
developers
Rails
โ— Pros
โ—‹ v8 engine is pretty fast for raw throughput
โ—‹ Non-blocking I/O at the core makes concurrency
easy
โ—‹ Strong open source community and lightning fast
startup time makes it easy to get things done quickly
โ— Cons
โ—‹ Dynamic language makes it tougher to maintain a
large codebase
โ—‹ Lots of immature libraries that constantly make
backwards incompatible changes
Raw
horsepower
Concurrent
horsepower
Single
developer
Multiple
developers
Node.js
โ— Pros
โ—‹ Fast for raw throughput
โ—‹ Non-blocking I/O at the core makes concurrency
easy
โ—‹ Hot reload makes it possible to get things done
quickly
โ—‹ Strong type safety throughout reduces code rot
โ— Cons
โ—‹ Even with hot reload, a compiled statically typed
language isn't quite as fast as an interpreted
dynamically typed language
Raw
horsepower
Concurrent
horsepower
Single
developer
Multiple
developers
Play
Outline
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
Play is open source [7]
LinkedIn is contributing
Very active google group (mailing list) [9]
StackOverflow tag [10]
Open source modules and plugins [11]
We've open sourced a few of our plugins,
with many more on the way [12]
Commercial support from Typesafe [13]
Recap
1. Getting started with Play
2. Make a change and reload
3. Error handling
4. Threaded vs. evented
5. Non-blocking I/O
6. Scala
7. Performance
8. Community
That's the story of Play at LinkedIn so far...
But we're just getting started.
LinkedIn Engineering Blog [14]
@LinkedInEng on twitter [15]
Thank you!
References
1. http://zeroturnaround.com/java-ee-productivity-report-2011/
2. http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/...
3. http://engineering.linkedin.com/play/play-framework-linkedin
4. http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
5. http://engineering.linkedin.com/play/play-framework-async-io-without...
6. http://netty.io/
7. https://github.com/playframework/Play20
8. http://mongodb-is-web-scale.com/
9. https://groups.google.com/forum/?fromgroups#!forum/play-framework
10. http://stackoverflow.com/tags/playframework
11. http://www.playframework.com/documentation/2.1.1/Modules
12. https://github.com/linkedin
13. http://typesafe.com/platform/runtime/playframework
14. http://engineering.linkedin.com/
15. https://twitter.com/LinkedInEng

More Related Content

What's hot

Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVMSHASHI KUMAR
ย 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HAharoonm
ย 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessDerek Collison
ย 
HTTP Analytics for 6M requests per second using ClickHouse, by Alexander Boc...
HTTP Analytics for 6M requests per second using ClickHouse, by  Alexander Boc...HTTP Analytics for 6M requests per second using ClickHouse, by  Alexander Boc...
HTTP Analytics for 6M requests per second using ClickHouse, by Alexander Boc...Altinity Ltd
ย 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6Rob Eisenberg
ย 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorFlink Forward
ย 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservicespflueras
ย 
Apache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals ExplainedApache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals Explainedconfluent
ย 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK toolsHaribabu Nandyal Padmanaban
ย 
GraalVM Overview Compact version
GraalVM Overview Compact versionGraalVM Overview Compact version
GraalVM Overview Compact versionscalaconfjp
ย 
Graal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them AllGraal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them AllThomas Wuerthinger
ย 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsSpark Summit
ย 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHPFrom Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHPAlbert Chen
ย 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVMSylvain Wallez
ย 
Apache Kafka
Apache KafkaApache Kafka
Apache KafkaDiego Pacheco
ย 
Common issues with Apache Kafkaยฎ Producer
Common issues with Apache Kafkaยฎ ProducerCommon issues with Apache Kafkaยฎ Producer
Common issues with Apache Kafkaยฎ Producerconfluent
ย 
Cloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹ค
Cloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹คCloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹ค
Cloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹คTaewan Kim
ย 
OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...
OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...
OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...NETWAYS
ย 

What's hot (20)

Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
ย 
Quarkus k8s
Quarkus   k8sQuarkus   k8s
Quarkus k8s
ย 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HA
ย 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
ย 
HTTP Analytics for 6M requests per second using ClickHouse, by Alexander Boc...
HTTP Analytics for 6M requests per second using ClickHouse, by  Alexander Boc...HTTP Analytics for 6M requests per second using ClickHouse, by  Alexander Boc...
HTTP Analytics for 6M requests per second using ClickHouse, by Alexander Boc...
ย 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6
ย 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes Operator
ย 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservices
ย 
Apache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals ExplainedApache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals Explained
ย 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
ย 
Log Structured Merge Tree
Log Structured Merge TreeLog Structured Merge Tree
Log Structured Merge Tree
ย 
GraalVM Overview Compact version
GraalVM Overview Compact versionGraalVM Overview Compact version
GraalVM Overview Compact version
ย 
Graal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them AllGraal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them All
ย 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark Applications
ย 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHPFrom Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHP
ย 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
ย 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
ย 
Common issues with Apache Kafkaยฎ Producer
Common issues with Apache Kafkaยฎ ProducerCommon issues with Apache Kafkaยฎ Producer
Common issues with Apache Kafkaยฎ Producer
ย 
Cloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹ค
Cloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹คCloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹ค
Cloud Native Java GraalVM ์ด์ƒ๊ณผ ํ˜„์‹ค
ย 
OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...
OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...
OSMC 2022 | VictoriaMetrics: scaling to 100 million metrics per second by Ali...
ย 

Similar to The Play Framework at LinkedIn

Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
ย 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The BasicsPhilip Langer
ย 
Play framework
Play frameworkPlay framework
Play frameworksambaochung
ย 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backendDavid Padbury
ย 
Play framework productivity formula
Play framework   productivity formula Play framework   productivity formula
Play framework productivity formula Sorin Chiprian
ย 
01 overview-and-setup
01 overview-and-setup01 overview-and-setup
01 overview-and-setupsnopteck
ย 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewJosh Padnick
ย 
Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5Web Directions
ย 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
ย 
Drupal Performance : DrupalCamp North
Drupal Performance : DrupalCamp NorthDrupal Performance : DrupalCamp North
Drupal Performance : DrupalCamp NorthPhilip Norton
ย 
Silicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you RESTSilicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you RESTManish Pandit
ย 
Play Support in Cloud Foundry
Play Support in Cloud FoundryPlay Support in Cloud Foundry
Play Support in Cloud Foundryrajdeep
ย 
cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123Parag Gajbhiye
ย 
Best Of Jdk 7
Best Of Jdk 7Best Of Jdk 7
Best Of Jdk 7Kaniska Mandal
ย 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introductionvstorm83
ย 
Follow these reasons to know javaโ€™s importance
Follow these reasons to know javaโ€™s importanceFollow these reasons to know javaโ€™s importance
Follow these reasons to know javaโ€™s importancenishajj
ย 
NodeJS
NodeJSNodeJS
NodeJSLinkMe Srl
ย 
An Overview of Node.js
An Overview of Node.jsAn Overview of Node.js
An Overview of Node.jsAyush Mishra
ย 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.jsSu Zin Kyaw
ย 
Programming Server side with Sevlet
 Programming Server side with Sevlet  Programming Server side with Sevlet
Programming Server side with Sevlet backdoor
ย 

Similar to The Play Framework at LinkedIn (20)

Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
ย 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The Basics
ย 
Play framework
Play frameworkPlay framework
Play framework
ย 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
ย 
Play framework productivity formula
Play framework   productivity formula Play framework   productivity formula
Play framework productivity formula
ย 
01 overview-and-setup
01 overview-and-setup01 overview-and-setup
01 overview-and-setup
ย 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level Overview
ย 
Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5
ย 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
ย 
Drupal Performance : DrupalCamp North
Drupal Performance : DrupalCamp NorthDrupal Performance : DrupalCamp North
Drupal Performance : DrupalCamp North
ย 
Silicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you RESTSilicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you REST
ย 
Play Support in Cloud Foundry
Play Support in Cloud FoundryPlay Support in Cloud Foundry
Play Support in Cloud Foundry
ย 
cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123
ย 
Best Of Jdk 7
Best Of Jdk 7Best Of Jdk 7
Best Of Jdk 7
ย 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introduction
ย 
Follow these reasons to know javaโ€™s importance
Follow these reasons to know javaโ€™s importanceFollow these reasons to know javaโ€™s importance
Follow these reasons to know javaโ€™s importance
ย 
NodeJS
NodeJSNodeJS
NodeJS
ย 
An Overview of Node.js
An Overview of Node.jsAn Overview of Node.js
An Overview of Node.js
ย 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
ย 
Programming Server side with Sevlet
 Programming Server side with Sevlet  Programming Server side with Sevlet
Programming Server side with Sevlet
ย 

More from Yevgeniy Brikman

Cloud adoption fails - 5 ways deployments go wrong and 5 solutions
Cloud adoption fails - 5 ways deployments go wrong and 5 solutionsCloud adoption fails - 5 ways deployments go wrong and 5 solutions
Cloud adoption fails - 5 ways deployments go wrong and 5 solutionsYevgeniy Brikman
ย 
How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...Yevgeniy Brikman
ย 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeYevgeniy Brikman
ย 
Gruntwork Executive Summary
Gruntwork Executive SummaryGruntwork Executive Summary
Gruntwork Executive SummaryYevgeniy Brikman
ย 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesYevgeniy Brikman
ย 
The Truth About Startups: What I wish someone had told me about entrepreneurs...
The Truth About Startups: What I wish someone had told me about entrepreneurs...The Truth About Startups: What I wish someone had told me about entrepreneurs...
The Truth About Startups: What I wish someone had told me about entrepreneurs...Yevgeniy Brikman
ย 
An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSAn intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSYevgeniy Brikman
ย 
Comprehensive Terraform Training
Comprehensive Terraform TrainingComprehensive Terraform Training
Comprehensive Terraform TrainingYevgeniy Brikman
ย 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Yevgeniy Brikman
ย 
Agility Requires Safety
Agility Requires SafetyAgility Requires Safety
Agility Requires SafetyYevgeniy Brikman
ย 
Startup Ideas and Validation
Startup Ideas and ValidationStartup Ideas and Validation
Startup Ideas and ValidationYevgeniy Brikman
ย 
A Guide to Hiring for your Startup
A Guide to Hiring for your StartupA Guide to Hiring for your Startup
A Guide to Hiring for your StartupYevgeniy Brikman
ย 
Startup DNA: Speed Wins
Startup DNA: Speed WinsStartup DNA: Speed Wins
Startup DNA: Speed WinsYevgeniy Brikman
ย 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Yevgeniy Brikman
ย 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play FrameworkYevgeniy Brikman
ย 
Rapid prototyping
Rapid prototypingRapid prototyping
Rapid prototypingYevgeniy Brikman
ย 
Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play appsYevgeniy Brikman
ย 
Kings of Code Hack Battle
Kings of Code Hack BattleKings of Code Hack Battle
Kings of Code Hack BattleYevgeniy Brikman
ย 
Hackdays and [in]cubator
Hackdays and [in]cubatorHackdays and [in]cubator
Hackdays and [in]cubatorYevgeniy Brikman
ย 
Startup DNA: the formula behind successful startups in Silicon Valley (update...
Startup DNA: the formula behind successful startups in Silicon Valley (update...Startup DNA: the formula behind successful startups in Silicon Valley (update...
Startup DNA: the formula behind successful startups in Silicon Valley (update...Yevgeniy Brikman
ย 

More from Yevgeniy Brikman (20)

Cloud adoption fails - 5 ways deployments go wrong and 5 solutions
Cloud adoption fails - 5 ways deployments go wrong and 5 solutionsCloud adoption fails - 5 ways deployments go wrong and 5 solutions
Cloud adoption fails - 5 ways deployments go wrong and 5 solutions
ย 
How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...
ย 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure code
ย 
Gruntwork Executive Summary
Gruntwork Executive SummaryGruntwork Executive Summary
Gruntwork Executive Summary
ย 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modules
ย 
The Truth About Startups: What I wish someone had told me about entrepreneurs...
The Truth About Startups: What I wish someone had told me about entrepreneurs...The Truth About Startups: What I wish someone had told me about entrepreneurs...
The Truth About Startups: What I wish someone had told me about entrepreneurs...
ย 
An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSAn intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECS
ย 
Comprehensive Terraform Training
Comprehensive Terraform TrainingComprehensive Terraform Training
Comprehensive Terraform Training
ย 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
ย 
Agility Requires Safety
Agility Requires SafetyAgility Requires Safety
Agility Requires Safety
ย 
Startup Ideas and Validation
Startup Ideas and ValidationStartup Ideas and Validation
Startup Ideas and Validation
ย 
A Guide to Hiring for your Startup
A Guide to Hiring for your StartupA Guide to Hiring for your Startup
A Guide to Hiring for your Startup
ย 
Startup DNA: Speed Wins
Startup DNA: Speed WinsStartup DNA: Speed Wins
Startup DNA: Speed Wins
ย 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)
ย 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
ย 
Rapid prototyping
Rapid prototypingRapid prototyping
Rapid prototyping
ย 
Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play apps
ย 
Kings of Code Hack Battle
Kings of Code Hack BattleKings of Code Hack Battle
Kings of Code Hack Battle
ย 
Hackdays and [in]cubator
Hackdays and [in]cubatorHackdays and [in]cubator
Hackdays and [in]cubator
ย 
Startup DNA: the formula behind successful startups in Silicon Valley (update...
Startup DNA: the formula behind successful startups in Silicon Valley (update...Startup DNA: the formula behind successful startups in Silicon Valley (update...
Startup DNA: the formula behind successful startups in Silicon Valley (update...
ย 

Recently uploaded

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
ย 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
ย 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
ย 
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 SolutionsEnterprise Knowledge
ย 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
ย 
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
ย 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
ย 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
ย 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
ย 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
ย 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
ย 
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
ย 
#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024BookNet Canada
ย 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
ย 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
ย 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...gurkirankumar98700
ย 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
ย 
Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024BookNet Canada
ย 
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
ย 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
ย 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
ย 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
ย 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
ย 
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
ย 
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
ย 
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
ย 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
ย 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
ย 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
ย 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
ย 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
ย 
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
ย 
#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
ย 
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
ย 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
ย 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service ๐Ÿธ 8923113531 ๐ŸŽฐ Avail...
ย 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
ย 
Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatโ€™s new for BISAC - Tech Forum 2024
ย 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
ย 
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
ย 

The Play Framework at LinkedIn