SlideShare a Scribd company logo
TORNADO
IN DEPTH
thor
thunder
tro
tronar
tronada
tornar
tornada
tornada
tronada
+
tornada
TORNADO
what is it?
Non-blocking web server
Based on epoll / kqueue
Handles 1000s of connections
Powers FriendFeed
why do you even care?
Know what you use
I can't trust
what I don't know
Learning and sharing: fun!
what do you use it for?
We built a
Scalable
Distributed
Fault tolerant
High load
...thing
[CITATION NEEDED]
oscar.vilaplana@paylogic.eu
TORNADO
what is it made of?
IOLoop
Callbacks, Tasks, Timeouts
TCPServer
Application
RequestHandler
Generators
can I extend it?
Sure!
It's easy
How would we make
a simple TCPServer?
0b_tcpserver.py
show me the source!
GETTING
STARTED
how do I make the simplest app?
Define a RequestHandler
Implement get
Define an Application
Tell the application to listen
Start the IOLoop
01_getting_started.py
show me the source!
what is an Application?
Collection of RequestHandlers
Implements listen:
Starts an HTTPServer
Sets the Application as request callback
Implements __call__:
Handles the user requests
t1_application_listen.py
show me the source!
what does Application.__call__ do?
Parses the URL
Decides which handler to use
and creates an instance of it
(each connection gets one)
_executes it
(passing any defined transforms to it –e.g, Gzip compression)
t2_application_call.py
show me the source!
what
does RequestHandler._execute do?
Calls the handler method
Checks XSRF cookie
Maybe closes the connection
t3_request_handler_
_execute.py
show me the source!
IOLOOP
CALLBACK
TIMEOUT
event
Core of Tornado
Usable standalone or with WSGI
Used for server and client
Single instance per process
Small!
what is the IOLoop?
Loops forever
Executes:
Callbacks (asap)
Timeouts (when due)
Events (when occoured)
what does the IOLoop do?
what is an Event?
Something that happened on a socket (fd)
(e.g. a user opened a conneciton)
Applications define handlers for Events
how do I wait for an Event?
add_handler(fd, handler, events)
update_handler(fd, handler, events)
remove_handler(fd, handler)
“Notify me when I can READ or WRITE,
or when there is an ERROR”
IOLOOP
THE LOOP
in four steps
Process Callbacks
They were scheduled by previous:
Callbacks
Event handlers
first process the Callbacks
For each Timeout:
Is it due now?
Run its callback
Calculate the time till next Timeout
second process the Timeouts
Poll timeout:
Callbacks? Then 0
Timeouts? Then time until the next Timeout
Neither? 1 hour
Here the IOLoop blocks
third poll for Events
For each (file descriptor, Event):
Call its handler
...and repeat the loop
and fourth process the Events
THE
EXAMPLE
WHAT it
really does
01_getting_started.py
show me the source!
Application.listen
starts HTTPServer
calls IOLoop.add_accept_handler
(Application.__call__ will handle the ACCEPT event)
and when a client connects...
what does the example do?
what does the example do?
IOLoop
polls
connection TCPServer
calls
HTTPServer
which is
HTTPConnection
creates
read
and callsheaders
body
reads
using callbacks
request_callback
and calls
Application.__call__
which is RequestHandler
._execute
calls
(after parsing URL)
RequestHandler
calls
get or post or ...
calls
HTTPConnection
writes to
(in chunks)
_auto_finish?
finishes
yes
t4_simple_ioloop.py
show me the source!
Scheduled
tasks
how do we schedule a task?
Call me back asap
Ioloop.add_callback
Call me back later
Ioloop.add_timeout
Call me often
PeriodicCallback
02_scheduled_tasks.py
show me the source!
how does add_callback work?
Adds the callback to the list of
callbacks.
(and wraps it in a threadlocal-like stack context)
what do you mean, threadlocal-like?
StackContext
Keeps track of the socket connection
Handles association between socket and
Application classes
t6_add_callback.py
show me the source!
how does add_timeout work?
Pushes the timeout to the heap
of timeouts.
(and wraps it in a threadlocal-like stack context too)
t7_add_timeout.py
show me the source!
how do PeriodicCallbacks work?
start
Schedules the next timeout to call _run
Marks the PeriodicCallback as running
stop
Removes the next timeout
Marks the PeriodicCallback as stopped
_run
Calls the callback
(unless stop was called)
t8_periodic_callback.py
show me the source!
what about Callback?
Indeed.
Async
handlers
asynchronous@
&
auto_ _finish
how does @asynchronous work?
Sets _auto_finish to False
(and does some Exception wrapping)
The connection remains open
after get, post...
Close it yourself
(whenever you want)
03_fetch_async.py
show me the source!
I put a callback on your callback
Nested callbacks
make ugly code.
what about Callback?
Indeed.
generators
how do I avoid callbacks?
Use Callback
(finally!)
and yield
Or Task
04_fetch_gen.py
show me the source!
Yield
points
what is a YieldPoint?
Something you yield
Then stuff happens
what is a YieldPoint?
Callback
Sends a result for a key
Wait
Waits till a result for a key arrives
WaitMany
Same as Wait, for many keys
Task
Wait + Callback
(with an auto-generated key)
Multi
List of YeldPoints
what is a YieldPoint?
how do we do async processing?
callback=(yield Callback(“key”))
When a result arrives, send it for the
key “key”
how do we do async processing?
response=yield Wait(“key”)
When the result is sent, read it into
response.
04_fetch_gen.py
show me the source!
05_task.py
show me the source!
t9_yield_points.py
show me the source!
websockets
how do we use websockets?
Extend WebSocketHandler
(instead of RequestHandler)
Implement on_message
06_websocket.py
show me the source!
how do websockets work?
Similar to @asynchronous
(the connection is kept open)
After writing, read for more
(asynchronously—see IOStream)
To Application, it looks like a RequestHandler
how does WebSocket work?
_execute
Accepts the connection
Decides the version of the protocol.
Instantiates a WebSocketProtocol class
how does WebSocketProtocol work?
accept_connection
Sends the required initial message
Reads the next message (asynchronously)
_write_response
Writes a response on the socket
Reads the next message (asynchronously)
ta_websocket.py
show me the source!
iostream
what does IOStream do?
Communicates with the socket
Asynchronous
Uses IOLoop Callbacks
how does IOStream work?
_add_io_state
“Notify me when I can READ or WRITE, or when ERROR”
schedules Callback for an event (READ, WRITE, ...)
_handle_events
Can I read? Call _handle_read
Can I write? Call _handle_write
Handles errors
how does IOStream work?
_handle_read
Store data in read buffer
Call the read callback (_read_from_buffer)
_handle_write
Write data from the buffer into the socket (handling
funny circumstances)
Call the write callback (if it exists)
how does IOStream work?
connect
socket.connect
_add_io_state(WRITE)
read
Set callback
Data in read buffer? Return it
Read buffer empty? _add_io_state(READ)
write
Add data to write buffer
_add_io_state(WRITE)
how do I use IOStream directly?
read_until_regex
read_until
read_bytes
read_until_close
All take a callback
how do I use streaming callbacks?
read_bytes
read_until_close
Param: streaming_callback
Data is sent to callback as it arrives
0a_async_callback.py
show me the source!
database
how do I talk to a database?
database.connection
query(“SQL”)
Returns an iterable
Very simple
07_db.py
show me the source!
Not async!
asyncmongo
what is asyncmongo?
Asynchronous MongoDB client
Uses Tornado's IOLoop
how do I use asyncmongo?
asyncmongo.Client
db.find
takes a callback parameter
08_mongo.py
show me the source!
how does asyncmongo work?
Implements a Connection
Many: ConnectionPool
Sends data via Tornado's IOStream
Commands send via Cursor
Cursor.send_message
Uses Connection to communicate asynchronously
can we write our own asyncmysql?
Difficult
C driver has blocking calls
mysql_query
mysql_store_result
mysql_use_result
Alternative
Use Twisted's txMySQL with tornado.platform.twisted
Slower
Q A&
GRAZIE!
source: uncertain (sorry!)
dev@oscarvilaplana.cat

