SlideShare a Scribd company logo
1 of 78
Download to read offline
BACK FROM THE DEAD:
HTTP BUILDER NG
NoamTenne
$WHOAMI
Hacking around the JVM for the past ~15Years
healthy.io



@NoamTenne
http://blog.10ne.org
LET’S ROLL
http://bit.ly/2kmffDe
A SHOW OF HANDS
http://bit.ly/2nK3I4v
HTTPBUILDER
http://read.bi/2kmcYaZ
Haha! Good one,
HTTPBuilder!
HTTP BUILDER NG
http://bit.ly/2l1hjzN
HTTP BUILDER NG
Source:
github.com/http-builder-ng/http-builder-ng
Docs:
http-builder-ng.github.io/http-builder-ng/
MEETTHE PEOPLE
IMPLEMENTATIONS
Core
INSTALLATION
INSTALLATION
compile 'io.github.http-builder-ng:http-builder-ng-core:0.14.1'
INSTALLATION
compile 'io.github.http-builder-ng:http-builder-ng-core:0.14.1'
compile 'io.github.http-builder-ng:http-builder-ng-apache:0.14.1'
INSTALLATION
compile 'io.github.http-builder-ng:http-builder-ng-core:0.14.1'
compile 'io.github.http-builder-ng:http-builder-ng-apache:0.14.1'
compile 'io.github.http-builder-ng:http-builder-ng-okhttp:0.14.1'
INITIALIZATION - CORE
import groovyx.net.http.HttpBuilder
class Core {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure()
}
}
INITIALIZATION - CORE
import groovyx.net.http.HttpBuilder
class Core {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure()
}
}
Consistent namespace
INITIALIZATION - CORE
import groovyx.net.http.HttpBuilder
class Core {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure()
}
}
Consistent namespace
Consistent
configuration method
INITIALIZATION - APACHE
import groovyx.net.http.ApacheHttpBuilder
import groovyx.net.http.HttpBuilder
class Apache {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new ApacheHttpBuilder(c)
})
}
}
INITIALIZATION - APACHE
import groovyx.net.http.ApacheHttpBuilder
import groovyx.net.http.HttpBuilder
class Apache {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new ApacheHttpBuilder(c)
})
}
} Factory function for
configuration
INITIALIZATION - OKHTTP
import groovyx.net.http.HttpBuilder
import groovyx.net.http.OkHttpBuilder
class Ok {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new OkHttpBuilder(c)
})
}
}
INITIALIZATION - OKHTTP
import groovyx.net.http.HttpBuilder
import groovyx.net.http.OkHttpBuilder
class Ok {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new OkHttpBuilder(c)
})
}
} Same factory.

Different Impl
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.get()
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.get()
Configure can access
request
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.post({
request.uri.path = '/api'
response.success({})
})
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.post({
request.uri.path = '/api'
response.success({})
})
Method may extend
request config
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.post({
request.uri.path = '/api'
response.success({})
})
Method may extend
request config
Method may also hook
to response events
GREAT!
BUT LET’S SEETHE GOOD STUFF
GREAT!
BUT LET’S SEETHE GOOD STUFF
HEADER PARSERS
if (headerName == 'Last-Modified') {
//Construct proper date pattern and parse
} else if (headerName == 'Age') {
//Parse long
} else if (headerName == 'Content-Disposition') {
//Parse and assemble map
}
HEADER PARSERS
Easily parse commonly used headers such as:
HEADER PARSERS
Easily parse commonly used headers such as:
Allow -> CsvList
HEADER PARSERS
Easily parse commonly used headers such as:
Last-Modified -> HttpDate
Allow -> CsvList
HEADER PARSERS
Easily parse commonly used headers such as:
Last-Modified -> HttpDate
Allow -> CsvList
Cache-Control -> MapPairs
HEADER PARSERS
Easily parse commonly used headers such as:
Last-Modified -> HttpDate
Allow -> CsvList
Cache-Control -> MapPairs
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
Declare return type
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
Declare return type
Find the relevant
header
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
Declare return type
Find the relevant
headerJust
call .parse()
CONTENT PARSERS
CONTENT PARSERS
Auto parse response content according to type:
CONTENT PARSERS
Auto parse response content according to type:
HTML
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON XML
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON
CSV
XML
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON
CSV
XML
Text
CONTENT PARSERS
Register custom parsers per content type!
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
call .parser()
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
call .parser()
Specify content
type
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
call .parser()
Specify content
type
Provide closure to
handle content
REQUEST INTERCEPTORS
Perform an operation on every response received
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Call interceptor
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Call interceptor
Specify method
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Call interceptor
Specify method Access config and
actual function
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
} Do the business
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
} Do the business
3. PROFIT
REQUEST INTERCEPTORS -
ANYTYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
REQUEST INTERCEPTORS -
ANYTYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Apply to multiple
methods
REQUEST INTERCEPTORS -
MODIFY RESPONSE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
def result = fx.apply(cfg)
"magic:marker:${result}"
}
}
REQUEST INTERCEPTORS -
MODIFY RESPONSE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
def result = fx.apply(cfg)
"magic:marker:${result}"
}
}
Modify the value!
REQUEST ENCODERS
Perform an operation on every request sent
REQUEST ENCODERS
{
"body": {},
"metadata": {
"clientId": "abcdef123456789"
}
}
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
call .encoder()
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
call .encoder() Specify content type
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
Modified content
back to the server
handle
BONUS: CAN BE USED BY JAVA
Use Java 8 lambdas or function objects
BONUS: DIY
BONUS: DIY
extends groovyx.net.http.HttpBuilder
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
Retrieve client
configuration
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
public abstract Executor getExecutor()
Retrieve client
configuration
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
public abstract Executor getExecutor()
Provides a threading
interface
Retrieve client
configuration
BONUS: DIY
protected abstract Object doGet(final ChainedHttpConfig config)
protected abstract Object doHead(final ChainedHttpConfig config)
protected abstract Object doPost(final ChainedHttpConfig config)
protected abstract Object doPut(final ChainedHttpConfig config)
protected abstract Object doDelete(final ChainedHttpConfig config)
BONUS:TESTABLE
EXAMPLES
HTTPBuilder NG: Back From The Dead
HTTPBuilder NG: Back From The Dead

