SlideShare a Scribd company logo
1 of 157
Download to read offline
Chris Wanstrath

                           http://defunkt.github.com




hi everyone, i’m chris wanstrath
i love randy rhoads
and kurt vonnegut
i live in san francisco
and work at github
(which is written in rails)
but! i’m not gonna talk about any of that stuff
today i want to talk about python
and comet

(among other things)
the
real-time
web                                                        (And other buzzwords)
                                                                By Chris Wanstrath
this talk is titled “the real-time web (and other buzzwords)”
so what is the “real-time” web?
                                  ?
techcrunch and readwriteweb would have you believe it’s a way to get your RSS stories
faster
but is that it?
no.
it’s all about pushing
instead of polling
it’s getting told what’s new
                               !
?
instead of asking for what’s new
instant chat in the browser
and information the moment it’s available
Server
                   Client




one persistent connection
Client
                                           Server




instead of many, short lived connections
right now when we say “real-time web” we usually mean one of three things
comet
flash’s XMLSocket
or HTML5’s WebSocket
let’s start with comet
?
how many people know what comet is?

how many people know how it differs from XML socket or WebSocket?

good! for a long time i had no idea what comet was
i think it has a big marketing problem.
                                          !
see, comet is a cleaning product.
just like ajax
so it’s kind of like,
Me, too!




“me too”
I, too, am a
                                                                                   revolutionary web
                                                                               technique you didn’t know
                                                                               existed and can start using
                                                                             today that will forever change
                                                                                the way you imagine the
                                                                                  web experience.




“I, too, am a revolutionary web technique you didn’t know existed and can start using today
that will forever change the way you think about the web experience.”
...



and you’re like
Uhh...




uh...
AJAX!!!
if i had my way...
i’d call it something else
like maybe asteroid
i dunno, there’s some cool imagery there
i dunno, there’s some cool imagery there
i dunno, there’s some cool imagery there
i dunno, there’s some cool imagery there
i dunno, there’s some cool imagery there
i dunno, there’s some cool imagery there
i dunno, there’s some cool imagery there
anything but comet
anyway, comet is any standards compliant technique which pushes or streams data to the
browser over HTTP

with comet you can essentially fake a socket connection between a browser and a backend
server
how about an example

well, for this year’s django dash
me
alex gaynor... whoops...
alex gaynor
and leah culver
( World’s smallest park )




(seen here next to the world’s smallest park)
built leafychat

irc in your browser using comet
you can connect to freenode channels
see who’s online
and do the irc thing

right in your browser (demo?)
all without ajax
how?
       ?
well, there are a few components at play here
Browser




first you’ve got the browser (naturally)
Browser      Apache
                        80




then we have apache
Django
                                                              8000




         Browser                            Apache
                                              80




sitting behind apache is django (via mod_wsgi or whatever)
Django
                                                                        8000




         Browser                             Apache
                                               80




the browser hits leafychat.com, port 80, which hits apache. apache sees it’s a django request
Django
                                       8000




         Browser             Apache
                               80




and hands off the request.
Django
                                                                     8000




         Browser                             Apache
                                               80




once django generates a response, apache takes it and delivers it
Django
                                                                     8000




         Browser                             Apache
                                               80




back to the browser. that’s, more or less, our HTTP request cycle
Browser




comet connections work in a similar fashion
Browser                            Orbited
                                             8100




instead of apache, we have Orbited sitting on port 8100
orbited is an open source, python comet server powered...
by twisted.

it does all of the comet heavy-lifting for us
Browser   Orbited
                 8100




so.
Zeddicus
                                                                     8200




         Browser                           Orbited
                                            8100




sitting behind orbited we have our app-specific comet code. for leafy chat it was a twisted-
based daemon named zeddicus. it handled all the IRC stuff - connecting to channels, sending
messages, receiving private messages, logging, all that
Orbited
                                            8100




orbited handles generic browser stuff...
Zeddicus
                                                                     8200




while our app-specific daemon (zeddicus) deals with the business logic.

in this case, irc stuff
Zeddicus
                                      8200




          Browser          Orbited
                            8100




does this look familiar?
Django
                              8000




          Browser   Apache
                      80




no? ok.
Zeddius
                                                                       Zeddicus
                                                                        8200




          Browser                            Orbited
                                              8100




anyway, the browser (using orbited’s bundled js library) makes a request...
Zeddius
                                                                       Zeddicus
                                                                        8200




          Browser                            Orbited
                                              8100