More Related Content

What's hot

Python, do you even async?
Python, do you even async?Python, do you even async?
Python, do you even async?
Saúl Ibarra Corretgé
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework
Fabio Tiriticco
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparison
Hiroshi Nakamura
 
How do event loops work in Python?
How do event loops work in Python?How do event loops work in Python?
How do event loops work in Python?
Saúl Ibarra Corretgé
 
About Node.js
About Node.jsAbout Node.js
About Node.js
Artemisa Yescas Engler
 
Coroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseCoroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in Practise
Christian Melchior
 
Using Websockets with Play!
Using Websockets with Play!Using Websockets with Play!
Using Websockets with Play!
Andrew Conner
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
Gabriele Lana
 
Vert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCDVert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCD
Tim Nolet
 
A complete guide to Node.js
A complete guide to Node.jsA complete guide to Node.js
A complete guide to Node.js
Prabin Silwal
 
Pycon - Python for ethical hackers
Pycon - Python for ethical hackers Pycon - Python for ethical hackers
Pycon - Python for ethical hackers
Mohammad Reza Kamalifard
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
jacekbecela
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
King Foo
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
Tom Croucher
 
Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...
Baruch Sadogursky
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
orkaplan
 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java
Baruch Sadogursky
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Code
noamt
 
Building a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryBuilding a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQuery
Tatsuhiko Miyagawa
 