More Related Content

What's hot

Using Mendeley & IEEE Resources: Learn how to cite your research article from...
Using Mendeley & IEEE Resources: Learn how to cite your research article from...Using Mendeley & IEEE Resources: Learn how to cite your research article from...
Using Mendeley & IEEE Resources: Learn how to cite your research article from...Nurhazman Abdul Aziz
 
Setting Up a TIG Stack for Your Testing
Setting Up a TIG Stack for Your TestingSetting Up a TIG Stack for Your Testing
Setting Up a TIG Stack for Your TestingJet Liu
 
Unit testing of spark applications
Unit testing of spark applicationsUnit testing of spark applications
Unit testing of spark applicationsKnoldus Inc.
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderSadayuki Furuhashi
 
Processing IoT Data from End to End with MQTT and Apache Kafka
Processing IoT Data from End to End with MQTT and Apache Kafka Processing IoT Data from End to End with MQTT and Apache Kafka
Processing IoT Data from End to End with MQTT and Apache Kafka confluent
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentIJERD Editor
 
Introduction to Kafka Streams
Introduction to Kafka StreamsIntroduction to Kafka Streams
Introduction to Kafka StreamsGuozhang Wang
 
Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...
Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...
Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...InfluxData
 
Presto: Distributed sql query engine
Presto: Distributed sql query engine Presto: Distributed sql query engine
Presto: Distributed sql query engine kiran palaka
 
Distributed tracing 101
Distributed tracing 101Distributed tracing 101
Distributed tracing 101Itiel Shwartz
 
Speed up UDFs with GPUs using the RAPIDS Accelerator
Speed up UDFs with GPUs using the RAPIDS AcceleratorSpeed up UDFs with GPUs using the RAPIDS Accelerator
Speed up UDFs with GPUs using the RAPIDS AcceleratorDatabricks
 
Aerospike: Key Value Data Access
Aerospike: Key Value Data AccessAerospike: Key Value Data Access
Aerospike: Key Value Data AccessAerospike, Inc.
 
Application Monitoring using Open Source: VictoriaMetrics - ClickHouse
Application Monitoring using Open Source: VictoriaMetrics - ClickHouseApplication Monitoring using Open Source: VictoriaMetrics - ClickHouse
Application Monitoring using Open Source: VictoriaMetrics - ClickHouseVictoriaMetrics
 
Streaming Analytics & CEP - Two sides of the same coin?
Streaming Analytics & CEP - Two sides of the same coin?Streaming Analytics & CEP - Two sides of the same coin?
Streaming Analytics & CEP - Two sides of the same coin?Till Rohrmann
 
Elasticsearch Query DSL - Not just for wizards...
Elasticsearch Query DSL - Not just for wizards...Elasticsearch Query DSL - Not just for wizards...
Elasticsearch Query DSL - Not just for wizards...clintongormley
 
