SlideShare ist ein Scribd-Unternehmen logo
1 von 125
Downloaden Sie, um offline zu lesen
Distributing Systems in Scala
with Finagle
Julio Capote
About me
•
•
•

Julio Capote
API team at Twitter
@capotej
This talk
•
•
•
•

Services
Scala
Finagle
Examples
Scaling
Monolithic System
•
•
•

Limited to a single language and runtime
Can only support few developers
Deploys get more dangerous
Solution?
Distributed System
•
•
•

Each service written in appropriate language
Can only support many developers
Granular deploys
But, this is complex...
Quick Scala Intro
What is Scala?
•
•
•
•

JVM language
Interoperable with Java
Functional
But Object Oriented too
Values
val foo: String = "bar"
val age: Int = 27
Type inference
val foo = "bar"
val foo: String = "bar"
Collections
List(61,31,34)
Seq(1,2,3)
Dictionaries / Hashes
Map("foo" -> "bar")
Functional
val addOne =
{ x: Int => x + 1 }
addOne.apply(2) => 3
addOne(2) => 3
val list = Seq(1,2,3,4)
list.map { x => addOne(x) }
list.map(addOne(_))
list.map(addOne)
list map(addOne)
list map addOne
list map addOne filter
{ item: Int =>
item % 2 == 0 }
Function Composition
val addOne =
{ x: Int => x + 1 }
val addTwo =
{ x: Int => x + 2 }
val addThree =
addOne compose addTwo
val addOne =
{ x: Int => x + 1 }
val addTwo =
{ x: Int => x + 2 }
val addThree =
addOne compose addTwo
addThree(2) => 5
Object oriented
class Dog extends Animal
def bark = {
println("woof")
}
}
Options
Map("foo" -> "bar").get("foo")
Some(bar)
Map("foo" -> "bar").get("zzz")
None
val a = Map("foo" -> "bar")
val opt = a.get("zzz")

val result =
opt.getOrElse("default")
val a = Map("foo" -> "bar")
val opt = a.get("zzz")
val result = opt match {
case Some(x) => x
case None => "default"
}
val a = Map("foo" -> "bar")
val opt = a.get("zzz")
opt foreach { result =>
println(result)
}
Finagle
What is Finagle?
•
•
•
•

Client/Server RPC Framework
Asynchronous
Functional
Protocol Agnostic
Futures
def fetchUrl(url: String) = Future[Response]
val f: Future[Response] =
fetchUrl("google.ru")

f map { response =>
println(response.content)
}
val f: Future[Response] =
fetchUrl("google.ru")

f onSuccess { response =>
println(response.content)
} onFailure {
case e => log.error(e)
}
val f: Future[Response] =
fetchUrl("google.ru")

f onSuccess { response =>
println(response.content)
} onFailure {
case e => log.error(e)
}
Services
“Your Server as a Function”
type Service[Req, Rep] = Req => Future[Rep]
Request => Future[Response]
Http Client
val client: Service[Request, Response] =
Http.newService("www.google.ru:80")
Making a request
val req = Request("/")
client(req) onSuccess { resp =>
println(resp.content)
}
val req = Request("/")
client.apply(req) onSuccess { resp =>
println(resp.content)
}
val req = Request("/")
val resp = client(req)
resp onSuccess { resp =>
println(resp.content)
}

Await.ready(resp)
val req = Request("/")
val resp = client(req)
resp onSuccess { resp =>
println(resp.content)
}