WebSockets with PHP: Mission impossible
WebSockets with PHP: Mission impossibleWebSockets with PHP: Mission impossible
WebSockets with PHP: Mission impossible
Yoan-Alexander Grigorov
 

What's hot (20)

Python, do you even async?
Python, do you even async?Python, do you even async?
Python, do you even async?
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparison
 
How do event loops work in Python?
How do event loops work in Python?How do event loops work in Python?
How do event loops work in Python?
 
About Node.js
About Node.jsAbout Node.js
About Node.js
 
Coroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseCoroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in Practise
 
Using Websockets with Play!
Using Websockets with Play!Using Websockets with Play!
Using Websockets with Play!
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
 
Vert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCDVert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCD
 
A complete guide to Node.js
A complete guide to Node.jsA complete guide to Node.js
A complete guide to Node.js
 
Pycon - Python for ethical hackers
Pycon - Python for ethical hackers Pycon - Python for ethical hackers
Pycon - Python for ethical hackers
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
 
Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Code
 
Building a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryBuilding a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQuery
 
WebSockets with PHP: Mission impossible
WebSockets with PHP: Mission impossibleWebSockets with PHP: Mission impossible
WebSockets with PHP: Mission impossible
 

Viewers also liked

Lean Software Development: Validated Learning
Lean Software Development: Validated LearningLean Software Development: Validated Learning
Lean Software Development: Validated Learning
Òscar Vilaplana
 
Tornado powerpoint
Tornado powerpointTornado powerpoint
Tornado powerpoint
laurennwaggoner
 
Real time server
Real time serverReal time server
Real time server
thepian
 
What is a tornado?
What is a tornado?What is a tornado?
What is a tornado?
Austin
 
Tornado
TornadoTornado
Tornado
Hammam Samara
 
Tornado PowerPoint
Tornado PowerPointTornado PowerPoint
Tornado PowerPoint
Heather0235
 
Thunderstorms, Tornadoes, and Hurricanes
Thunderstorms, Tornadoes, and HurricanesThunderstorms, Tornadoes, and Hurricanes
Thunderstorms, Tornadoes, and Hurricanes
beckerdo
 
Natural disasters
Natural disasters Natural disasters
Natural disasters
avy123
 

Viewers also liked (8)

Lean Software Development: Validated Learning
Lean Software Development: Validated LearningLean Software Development: Validated Learning
Lean Software Development: Validated Learning
 
Tornado powerpoint
Tornado powerpointTornado powerpoint
Tornado powerpoint
 
Real time server
Real time serverReal time server
Real time server
 
What is a tornado?
What is a tornado?What is a tornado?
What is a tornado?
 
Tornado
TornadoTornado
Tornado
 
Tornado PowerPoint
Tornado PowerPointTornado PowerPoint
Tornado PowerPoint
 
Thunderstorms, Tornadoes, and Hurricanes
Thunderstorms, Tornadoes, and HurricanesThunderstorms, Tornadoes, and Hurricanes
Thunderstorms, Tornadoes, and Hurricanes
 
Natural disasters
Natural disasters Natural disasters
Natural disasters
 

Similar to Tornado in Depth

Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009
pauldix
 
Architecting single-page front-end apps
Architecting single-page front-end appsArchitecting single-page front-end apps
Architecting single-page front-end apps
Zohar Arad
 
CS1520 Session 2 - Simple Router
CS1520 Session 2 - Simple RouterCS1520 Session 2 - Simple Router
CS1520 Session 2 - Simple Router
Salim Malakouti
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
Tim Burks
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
Su Zin Kyaw
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and python
Chetan Giridhar
 
Lets have some fun with twilio open tok
Lets have some fun with   twilio open tokLets have some fun with   twilio open tok
Lets have some fun with twilio open tok
mirahman
 
How to build twitter bot using golang from scratch
How to build twitter bot using golang from scratchHow to build twitter bot using golang from scratch
How to build twitter bot using golang from scratch
Katy Slemon
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
gturnquist
 
Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017
Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017
Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017
VMware Tanzu
 
TCP Sockets Tutor maXbox starter26
TCP Sockets Tutor maXbox starter26TCP Sockets Tutor maXbox starter26
TCP Sockets Tutor maXbox starter26
Max Kleiner
 
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingJava Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Tal Melamed
 
How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?
How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?
How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?
Katy Slemon
 
