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

YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知Yahoo!デベロッパーネットワーク
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
Protein purification
Protein purificationProtein purification
Protein purificationINDERGOHRI
 
Chrome拡張機能の作りかた
Chrome拡張機能の作りかたChrome拡張機能の作りかた
Chrome拡張機能の作りかたaozou99
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
Introduction to genomes
Introduction to genomesIntroduction to genomes
Introduction to genomesavrilcoghlan
 
AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点Kohei MATSUSHITA
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法Hiroki Mizuno
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すmonochrojazz
 
De novo str_prediction
De novo str_predictionDe novo str_prediction
De novo str_predictionShwetA Kumari
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました政雄 金森
 
Management & Governance on AWS こんなこともできます
Management & Governance on AWS こんなこともできますManagement & Governance on AWS こんなこともできます
Management & Governance on AWS こんなこともできますAmazon Web Services Japan
 
PHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミングPHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミングYo Ya
 
Openstack glance
Openstack glanceOpenstack glance
Openstack glanceSHAMEEM F
 
Biochemical markers in diagnosis of Liver DIsease
Biochemical markers in diagnosis of Liver DIseaseBiochemical markers in diagnosis of Liver DIsease
Biochemical markers in diagnosis of Liver DIseaseChee Oh
 
フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感Chao Li
 

What's hot (20)

YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
YJTC18 D-5 日本のインターネットを守る!Yahoo! JAPANの不正利用対策 - Splunkによる不正ログイン検知
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Protein purification
Protein purificationProtein purification
Protein purification
 
Chrome拡張機能の作りかた
Chrome拡張機能の作りかたChrome拡張機能の作りかた
Chrome拡張機能の作りかた
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Introduction to genomes
Introduction to genomesIntroduction to genomes
Introduction to genomes
 
マイクロサービスのセキュリティ概説
マイクロサービスのセキュリティ概説マイクロサービスのセキュリティ概説
マイクロサービスのセキュリティ概説
 
AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試す
 
Rampage
RampageRampage
Rampage
 
De novo str_prediction
De novo str_predictionDe novo str_prediction
De novo str_prediction
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました
 
CATH
CATHCATH
CATH
 
Management & Governance on AWS こんなこともできます
Management & Governance on AWS こんなこともできますManagement & Governance on AWS こんなこともできます
Management & Governance on AWS こんなこともできます
 
PHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミングPHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミング
 
Openstack glance
Openstack glanceOpenstack glance
Openstack glance
 
gamma GT
gamma GTgamma GT
gamma GT
 
Biochemical markers in diagnosis of Liver DIsease
Biochemical markers in diagnosis of Liver DIseaseBiochemical markers in diagnosis of Liver DIsease
Biochemical markers in diagnosis of Liver DIsease
 
フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感
 

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

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
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
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...itnewsafrica
 
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
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
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
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
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
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
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
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 

Recently uploaded (20)

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
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...
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
 
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
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
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
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
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...
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
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...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 

The Real-Time Web (and Other Buzzwords)