Await.ready(resp)
Http Server
class MyServer
extends Service[Request, Response] {
def apply(request: Request) = {
Future.value(new Response("hi"))
}
}
class MyServer
extends Service[Request, Response] {
def apply(request: Request) = {
Future.value(new Response("hi"))
}
}
Request => Future[Response]
Starting the server
val service = new MyServer
val server = Http.serve(":8080", service)
Await.ready(server)
Http Proxy
object Proxy extends App {
val client: Service[Request, Response] =
Http.newService("www.google.ru:80")
val server = Http.serve(":8080", client)

Await.ready(server)
}
object Proxy extends App {
val client: Service[Request, Response] =
Http.newService("www.google.ru:80")
val server = Http.serve(":8080", client)

Await.ready(server)
}
object Proxy extends App {
val client: Service[Request, Response] =
Http.newService("www.google.ru:80")
val server = Http.serve(":8080", client)

Await.ready(server)
}
Filters
Filter[InRequest,
InResponse,
OutRequest,
OutResponse]
Filter[InRequest,
InResponse,
OutRequest,
OutResponse]
Filter[InRequest,
InResponse,
OutRequest,
OutResponse]
SimpleFilter[Request, Response]
def apply(request: Req,
service: Service[Req, Rep]): Future[Rep]
def apply(request: Req,
service: Service[Req, Rep]): Future[Rep]
def apply(request: Req,
service: Service[Req, Rep]): Future[Rep]
def apply(request: Req,
service: Service[Req, Rep]): Future[Rep]
class ScreamFilter[Req, Rep]
extends SimpleFilter[Req, Rep]
def apply(request: Req,
service: Service[Req, Rep]) = {
service(request) onSuccess { response =>
response.setContent(response.content + "!")
response
}
}

}
class ScreamFilter[Req, Rep]
extends SimpleFilter[Req, Rep]
def apply(request: Req,
service: Service[Req, Rep]) = {
service(request) onSuccess { response =>
response.setContent(response.content + "!")
response
}
}

}
class ScreamFilter[Req, Rep]
extends SimpleFilter[Req, Rep]
def apply(request: Req,
service: Service[Req, Rep]) = {
service(request) onSuccess { response =>
response.setContent(response.content + "!")
response
}
}

}
class ScreamFilter[Req, Rep]
extends SimpleFilter[Req, Rep]
def apply(request: Req,
service: Service[Req, Rep]) = {
service(request) onSuccess { response =>
response.setContent(response.content + "!")
response
}
}

}
class ScreamFilter[Req, Rep]
extends SimpleFilter[Req, Rep]
def apply(request: Req,
service: Service[Req, Rep]) = {
service(request) onSuccess { response =>
response.setContent(response.content + "!")
response
}
}

}
class ScreamFilter[Req, Rep]
extends SimpleFilter[Req, Rep]
def apply(request: Req,
service: Service[Req, Rep]) = {
service(request) onSuccess { response =>
response.setContent(response.content + "!")
response
}
}

}
val service = new MyServer
val server = Http.serve(":8080", service)
Await.ready(server)
val service = new MyServer
val myFilter = new MyFilter
val newService = myFilter andThen service
val server = Http.serve(":8080", newService)
Await.ready(server)
val service = new MyServer
val myFilter = new MyFilter
val newService = myFilter andThen service
val server = Http.serve(":8080", newService)
Await.ready(server)
val service = new MyServer
val myFilter = new MyFilter
val newService = myFilter andThen service
val server = Http.serve(":8080", newService)
Await.ready(server)
Metrics
curl http://localhost:9990/admin/metrics.json
Add your own
class MyServer(stats: StatsReceiver)
extends Service[Request, Response] {
def apply(request: Request) = {
stats.counter("my counter").incr()
stats.time("fetch") {
expensiveOperation()
}

Future.value(new Response("hi"))
}
}
class MyServer(stats: StatsReceiver)
extends Service[Request, Response] {
def apply(request: Request) = {
stats.counter("my counter").incr()
stats.time("fetch") {
expensiveOperation()
}

Future.value(new Response("hi"))
}
}
class MyServer(stats: StatsReceiver)
extends Service[Request, Response] {
def apply(request: Request) = {
stats.counter("my counter").incr()
stats.time("fetch") {
expensiveOperation()
}

Future.value(new Response("hi"))
}
}
Finatra
Finagle with Sinatra
class Example extends Controller {
get("/") { request =>
render.plain("hi").toFuture
}
}
class Example extends Controller {
get("/") { request =>
render.plain("hi").toFuture
}
}
class MyServer extends FinatraServer {
val controller = new Example()
register(controller)
}
http://finatra.info
Questions?
•
•
•
•

http://tinyurl.com/finagle-guide
http://tinyurl.com/server-as-a-function
http://finatra.info
@capotej

Weitere ähnliche Inhalte

Was ist angesagt?

An a z index of windows power shell commandss
An a z index of windows power shell commandssAn a z index of windows power shell commandss
An a z index of windows power shell commandss
Ben Pope
 

Was ist angesagt? (20)

Sharding and Load Balancing in Scala - Twitter's Finagle
Sharding and Load Balancing in Scala - Twitter's FinagleSharding and Load Balancing in Scala - Twitter's Finagle
Sharding and Load Balancing in Scala - Twitter's Finagle
 
Java 8: the good parts!
Java 8: the good parts!Java 8: the good parts!
Java 8: the good parts!
 
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
 
Exploring Streams and Lambdas in Java8
Exploring Streams and Lambdas in Java8Exploring Streams and Lambdas in Java8
Exploring Streams and Lambdas in Java8
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
Djangocon
DjangoconDjangocon
Djangocon
 