to port 8100. orbited sees it’s a request for zeddicus and hands it off to our backend
Zeddius
                                                                     Zeddicus
                                                                      8200




         Browser                            Orbited
                                             8100




zeddicus sees a new socket connection open, does some stuff, then writes to the socket
Zeddius
                                                                    Zeddicus
                                                                     8200




         Browser                           Orbited
                                            8100




orbited reads what zeddicus wrote to the socket connection they share
Zeddius
                                                     Zeddicus
                                                      8200




         Browser                           Orbited
                                            8100




then sends it back the browser via comet
Django
                              8000




          Browser   Apache
                      80




just like before
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>

    <script>
        // session data
        var session_nick = ""
        var session_channels = []
    </script>
    <script type="text/javascript" src="/static/js/soundmanager2/soundmanager2-nodebug-jsmin.js"></script
    <script type="text/javascript" src="/static/js/audio-player.js"></script>

    <title>Leafy Chat</title>

    <link rel="icon" href="/static/img/favicon.ico"/>

    <link rel="stylesheet" href="/static/css/reset.css" type="text/css" media="screen" />
    <link rel="stylesheet" href="/static/css/facebox.css" type="text/css" media="screen/>
    <link rel="stylesheet" href="/static/css/base.css" type="text/css" media="screen" />

    <script> document.domain = document.domain; </script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
    <script type="text/javascript" src="http://leafychat.com:8100/static/Orbited.js"></script>
    <script type="text/javascript" src="/static/js/facebox.js" charset="utf-8"></script>
    <script type="text/javascript" src="/static/js/cookie.js" charset="utf-8"></script>
    <script type="text/javascript" src="/static/js/leafy.js" charset="utf-8"></script>
    <script type="text/javascript" src="/static/js/kahlan.js" charset="utf-8"></script>


<div id="main">
    <div id="header">
        <div id="navigation" class="rounded">
            <ul class="nav-list">
                <!-- this should be a list -->
                <li>Hi <span id="welcome-user">there</span>!</li>



but while apache and django deal with html
Zeddius
                                                         Zeddicus
                                                          8200




         Browser                            Orbited
                                             8100




zeddicus, our back-end daemon, concerns itself only...
with json.

orbited supports STOMP, XMPP, and raw IRC, too, but JSON is the way to go.

why do i say that?
well, unfortunately this is where orbited does not rock
orbited only cares about giving you a socket, you have to do everything else yourself.

that’s the deal
so you need to design your own protocol...
how it interacts with your back-end daemon
how events are fired and responded to
all that boring stuff
we ended up using a combination of django signals and json
Zeddius
                                                        Zeddicus
                                                         8200




         Browser                            Orbited
                                             8100




so this is our overview, except with one small change
Zeddius
                                                      Zeddicus
                                                       8200




          Browser                           Orbited
                                             8100




these are actually persistent connections
Zeddius
                                                      Zeddicus
                                                       8200




         Browser                            Orbited
                                             8100




between orbited and zeddicus it’s a tcpsocket
Zeddius
                                                         Zeddicus
                                                          8200




         Browser                           Orbited
                                            8100




between the browser and orbited it’s a comet technique
Zeddicus
                        Browser
                                                             8200




we jump through all these hoops because it allows us to write our app as if the browser is
connecting DIRECTLY to zeddicus via a tcpsocket
Zeddicus
                        Browser
                                                             8200




which is what the “real time” web is all about and what comet gives us

the browser writes to and reads from a socket, our back-end daemon does the same.
fast communication
Zeddius
                                                          Zeddicus
                                                           8200




          Browser                               Orbited
                                                 8100




alright, so let’s talk about this part a bit more

the comet part
Zeddius
                                                                       Zeddicus
                                                                        8200




          Browser                            Orbited
                                              8100




there are a few different ways to fake a persistent connection to a server with modern
browsers
xhr long polling

- hang an xhr request until we get a response or 30s, then re-open and wait again
<script>
script tag long polling

- dynamically create a script tag pointing to a url that hangs or times out, rinse and repeat
<iframe>
forever frame

- open a Content-Encoded: chunked url in an iframe, each chunk is a <script> tag that runs
xhr streaming

- set content-encoding: chunked and trigger onreadystate callback with each chunk
so now you know our white lie: we don’t have real persistence, or a real socket.

