SlideShare a Scribd company logo
1 of 41
Download to read offline
An Introduction to Twisted
!
Stacey Sern
shira@twistedmatrix.com
@staceysern
Web Server
twistd web --port tcp:8080 --path .
(HTTP)
Chat Server
twistd words --irc-port tcp:6667
--auth file:passwords.txt --group channel
(IRC)
Secure Shell Server
sudo twistd conch -p tcp:2222
(SSH)
Name Server
twistd dns -p 5553 --hosts-file=hosts
(DNS)
File Server
twistd ftp --port 2121 --root .
(FTP)
BitTorrent Client
https://github.com/staceysern/bittorrent
Twisted
An event-driven, networking engine
Twisted
An event-driven, networking engine
• Event-driven, networking engine

• Event-driven programming abstractions

• Networking abstractions

• Low-level APIs

• High-level APIs

• Applications
Twisted
An event-driven, networking engine
Twisted
An event-driven, networking engine
time
task 1
task 3
task 2
multi-threaded
synchronous
single-threaded
asynchronous
single-threaded
synchronous
event-driven
• Event-driven, networking engine

• Event-driven programming abstractions

• Networking abstractions

• Low-level APIs

• High-level APIs

• Applications
Twisted
An event-driven, networking engine
Reactor
Twisted’s event loop
Reactor
Twisted’s event loop
Interface
server & client
!
run()
stop()
callLater()
server
!
listenTCP()
listenUDP()
listenSSL()
client
!
connectTCP()
connectSSL()
Reactor Code
callback Application Code
Deferred
Callback Chain Errback Chain
An abstraction for managing callbacks
...
Callback 2
Callback 1
Callback 3
Errback 2
...
Errback 1
Errback 3
Synchronous
try:	
p = getpage_sync()	
except Exception:	
unavailable()	
else:	
t = translate(p)	
display(t)	
finally:	
cleanup()
d = getpage_async()	
d.addCallbacks(translate, unavailable)	
d.addCallback(display)	
d.addBoth(cleanup)
Asynchronous
display
cleanup
unavailable
cleanup
translate
failure from
getpage_async()
successful result from
getpage_async()
cleanup()
getpage_sync()
translate()
display()
Synchronous
Asynchronous
translate()
display()
cleanup()getpage_async()
addCallbacks()
addCallback()
addBoth()
callback2
both4
errback1
errback3
both4
callback1
successful result of
asynchronous operation
failure from
asynchronous operation
addCallbacks(callback1, errback1)
addCallback(callback2)
addErrback(errback3)
addBoth(both4)
Deferred
Twisted
An event-driven, networking engine
• Event-driven, networking engine

• Event-driven programming abstractions

• Networking abstractions

• Low-level APIs

• High-level APIs

• Applications
Application
Transport
Link
Network
HTTP, FTP, SMTP, POP, IMAP, DNS, IRC
TCP, UDP, SSL/TLS
IP
Ethernet
Internet Protocol Suite
Application
Transport
Link
Network
Client
Application
Transport
Link
Network
Server
0100100011001010010111
GET /index.html HTTP/1.1
Application
Transport
Link
Network
Internet
Protocol
Transport
OS
Twisted
Protocol
Represents one side of an application layer
protocol which determines the format and
meaning of data sent and received over a
Transport
Transport
Represents one end of a connection
between two endpoints over which data
can be sent and received
ProtocolFactory
Used to create the appropriate Protocol
when a new connection is established
Transport
OS
poll/event notification API
sockets API
write()

writeSequence()

loseConnection()
connectionMade()

dataReceived()

connectionLost()
Protocol
Reactor
Twisted
An event-driven, networking engine
• Event-driven, networking engine

• Event-driven programming abstractions

• Networking abstractions

• Low-level APIs

• High-level APIs