An a z index of windows power shell commandss
An a z index of windows power shell commandssAn a z index of windows power shell commandss
An a z index of windows power shell commandss
 
Java8lambda
Java8lambda Java8lambda
Java8lambda
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWT
 
The Steel industry, Elixir, PostgreSQL & file_fdw
The Steel industry, Elixir, PostgreSQL & file_fdwThe Steel industry, Elixir, PostgreSQL & file_fdw
The Steel industry, Elixir, PostgreSQL & file_fdw
 
Linked to ArrayList: the full story
Linked to ArrayList: the full storyLinked to ArrayList: the full story
Linked to ArrayList: the full story
 
Scale up your thinking
Scale up your thinkingScale up your thinking
Scale up your thinking
 
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
Play framework training by Neelkanth Sachdeva @ Scala traits event , New Delh...
 
Evaluating Hype in scala
Evaluating Hype in scalaEvaluating Hype in scala
Evaluating Hype in scala
 
Java script advance-auroskills (2)
Java script advance-auroskills (2)Java script advance-auroskills (2)
Java script advance-auroskills (2)
 
Streams for (Co)Free!
Streams for (Co)Free!Streams for (Co)Free!
Streams for (Co)Free!
 
Programação reativa e o actor model
Programação reativa e o actor modelProgramação reativa e o actor model
Programação reativa e o actor model
 
Groovy unleashed
Groovy unleashed Groovy unleashed
Groovy unleashed
 

Andere mochten auch (6)

Павел Кудинов: Сетевая многозадачность: событийные машины
Павел Кудинов: Сетевая многозадачность: событийные машиныПавел Кудинов: Сетевая многозадачность: событийные машины
Павел Кудинов: Сетевая многозадачность: событийные машины
 
Илья Щербак, Eltex
Илья Щербак, EltexИлья Щербак, Eltex
Илья Щербак, Eltex
 
Mature optimization (Carlos Bueno, Facebook)
Mature optimization (Carlos Bueno, Facebook)Mature optimization (Carlos Bueno, Facebook)
Mature optimization (Carlos Bueno, Facebook)
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
Стриминг и эффективное чтение с DVD диска
Стриминг и эффективное чтение с DVD дискаСтриминг и эффективное чтение с DVD диска
Стриминг и эффективное чтение с DVD диска
 
Configuration Management Camp 2015
Configuration Management Camp 2015Configuration Management Camp 2015
Configuration Management Camp 2015
 

Ähnlich wie Julio Capote, Twitter

Clojure - A new Lisp
Clojure - A new LispClojure - A new Lisp
Clojure - A new Lisp
elliando dias
 
RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component library
Max Katz
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
Ajax Experience 2009
 

Ähnlich wie Julio Capote, Twitter (20)

Lambdas and Laughs
Lambdas and LaughsLambdas and Laughs
Lambdas and Laughs
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
Clojure - A new Lisp
Clojure - A new LispClojure - A new Lisp
Clojure - A new Lisp
 
Seattle useR Group - R + Scala
Seattle useR Group - R + ScalaSeattle useR Group - R + Scala
Seattle useR Group - R + Scala
 
Scala45 spray test
Scala45 spray testScala45 spray test
Scala45 spray test
 
Data Pipeline at Tapad
Data Pipeline at TapadData Pipeline at Tapad
Data Pipeline at Tapad
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
 
Java 8 Feature Preview
Java 8 Feature PreviewJava 8 Feature Preview
Java 8 Feature Preview
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
Writing Asynchronous Programs with Scala & Akka
Writing Asynchronous Programs with Scala & AkkaWriting Asynchronous Programs with Scala & Akka
Writing Asynchronous Programs with Scala & Akka
 
RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component library
 
Asynchronous Orchestration DSL on squbs
Asynchronous Orchestration DSL on squbsAsynchronous Orchestration DSL on squbs
Asynchronous Orchestration DSL on squbs
 
Time for Functions
Time for FunctionsTime for Functions
Time for Functions
 
Solr @ Etsy - Apache Lucene Eurocon
Solr @ Etsy - Apache Lucene EuroconSolr @ Etsy - Apache Lucene Eurocon
Solr @ Etsy - Apache Lucene Eurocon
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-C
 
Finagle Lightning Talk JPR 2014
Finagle Lightning Talk JPR 2014Finagle Lightning Talk JPR 2014
Finagle Lightning Talk JPR 2014
 
Kotlin boost yourproductivity
Kotlin boost yourproductivityKotlin boost yourproductivity
Kotlin boost yourproductivity
 
Introduction to clojure
Introduction to clojureIntroduction to clojure
Introduction to clojure
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 

Julio Capote, Twitter