we fake it at both ends.
or, really, orbited fakes it at both ends
all that to get irc in your browser
well, kinda
Zeddius
                                                               freenode
                                                               Zeddicus
                                                                 8200
                                                                 6667




          Browser                             Orbited
                                               8100




see, with orbited, you can connect directly to an irc server

and why not? it’s just a socket connection
in fact you can demo a (somewhat functional) irc connection on the orbited website
Zeddius
                                                                    Zeddicus
                                                                     8200




         Browser                           Orbited
                                            8100

                                                                             Zeddius
                                                                            freenode
                                                                            Zeddicus
                                                                              8200
                                                                              6667




but with leafychat we wrote our own backend daemon that connected to irc.

why?
logging.
Zeddius
                                                                       Zeddicus
                                                                        8200




          Browser                            Orbited
                                              8100




if we loaded our django code into zeddicus, we could easily log irc chats you’re interested in
based on your session id.

it works very well.
Django     Orbited
                                                                    8000




          Browser                              Apache
                                                 80

                                                                      Zeddius
                                                                       8200




at this point i should mention the older tutorials online explaining how to load orbited into
django.
Apache                    Django
                                                80                       8000

         Browser


                                              Orbited                  Zeddicus
                                               8100                     8200




but i the best (and simplest) way is to let each component be its own daemon

it works great for production as well as dev mode - the django dash judges were able to start
and run our app locally, despite the number of daemons that needed to run
if you want to get a comet app up and running locally, check out orbited

it supports a ton of comet transports and is actively maintained
using java? jetty has comet support
the ruby world has juggernaut
while perl has meteor
there’s the interesting in-progress Ajax Push Engine
and in erlang there’s erlycomet (built on mochiweb)
so, flash’s XMLSocket
Zeddius
                               Zeddicus
                                8200




           Browser   Orbited
                      8100




it turns this
Zeddicus
            Browser
                       8200




into this
how? flash allows you to make tcp connections in actionscript.

by providing a javascript api to those tcp connections, we can use flash to create persistent,
socket connections from the browser
no lying needed
of course, it may be non-standard and might not work great across firewalls. but if you can
use it, it’s pretty great
a popular technique is to attempt to open a flash socket, then fall back to standards based
comet methods if it fails

it’s good backup
there are a few nice libraries for xml socket on github
tmm1 / jssocket



my favorite is tmm1’s jssocket
defunkt / jssocket



(i have a fork which removes the jquery dependencies)
finally: HTML5’s WebSocket
it’s still a proposed draft

but it’ll let you open a socket to any serve that speaks the special WebSocket protocol
ws://
servers need to speak the WebSocket protocol - you can’t open arbitrary connections to irc or
xmpp gateways

this plugs up the obvious security holes but also makes it a bit harder to implement than
something like XMLSocket

your server needs to speak ws
so, in review
                ?
comet
should be called asteroid
flash’s XMLSocket
is non-standard but nice
HTML5’s WebSocket
not yet here

but futuristic
you should give orbited a shot
with json
0
probably null terminated
Django   Orbited
                                8000




don’t load orbited in django
Orbited
                                 8100




use them alongside each other
is that it?
              ?
that’s it
            !
Thank You
http://www.flickr.com/photos/mojombo/3785549701/sizes/l/
http://www.flickr.com/photos/voteprime/2361330726/sizes/o/
http://www.flickr.com/photos/johnkerr/2371310025/sizes/l/
http://www.flickr.com/photos/h19/182898904/
http://www.flickr.com/photos/ukinindia/3595042998/sizes/l/
http://www.flickr.com/photos/scott1027/3189137578/sizes/l/
http://www.flickr.com/photos/foxypar4/2124673642/sizes/l/
http://www.flickr.com/photos/nickwheeleroz/2166114756/sizes/l/
http://www.flickr.com/photos/nickwheeleroz/2178146080/sizes/l/
http://www.flickr.com/photos/diyromarcade/3006368260/sizes/o/
http://www.flickr.com/photos/boopsiedaisy/3611187885/sizes/o/
http://www.flickr.com/photos/bastispicks/2834869959/sizes/l/
http://www.flickr.com/photos/courtenay/2536259393/sizes/l/
http://www.flickr.com/photos/jardinle/3335907363/sizes/o/
http://www.flickr.com/photos/tim-miley/3569809538/
http://www.flickr.com/photos/dexterousartisan/3209508363/sizes/l/
http://www.flickr.com/photos/equanimity/3763158824/sizes/l/
http://www.flickr.com/photos/24617281@N04/2329660856/sizes/o/
http://farm4.static.flickr.com/3555/3767120120_8f43f885e1.jpg
http://www.flickr.com/photos/raffaella/64701476/
http://www.flickr.com/photos/monicareyes/405402858/sizes/o/
http://www.flickr.com/photos/11016633@N07/2232831953/