Flink Batch Processing and Iterations
Flink Batch Processing and IterationsFlink Batch Processing and Iterations
Flink Batch Processing and IterationsSameer Wadkar
 
Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)
Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)
Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)Flink Forward
 

What's hot (20)

Using Mendeley & IEEE Resources: Learn how to cite your research article from...
Using Mendeley & IEEE Resources: Learn how to cite your research article from...Using Mendeley & IEEE Resources: Learn how to cite your research article from...
Using Mendeley & IEEE Resources: Learn how to cite your research article from...
 
Apache Flink Deep Dive
Apache Flink Deep DiveApache Flink Deep Dive
Apache Flink Deep Dive
 
Setting Up a TIG Stack for Your Testing
Setting Up a TIG Stack for Your TestingSetting Up a TIG Stack for Your Testing
Setting Up a TIG Stack for Your Testing
 
Unit testing of spark applications
Unit testing of spark applicationsUnit testing of spark applications
Unit testing of spark applications
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
Processing IoT Data from End to End with MQTT and Apache Kafka
Processing IoT Data from End to End with MQTT and Apache Kafka Processing IoT Data from End to End with MQTT and Apache Kafka
Processing IoT Data from End to End with MQTT and Apache Kafka
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and Development
 
Introduction to Kafka Streams
Introduction to Kafka StreamsIntroduction to Kafka Streams
Introduction to Kafka Streams
 
Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...
Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...
Introduction to InfluxDB 2.0 & Your First Flux Query by Sonia Gupta, Develope...
 
Presto: Distributed sql query engine
Presto: Distributed sql query engine Presto: Distributed sql query engine
Presto: Distributed sql query engine
 
Distributed tracing 101
Distributed tracing 101Distributed tracing 101
Distributed tracing 101
 
Speed up UDFs with GPUs using the RAPIDS Accelerator
Speed up UDFs with GPUs using the RAPIDS AcceleratorSpeed up UDFs with GPUs using the RAPIDS Accelerator
Speed up UDFs with GPUs using the RAPIDS Accelerator
 
Aerospike: Key Value Data Access
Aerospike: Key Value Data AccessAerospike: Key Value Data Access
Aerospike: Key Value Data Access
 
Introduction to SignalR
Introduction to SignalRIntroduction to SignalR
Introduction to SignalR
 
Application Monitoring using Open Source: VictoriaMetrics - ClickHouse
Application Monitoring using Open Source: VictoriaMetrics - ClickHouseApplication Monitoring using Open Source: VictoriaMetrics - ClickHouse
Application Monitoring using Open Source: VictoriaMetrics - ClickHouse
 
Streaming Analytics & CEP - Two sides of the same coin?
Streaming Analytics & CEP - Two sides of the same coin?Streaming Analytics & CEP - Two sides of the same coin?
Streaming Analytics & CEP - Two sides of the same coin?
 
Elasticsearch Query DSL - Not just for wizards...
Elasticsearch Query DSL - Not just for wizards...Elasticsearch Query DSL - Not just for wizards...
Elasticsearch Query DSL - Not just for wizards...
 
Apache NiFi in the Hadoop Ecosystem
Apache NiFi in the Hadoop Ecosystem Apache NiFi in the Hadoop Ecosystem
Apache NiFi in the Hadoop Ecosystem
 
Flink Batch Processing and Iterations
Flink Batch Processing and IterationsFlink Batch Processing and Iterations
Flink Batch Processing and Iterations
 
Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)
Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)
Do flink on web with flow - Dongwon Kim & Haemee park, SK Telecom)
 

Viewers also liked

Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers Budco Financial
 
Managed Services Model For IT Services
Managed Services Model For IT Services Managed Services Model For IT Services
Managed Services Model For IT Services Ajay Rathi
 
TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und MockitoTobias Trelle
 
5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico web5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico webMiguel Florido
 
HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017NVIDIA
 
Maral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at SwedenMaral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at SwedenMaral Kalajian
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsJonas Bonér
 
The Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsThe Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsGood Funnel
 
Kaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory SyndromeKaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory SyndromeJackson Reynolds
 
The Agile Team Onion
The Agile Team OnionThe Agile Team Onion
The Agile Team OnionEmily Webber
 
Create Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick VallaeysCreate Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick VallaeysSearch Marketing Expo - SMX
 
Global healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem JagyasiGlobal healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem JagyasiDr Prem Jagyasi
 
BigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worldsBigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worldsDimitri De Jonghe
 
Analytics for Clover POS Overview
Analytics for Clover POS OverviewAnalytics for Clover POS Overview
Analytics for Clover POS OverviewHrvoje Smolić
 