• Applications
from twisted.internet import protocol, reactor	
!
class EchoServer(protocol.Protocol):	
def dataReceived(self, data):	
self.transport.write(data)	
!
class EchoServerFactory(protocol.Factory):	
def buildProtocol(self, addr):	
return EchoServer()	
!
reactor.listenTCP(8000, EchoServerFactory())	
reactor.run()
Echo Server
from twisted.internet import protocol, reactor	
!
class EchoClient(protocol.Protocol):	
def connectionMade(self):	
self.transport.write(b’Hello, world!’)	
!
def dataReceived(self, data):	
print(data)	
self.transport.loseConnection()	
!
class EchoClientFactory(protocol.ClientFactory):	
def buildProtocol(self, addr):	
return EchoClient()	
!
reactor.connectTCP(’10.0.1.56’, 8000, EchoClientFactory())	
reactor.run()
Echo Client
Transport
OS
poll/event notification API
sockets API
write()

writeSequence()

loseConnection()
connectionMade()

dataReceived()

connectionLost()
Protocol
Reactor
Twisted
An event-driven, networking engine
• Event-driven, networking engine

• Event-driven programming abstractions

• Networking abstractions

• Low-level APIs

• High-level APIs

• Applications
SMTP
Trying 173.194.68.26...	
Connected to aspmx.l.google.com.	
Escape character is '^]'.	
220 mx.google.com ESMTP ew5si11028094qab.7 - gsmtp
$
HELO
250 mx.google.com at your service
MAIL FROM:<sender@example.com>
250 2.1.0 OK ew5si11028094qab.7 - gsmtp
RCPT TO:<recipient@example.com>
250 2.1.5 OK ew5si11028094qab.7 - gsmtp
DATA
354 Go ahead ew5si11028094qab.7 - gsmtp
From: Sender <sender@example.com>	
To: Recipient <recipient@example.com>	
Subject: This is a test	
!
This is only a test.	
.
250 2.0.0 OK 1392752225 ew5si11028094qab.7 - gsmtp
telnet aspmx.l.google.com 25
SMTPClient
A Protocol which implements the
client side of the SMTP protocol
API
getMailFrom()
getMailTo()
getData()
sentMail()
class SingleMessageSender(smtp.SMTPClient):	
def __init__(self, from_addr, to_addr, data):	
smtp.SMTPClient.__init__(self, None)	
self.from_addr = from_addr	
self.to_addr = to_addr	
self.data = data	
self.done = False	
!
def getMailFrom(self):	
if not self.done:	
self.done = True	
return self.from_addr	
!
def getMailTo(self):	
return [self.to_addr]	
!
def getMailData(self):	
return self.data	
!
def sentMail(self, code, resp, numOk, addresses, log):	
pass
• SMTPClient

• SMTPSender

• SMTPSenderFactory

• sendmail()

• Extended SMTP (ESMTP) equivalents
Twisted Mail
Client Building Blocks
• SMTP

• ESMTP

• twistd mail
Twisted Mail
Server Building Blocks
Twisted
An event-driven, networking engine
• Event-driven, networking engine

• Event-driven programming abstractions

• Networking abstractions

• Low-level APIs

• High-level APIs

• Applications
twistd
• Starting and stopping

• Logging

• Daemonizing

• Custom reactor

• Profiling
A cross-platform utility for deploying Twisted applications
Twisted
• Event-driven, networking engine (building blocks)

• Event-driven programming abstractions (Reactor, Deferred)

• Networking abstractions (Transport, Protocol, ProtocolFactory)

• Low-level APIs (TCP, UDP, SSL/TLS)

• High-level APIs (HTTP, SMTP, FTP, SSH, IRC, DNS)