flickr

More Related Content

What's hot

What's hot (13)

Raffaello Sanzio
Raffaello SanzioRaffaello Sanzio
Raffaello Sanzio
 
Adria Sun Living V65SL | Technical Specification | TMC Leisure
Adria Sun Living V65SL | Technical Specification | TMC LeisureAdria Sun Living V65SL | Technical Specification | TMC Leisure
Adria Sun Living V65SL | Technical Specification | TMC Leisure
 
Filippo Brunelleschi
Filippo BrunelleschiFilippo Brunelleschi
Filippo Brunelleschi
 
Composer 1 dufay
Composer 1   dufayComposer 1   dufay
Composer 1 dufay
 
architettura romanica
 architettura romanica  architettura romanica
architettura romanica
 
Guerra dei 30 anni
Guerra dei 30 anniGuerra dei 30 anni
Guerra dei 30 anni
 
Raffaello, appunti
Raffaello, appuntiRaffaello, appunti
Raffaello, appunti
 
Il Romanico nelle arti visive.
Il Romanico nelle arti visive.Il Romanico nelle arti visive.
Il Romanico nelle arti visive.
 
L'autunno del medioevo
L'autunno del medioevoL'autunno del medioevo
L'autunno del medioevo
 
Manierismo
ManierismoManierismo
Manierismo
 
Piazza navona
Piazza navonaPiazza navona
Piazza navona
 