Real timeninja - Codemotion 2015 Roma
Real timeninja - Codemotion 2015 RomaReal timeninja - Codemotion 2015 Roma
Real timeninja - Codemotion 2015 Roma
MeanMilan
 
Advanced malwareanalysis training session2 botnet analysis part1
Advanced malwareanalysis training session2 botnet analysis part1Advanced malwareanalysis training session2 botnet analysis part1
Advanced malwareanalysis training session2 botnet analysis part1
Cysinfo Cyber Security Community
 
TinyOS 2.1 tutorial at IPSN 2009
TinyOS 2.1 tutorial at IPSN 2009TinyOS 2.1 tutorial at IPSN 2009
TinyOS 2.1 tutorial at IPSN 2009
gnawali
 
Symfony book 2.1
Symfony book 2.1Symfony book 2.1
Symfony book 2.1
mooru
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger
 
Proposal
ProposalProposal
Web Server and how we can design app in C#
Web Server and how we can design app  in C#Web Server and how we can design app  in C#
Web Server and how we can design app in C#
caohansnnuedu
 

Similar to Tornado in Depth (20)

Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009
 
Architecting single-page front-end apps
Architecting single-page front-end appsArchitecting single-page front-end apps
Architecting single-page front-end apps
 
CS1520 Session 2 - Simple Router
CS1520 Session 2 - Simple RouterCS1520 Session 2 - Simple Router
CS1520 Session 2 - Simple Router
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and python
 
Lets have some fun with twilio open tok
Lets have some fun with   twilio open tokLets have some fun with   twilio open tok
Lets have some fun with twilio open tok
 
How to build twitter bot using golang from scratch
How to build twitter bot using golang from scratchHow to build twitter bot using golang from scratch
How to build twitter bot using golang from scratch
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017
Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017
Stéphane Nicoll and Madhura Bhave at SpringOne Platform 2017
 
TCP Sockets Tutor maXbox starter26
TCP Sockets Tutor maXbox starter26TCP Sockets Tutor maXbox starter26
TCP Sockets Tutor maXbox starter26
 
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingJava Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
 
How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?
How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?
How to Build Real-time Chat App with Express, ReactJS, and Socket.IO?
 
Real timeninja - Codemotion 2015 Roma
Real timeninja - Codemotion 2015 RomaReal timeninja - Codemotion 2015 Roma
Real timeninja - Codemotion 2015 Roma
 
Advanced malwareanalysis training session2 botnet analysis part1
Advanced malwareanalysis training session2 botnet analysis part1Advanced malwareanalysis training session2 botnet analysis part1
Advanced malwareanalysis training session2 botnet analysis part1
 
TinyOS 2.1 tutorial at IPSN 2009
TinyOS 2.1 tutorial at IPSN 2009TinyOS 2.1 tutorial at IPSN 2009
TinyOS 2.1 tutorial at IPSN 2009
 
Symfony book 2.1
Symfony book 2.1Symfony book 2.1
Symfony book 2.1
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
 
Proposal
ProposalProposal
Proposal
 
Web Server and how we can design app in C#
Web Server and how we can design app  in C#Web Server and how we can design app  in C#
Web Server and how we can design app in C#
 

More from Òscar Vilaplana

Type Checking in Python at Tiqets
Type Checking in Python at TiqetsType Checking in Python at Tiqets
Type Checking in Python at Tiqets
Òscar Vilaplana
 
Celery
CeleryCelery
Handling Massive Traffic with Python
Handling Massive Traffic with PythonHandling Massive Traffic with Python
Handling Massive Traffic with Python
Òscar Vilaplana
 
Software Architecture: How Much Design?
Software Architecture: How Much Design?Software Architecture: How Much Design?
Software Architecture: How Much Design?
Òscar Vilaplana
 
Continuous deployment
Continuous deploymentContinuous deployment
Continuous deployment
Òscar Vilaplana
 
Scrum
ScrumScrum
Scaling
ScalingScaling

More from Òscar Vilaplana (7)

Type Checking in Python at Tiqets
Type Checking in Python at TiqetsType Checking in Python at Tiqets
Type Checking in Python at Tiqets
 
Celery
CeleryCelery
Celery
 
Handling Massive Traffic with Python
Handling Massive Traffic with PythonHandling Massive Traffic with Python
Handling Massive Traffic with Python
 
Software Architecture: How Much Design?
Software Architecture: How Much Design?Software Architecture: How Much Design?
Software Architecture: How Much Design?
 
Continuous deployment
Continuous deploymentContinuous deployment
Continuous deployment
 
Scrum
ScrumScrum
Scrum
 
Scaling
ScalingScaling
Scaling
 

Recently uploaded

Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 

Recently uploaded (20)

Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 

Tornado in Depth