• Applications (twistd)
An event-driven, networking engine
Resources
• An Introduction to Asynchronous Programming
and Twisted (http://krondo.com/?p=1327)

• Twisted Network Programming Essentials -
Jessica McKellar & Abe Fettig

• Twisted Website (https://twistedmatrix.com)

More Related Content

What's hot

debugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitchdebugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitch
어형 이
 
Docker network Present in VietNam DockerDay 2015
Docker network Present in VietNam DockerDay 2015Docker network Present in VietNam DockerDay 2015
Docker network Present in VietNam DockerDay 2015
Van Phuc
 
Streams are Awesome - (Node.js) TimesOpen Sep 2012
Streams are Awesome - (Node.js) TimesOpen Sep 2012 Streams are Awesome - (Node.js) TimesOpen Sep 2012
Streams are Awesome - (Node.js) TimesOpen Sep 2012
Tom Croucher
 

What's hot (20)

iptables and Kubernetes
iptables and Kubernetesiptables and Kubernetes
iptables and Kubernetes
 
Netty from the trenches
Netty from the trenchesNetty from the trenches
Netty from the trenches
 
Developing high-performance network servers in Lisp
Developing high-performance network servers in LispDeveloping high-performance network servers in Lisp
Developing high-performance network servers in Lisp
 
Building scalable network applications with Netty (as presented on NLJUG JFal...
Building scalable network applications with Netty (as presented on NLJUG JFal...Building scalable network applications with Netty (as presented on NLJUG JFal...
Building scalable network applications with Netty (as presented on NLJUG JFal...
 
debugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitchdebugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitch
 
Reactive server with netty
Reactive server with nettyReactive server with netty
Reactive server with netty
 
Building Netty Servers
Building Netty ServersBuilding Netty Servers
Building Netty Servers
 
Docker and Fluentd
Docker and FluentdDocker and Fluentd
Docker and Fluentd
 
Logging & Docker - Season 2
Logging & Docker - Season 2Logging & Docker - Season 2
Logging & Docker - Season 2
 
Microservices with Micronaut
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
 
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
 
Docker network Present in VietNam DockerDay 2015
Docker network Present in VietNam DockerDay 2015Docker network Present in VietNam DockerDay 2015
Docker network Present in VietNam DockerDay 2015
 
Evented Ruby VS Node.js
Evented Ruby VS Node.jsEvented Ruby VS Node.js
Evented Ruby VS Node.js
 
Asynchronous IO in Rust - Enrico Risa - Codemotion Rome 2017
Asynchronous IO in Rust - Enrico Risa - Codemotion Rome 2017Asynchronous IO in Rust - Enrico Risa - Codemotion Rome 2017
Asynchronous IO in Rust - Enrico Risa - Codemotion Rome 2017
 
Writing the Container Network Interface(CNI) plugin in golang
Writing the Container Network Interface(CNI) plugin in golangWriting the Container Network Interface(CNI) plugin in golang
Writing the Container Network Interface(CNI) plugin in golang
 
Streams are Awesome - (Node.js) TimesOpen Sep 2012
Streams are Awesome - (Node.js) TimesOpen Sep 2012 Streams are Awesome - (Node.js) TimesOpen Sep 2012
Streams are Awesome - (Node.js) TimesOpen Sep 2012
 
[233] level 2 network programming using packet ngin rtos
[233] level 2 network programming using packet ngin rtos[233] level 2 network programming using packet ngin rtos
[233] level 2 network programming using packet ngin rtos
 
Rapid Application Design in Financial Services
Rapid Application Design in Financial ServicesRapid Application Design in Financial Services
Rapid Application Design in Financial Services
 
WTF my container just spawned a shell!
WTF my container just spawned a shell!WTF my container just spawned a shell!
WTF my container just spawned a shell!
 
Docker summit : Docker Networking Control-plane & Data-Plane
Docker summit : Docker Networking Control-plane & Data-PlaneDocker summit : Docker Networking Control-plane & Data-Plane
Docker summit : Docker Networking Control-plane & Data-Plane
 

Viewers also liked

Viewers also liked (16)

Snakes on the Web
Snakes on the WebSnakes on the Web
Snakes on the Web
 
Python and the Web
Python and the WebPython and the Web
Python and the Web
 
Introduction to Python and Web Programming
Introduction to Python and Web ProgrammingIntroduction to Python and Web Programming
Introduction to Python and Web Programming
 
Why Python Web Frameworks Are Changing the Web
Why Python Web Frameworks Are Changing the WebWhy Python Web Frameworks Are Changing the Web
Why Python Web Frameworks Are Changing the Web
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Зоопарк python веб-фреймворков
Зоопарк python веб-фреймворковЗоопарк python веб-фреймворков
Зоопарк python веб-фреймворков
 
Python talk web frameworks
Python talk web frameworksPython talk web frameworks
Python talk web frameworks
 
Чем Python плох для стартапа?
Чем Python плох для стартапа?Чем Python плох для стартапа?
Чем Python плох для стартапа?
 
Python twisted
Python twistedPython twisted
Python twisted
 
Framework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs ChaliceFramework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs Chalice
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details
 
Async Web Frameworks in Python
Async Web Frameworks in PythonAsync Web Frameworks in Python
Async Web Frameworks in Python
 
Web Scraping with Python
Web Scraping with PythonWeb Scraping with Python
Web Scraping with Python
 
The Rotating tower in Dubai
The Rotating tower in DubaiThe Rotating tower in Dubai
The Rotating tower in Dubai
 
Scraping the web with python
Scraping the web with pythonScraping the web with python
Scraping the web with python
 
ABSOLUTE TOWERS(twisting form) CASE STUDY
ABSOLUTE TOWERS(twisting form) CASE STUDYABSOLUTE TOWERS(twisting form) CASE STUDY
ABSOLUTE TOWERS(twisting form) CASE STUDY
 

Similar to An Introduction to Twisted

Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''
Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''
Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''
OdessaJS Conf
 
Eduardo Silva - monkey http-server everywhere
Eduardo Silva - monkey http-server everywhereEduardo Silva - monkey http-server everywhere
Eduardo Silva - monkey http-server everywhere
StarTech Conference
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
Serge Stinckwich
 

Similar to An Introduction to Twisted (20)

111214 node conf
111214 node conf111214 node conf
111214 node conf
 
GeekCampSG - Nodejs , Websockets and Realtime Web
GeekCampSG - Nodejs , Websockets and Realtime WebGeekCampSG - Nodejs , Websockets and Realtime Web
GeekCampSG - Nodejs , Websockets and Realtime Web
 
Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''
Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''
Alexey Orlenko ''High-performance IPC and RPC for microservices and apps''
 
Router と WebSocket
Router と WebSocketRouter と WebSocket
Router と WebSocket
 
Building an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twistedBuilding an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twisted
 
Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
 
ASP.NET Core 3.0 Deep Dive
ASP.NET Core 3.0 Deep DiveASP.NET Core 3.0 Deep Dive
ASP.NET Core 3.0 Deep Dive
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
 
signalr
signalrsignalr
signalr
 
Eduardo Silva - monkey http-server everywhere
Eduardo Silva - monkey http-server everywhereEduardo Silva - monkey http-server everywhere
Eduardo Silva - monkey http-server everywhere
 
«Real Time» Web Applications with SignalR in ASP.NET
«Real Time» Web Applications with SignalR in ASP.NET«Real Time» Web Applications with SignalR in ASP.NET
«Real Time» Web Applications with SignalR in ASP.NET
 
Python, do you even async?
Python, do you even async?Python, do you even async?
Python, do you even async?
 
XML-RPC and SOAP (April 2003)
XML-RPC and SOAP (April 2003)XML-RPC and SOAP (April 2003)
XML-RPC and SOAP (April 2003)
 
WebSocket
WebSocketWebSocket
WebSocket
 
DCUS17 : Docker networking deep dive
DCUS17 : Docker networking deep diveDCUS17 : Docker networking deep dive
DCUS17 : Docker networking deep dive
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
Pycon - Python for ethical hackers
Pycon - Python for ethical hackers Pycon - Python for ethical hackers
Pycon - Python for ethical hackers
 
Hands on with CoAP and Californium
Hands on with CoAP and CaliforniumHands on with CoAP and Californium
Hands on with CoAP and Californium
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Recently uploaded (20)

WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 

An Introduction to Twisted