Frida kahlo spiegata ai bambini della scuola primaria (libretto dei giochi e ...
Frida kahlo spiegata ai bambini della scuola primaria (libretto dei giochi e ...Frida kahlo spiegata ai bambini della scuola primaria (libretto dei giochi e ...
Frida kahlo spiegata ai bambini della scuola primaria (libretto dei giochi e ...
 
Arte e cibo settecento
Arte e cibo settecentoArte e cibo settecento
Arte e cibo settecento
 

Viewers also liked

Real time web_apps_pycon2012-v1
Real time web_apps_pycon2012-v1Real time web_apps_pycon2012-v1
Real time web_apps_pycon2012-v1Avinash Prasad
 
PyConMY 2016 Django Channels
PyConMY 2016 Django ChannelsPyConMY 2016 Django Channels
PyConMY 2016 Django ChannelsKok Hoor Chew
 
Async Tasks with Django Channels
Async Tasks with Django ChannelsAsync Tasks with Django Channels
Async Tasks with Django ChannelsAlbert O'Connor
 
Django channels
Django channelsDjango channels
Django channelsAndy Dai
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingSteve Rhoades
 

Viewers also liked (6)

Real time web_apps_pycon2012-v1
Real time web_apps_pycon2012-v1Real time web_apps_pycon2012-v1
Real time web_apps_pycon2012-v1
 
PyConMY 2016 Django Channels
PyConMY 2016 Django ChannelsPyConMY 2016 Django Channels
PyConMY 2016 Django Channels
 
Async Tasks with Django Channels
Async Tasks with Django ChannelsAsync Tasks with Django Channels
Async Tasks with Django Channels
 
Kharkivpy
KharkivpyKharkivpy
Kharkivpy
 
Django channels
Django channelsDjango channels
Django channels
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time Messaging
 

Similar to The Real-Time Web (and Other Buzzwords)

Writing Portable WebSockets in Java
Writing Portable WebSockets in JavaWriting Portable WebSockets in Java
Writing Portable WebSockets in Javajfarcand
 
Deadly pixels - NSC 2013
Deadly pixels - NSC 2013Deadly pixels - NSC 2013
Deadly pixels - NSC 2013Saumil Shah
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyLeif Hedstrom
 
XSS Without Browser
XSS Without BrowserXSS Without Browser
XSS Without Browserkosborn
 
Whats Ajax Cheatsheet
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet51 lecture
 
Whats Ajax Cheatsheet
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet51 lecture
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - DeploymentFabio Akita
 
Toster - Understanding the Rails Web Model and Scalability Options
Toster - Understanding the Rails Web Model and Scalability OptionsToster - Understanding the Rails Web Model and Scalability Options
Toster - Understanding the Rails Web Model and Scalability OptionsFabio Akita
 
Understanding the Rails web model and scalability options
Understanding the Rails web model and scalability optionsUnderstanding the Rails web model and scalability options
Understanding the Rails web model and scalability options.toster
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiJackson Tian
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.jsguileen
 
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyFast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyKyle Drake
 
Sparklife - Life In The Trenches With Spark
Sparklife - Life In The Trenches With SparkSparklife - Life In The Trenches With Spark
Sparklife - Life In The Trenches With SparkIan Pointer
 
Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS drupalcampest
 
Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)Bertrand Delacretaz
 
Your java script library
Your java script libraryYour java script library
Your java script libraryjasfog
 

Similar to The Real-Time Web (and Other Buzzwords) (20)

Writing Portable WebSockets in Java
Writing Portable WebSockets in JavaWriting Portable WebSockets in Java
Writing Portable WebSockets in Java
 
Deadly pixels - NSC 2013
Deadly pixels - NSC 2013Deadly pixels - NSC 2013
Deadly pixels - NSC 2013
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a Proxy
 
Intro to Rails
Intro to RailsIntro to Rails
Intro to Rails
 
XSS Without Browser
XSS Without BrowserXSS Without Browser
XSS Without Browser
 
Whats Ajax Cheatsheet
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet
 
Slide Test
Slide TestSlide Test
Slide Test
 
Whats Ajax Cheatsheet
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Toster - Understanding the Rails Web Model and Scalability Options
Toster - Understanding the Rails Web Model and Scalability OptionsToster - Understanding the Rails Web Model and Scalability Options
Toster - Understanding the Rails Web Model and Scalability Options
 
Understanding the Rails web model and scalability options
Understanding the Rails web model and scalability optionsUnderstanding the Rails web model and scalability options
Understanding the Rails web model and scalability options
 
µjax in 30 minutes
µjax in 30 minutesµjax in 30 minutes
µjax in 30 minutes
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
 
Deployment de Rails
Deployment de RailsDeployment de Rails
Deployment de Rails
 
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyFast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
 
Sparklife - Life In The Trenches With Spark
Sparklife - Life In The Trenches With SparkSparklife - Life In The Trenches With Spark
Sparklife - Life In The Trenches With Spark
 
Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS
 
Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)
 
Your java script library
Your java script libraryYour java script library
Your java script library
 

More from err

Inside GitHub
Inside GitHubInside GitHub
Inside GitHuberr
 
Git: The Lean, Mean, Distributed Machine
Git: The Lean, Mean, Distributed MachineGit: The Lean, Mean, Distributed Machine
Git: The Lean, Mean, Distributed Machineerr
 
Kings of Code 2009
Kings of Code 2009Kings of Code 2009
Kings of Code 2009err
 
Forbidden Fruit: A Taste of Ruby's ParseTree
Forbidden Fruit: A Taste of Ruby's ParseTreeForbidden Fruit: A Taste of Ruby's ParseTree
Forbidden Fruit: A Taste of Ruby's ParseTreeerr
 
Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)err
 
Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)err
 
Making and Breaking Web Services with Ruby
Making and Breaking Web Services with RubyMaking and Breaking Web Services with Ruby
Making and Breaking Web Services with Rubyerr
 

More from err (7)

Inside GitHub
Inside GitHubInside GitHub
Inside GitHub
 
Git: The Lean, Mean, Distributed Machine
Git: The Lean, Mean, Distributed MachineGit: The Lean, Mean, Distributed Machine
Git: The Lean, Mean, Distributed Machine
 
Kings of Code 2009
Kings of Code 2009Kings of Code 2009
Kings of Code 2009
 
Forbidden Fruit: A Taste of Ruby's ParseTree
Forbidden Fruit: A Taste of Ruby's ParseTreeForbidden Fruit: A Taste of Ruby's ParseTree
Forbidden Fruit: A Taste of Ruby's ParseTree
 
Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)
 
Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)
 
Making and Breaking Web Services with Ruby
Making and Breaking Web Services with RubyMaking and Breaking Web Services with Ruby
Making and Breaking Web Services with Ruby
 

Recently uploaded

React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 

Recently uploaded (20)

React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 

The Real-Time Web (and Other Buzzwords)