Viewers also liked (20)

Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers
 
Managed Services Model For IT Services
Managed Services Model For IT Services Managed Services Model For IT Services
Managed Services Model For IT Services
 
TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und Mockito
 
5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico web5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico web
 
HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017
 
Maral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at SwedenMaral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at Sweden
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability Patterns
 
Hoofdzaken App
Hoofdzaken AppHoofdzaken App
Hoofdzaken App
 
The Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsThe Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer Interviews
 
Kaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory SyndromeKaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
 
Heritage
HeritageHeritage
Heritage
 
The Agile Team Onion
The Agile Team OnionThe Agile Team Onion
The Agile Team Onion
 
Create Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick VallaeysCreate Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
 
Global healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem JagyasiGlobal healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem Jagyasi
 
Head and shoulders
Head and shouldersHead and shoulders
Head and shoulders
 
BigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worldsBigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worlds
 
Let's view tanzania
Let's view tanzaniaLet's view tanzania
Let's view tanzania
 
Maintenance academy v1
Maintenance academy v1Maintenance academy v1
Maintenance academy v1
 
Analytics for Clover POS Overview
Analytics for Clover POS OverviewAnalytics for Clover POS Overview
Analytics for Clover POS Overview
 

Similar to HTTPBuilder NG: Back From The Dead

ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4Jim Jagielski
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Ben Hall
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerOrtus Solutions, Corp
 
Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Ortus Solutions, Corp
 
Varnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites flyVarnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites flyPeter Keung
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphpdantleech
 
Java web programming
Java web programmingJava web programming
Java web programmingChing Yi Chan
 
Mojolicious - A new hope
Mojolicious - A new hopeMojolicious - A new hope
Mojolicious - A new hopeMarcus Ramberg
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardSV Ruby on Rails Meetup
 
Flask and Angular: An approach to build robust platforms
Flask and Angular:  An approach to build robust platformsFlask and Angular:  An approach to build robust platforms
Flask and Angular: An approach to build robust platformsAyush Sharma
 
Http capturing
Http capturingHttp capturing
Http capturingEric Ahn
 
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeAcademy
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?Remy Sharp
 
Spring data iii
Spring data iiiSpring data iii
Spring data iii명철 강
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparisonHiroshi Nakamura
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and PythonPiXeL16
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Masahiro Nagano
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyFabio Akita
 

Similar to HTTPBuilder NG: Back From The Dead (20)

ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)
 
Server Side Swift: Vapor
Server Side Swift: VaporServer Side Swift: Vapor
Server Side Swift: Vapor
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and docker
 
Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018
 
Varnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites flyVarnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites fly
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
Java web programming
Java web programmingJava web programming
Java web programming
 
Mojolicious - A new hope
Mojolicious - A new hopeMojolicious - A new hope
Mojolicious - A new hope
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
 
Flask and Angular: An approach to build robust platforms
Flask and Angular:  An approach to build robust platformsFlask and Angular:  An approach to build robust platforms
Flask and Angular: An approach to build robust platforms
 
Http capturing
Http capturingHttp capturing
Http capturing
 
Plack at YAPC::NA 2010
Plack at YAPC::NA 2010Plack at YAPC::NA 2010
Plack at YAPC::NA 2010
 
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
Spring data iii
Spring data iiiSpring data iii
Spring data iii
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparison
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and Python
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema Ruby
 

More from noamt

We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)noamt
 
Go Modules
Go ModulesGo Modules
Go Modulesnoamt
 
Functional Groovy
Functional GroovyFunctional Groovy
Functional Groovynoamt
 
We Need A Better Testing Framework
We Need A Better Testing FrameworkWe Need A Better Testing Framework
We Need A Better Testing Frameworknoamt
 
Python Peculiarities
Python PeculiaritiesPython Peculiarities
Python Peculiaritiesnoamt
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Codenoamt
 
Searching for the grail
Searching for the grailSearching for the grail
Searching for the grailnoamt
 

More from noamt (7)

We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)
 
Go Modules
Go ModulesGo Modules
Go Modules
 
Functional Groovy
Functional GroovyFunctional Groovy
Functional Groovy
 
We Need A Better Testing Framework
We Need A Better Testing FrameworkWe Need A Better Testing Framework
We Need A Better Testing Framework
 
Python Peculiarities
Python PeculiaritiesPython Peculiarities
Python Peculiarities
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Code
 
Searching for the grail
Searching for the grailSearching for the grail
Searching for the grail
 

Recently uploaded

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 

Recently uploaded (20)

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 

HTTPBuilder NG: Back From The Dead