The Real-Time Web (and Other Buzzwords)

err
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
The Real-Time Web (and Other Buzzwords)
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
The Real-Time Web (and Other Buzzwords)
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
1 of 157

Recommended

coincements_(2).pptx by
coincements_(2).pptxcoincements_(2).pptx
coincements_(2).pptxDoghmaneBachir
72 views48 slides
VALUTAZIONE DELLA SICUREZZA CON METODI PUSH-OVER by
VALUTAZIONE DELLA SICUREZZA CON METODI PUSH-OVERVALUTAZIONE DELLA SICUREZZA CON METODI PUSH-OVER
VALUTAZIONE DELLA SICUREZZA CON METODI PUSH-OVERFranco Bontempi Org Didattica
4.9K views97 slides
O edital deve estabelecer preço máximo para a licitação? by
O edital deve estabelecer preço máximo para a licitação?O edital deve estabelecer preço máximo para a licitação?
O edital deve estabelecer preço máximo para a licitação?Alveni Lisboa
997 views3 slides
Appunti del corso di Costruzioni Metalliche - Sciarretta by
Appunti del corso di Costruzioni Metalliche - SciarrettaAppunti del corso di Costruzioni Metalliche - Sciarretta
Appunti del corso di Costruzioni Metalliche - SciarrettaFranco Bontempi Org Didattica
2.8K views129 slides
Aashish's laser by
Aashish's laserAashish's laser
Aashish's laserAashish Anand
2K views21 slides
Static testing vs dynamic testing by
Static testing vs dynamic testingStatic testing vs dynamic testing
Static testing vs dynamic testingpooja deshmukh
3.9K views9 slides

More Related Content

What's hot

TDC 2021/22 by
TDC 2021/22TDC 2021/22
TDC 2021/22Franco Bontempi
687 views2 slides
Interferential therapy by
Interferential therapyInterferential therapy
Interferential therapyDr Lakshmi pavani P. (PT)
10.6K views34 slides
Theraputic ultrasound by
Theraputic ultrasoundTheraputic ultrasound
Theraputic ultrasoundSimba Syed
45.4K views67 slides
Electro diagnostic tests ppt by
Electro diagnostic tests pptElectro diagnostic tests ppt
Electro diagnostic tests pptKanchan Sharma
14.7K views24 slides
Phonophoresis .pptx by
Phonophoresis .pptxPhonophoresis .pptx
Phonophoresis .pptxUrfeya Mirza
3.4K views49 slides
La realtà dei ponti e dei viadotti: controllo e manutenzione by
La realtà dei ponti e dei viadotti: controllo e manutenzioneLa realtà dei ponti e dei viadotti: controllo e manutenzione
La realtà dei ponti e dei viadotti: controllo e manutenzioneFranco Bontempi
137 views42 slides

What's hot(16)

Theraputic ultrasound by Simba Syed
Theraputic ultrasoundTheraputic ultrasound
Theraputic ultrasound
Simba Syed45.4K views
Electro diagnostic tests ppt by Kanchan Sharma
Electro diagnostic tests pptElectro diagnostic tests ppt
Electro diagnostic tests ppt
Kanchan Sharma14.7K views
Phonophoresis .pptx by Urfeya Mirza
Phonophoresis .pptxPhonophoresis .pptx
Phonophoresis .pptx
Urfeya Mirza3.4K views
La realtà dei ponti e dei viadotti: controllo e manutenzione by Franco Bontempi
La realtà dei ponti e dei viadotti: controllo e manutenzioneLa realtà dei ponti e dei viadotti: controllo e manutenzione
La realtà dei ponti e dei viadotti: controllo e manutenzione
Franco Bontempi137 views
Standing waves by sdang2014
Standing wavesStanding waves
Standing waves
sdang2014763 views
piezo electric effect by 2461998
 piezo electric effect piezo electric effect
piezo electric effect
24619984.4K views
Capacità Termica Areica Interna Periodica - mygreenbuildings.org by Andrea Ursini Casalena
Capacità Termica Areica Interna Periodica - mygreenbuildings.orgCapacità Termica Areica Interna Periodica - mygreenbuildings.org
Capacità Termica Areica Interna Periodica - mygreenbuildings.org
3 Previsione numerica del comportamento nelle NTC 2008 di Aurelio Ghersi by Eugenio Agnello
3 Previsione numerica del comportamento nelle NTC 2008 di Aurelio Ghersi3 Previsione numerica del comportamento nelle NTC 2008 di Aurelio Ghersi
3 Previsione numerica del comportamento nelle NTC 2008 di Aurelio Ghersi
Eugenio Agnello3.3K views
Range of motion chap 3 by KhazimaAsif
Range of motion chap 3Range of motion chap 3
Range of motion chap 3
KhazimaAsif1.1K views
Basic concepts of Manual Muscle Testing (MMT) by JebarajFletcher
Basic concepts of Manual Muscle Testing (MMT)Basic concepts of Manual Muscle Testing (MMT)
Basic concepts of Manual Muscle Testing (MMT)
JebarajFletcher2.3K views
Reseptipohja pdf-may-2-2012-11-10-am-389k by Marja Sinikka
Reseptipohja pdf-may-2-2012-11-10-am-389kReseptipohja pdf-may-2-2012-11-10-am-389k
Reseptipohja pdf-may-2-2012-11-10-am-389k
Marja Sinikka5.7K views

Viewers also liked

Real time web_apps_pycon2012-v1 by
Real time web_apps_pycon2012-v1Real time web_apps_pycon2012-v1
Real time web_apps_pycon2012-v1Avinash Prasad
1.4K views15 slides
PyConMY 2016 Django Channels by
PyConMY 2016 Django ChannelsPyConMY 2016 Django Channels
PyConMY 2016 Django ChannelsKok Hoor Chew
1.7K views27 slides
Async Tasks with Django Channels by
Async Tasks with Django ChannelsAsync Tasks with Django Channels
Async Tasks with Django ChannelsAlbert O'Connor
2.8K views62 slides
Kharkivpy by
KharkivpyKharkivpy
KharkivpyIhor Harahatyi
299 views23 slides
Django channels by
Django channelsDjango channels
Django channelsAndy Dai
3.1K views27 slides
Asynchronous PHP and Real-time Messaging by
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingSteve Rhoades
19.2K views45 slides

Viewers also liked(6)

Real time web_apps_pycon2012-v1 by Avinash Prasad
Real time web_apps_pycon2012-v1Real time web_apps_pycon2012-v1
Real time web_apps_pycon2012-v1
Avinash Prasad1.4K views
PyConMY 2016 Django Channels by Kok Hoor Chew
PyConMY 2016 Django ChannelsPyConMY 2016 Django Channels
PyConMY 2016 Django Channels
Kok Hoor Chew1.7K views
Async Tasks with Django Channels by Albert O'Connor
Async Tasks with Django ChannelsAsync Tasks with Django Channels
Async Tasks with Django Channels
Albert O'Connor2.8K views
Django channels by Andy Dai
Django channelsDjango channels
Django channels
Andy Dai3.1K views
Asynchronous PHP and Real-time Messaging by Steve Rhoades
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time Messaging
Steve Rhoades19.2K views

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

Writing Portable WebSockets in Java by
Writing Portable WebSockets in JavaWriting Portable WebSockets in Java
Writing Portable WebSockets in Javajfarcand
1.9K views106 slides
Deadly pixels - NSC 2013 by
Deadly pixels - NSC 2013Deadly pixels - NSC 2013
Deadly pixels - NSC 2013Saumil Shah
6.5K views27 slides
Usenix LISA 2012 - Choosing a Proxy by
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyLeif Hedstrom
7.7K views61 slides
Intro to Rails by
Intro to RailsIntro to Rails
Intro to Railslvrubygroup
459 views32 slides
XSS Without Browser by
XSS Without BrowserXSS Without Browser
XSS Without Browserkosborn
3.4K views10 slides
Whats Ajax Cheatsheet by
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet51 lecture
216 views1 slide

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

Writing Portable WebSockets in Java by jfarcand
Writing Portable WebSockets in JavaWriting Portable WebSockets in Java
Writing Portable WebSockets in Java
jfarcand1.9K views
Deadly pixels - NSC 2013 by Saumil Shah
Deadly pixels - NSC 2013Deadly pixels - NSC 2013
Deadly pixels - NSC 2013
Saumil Shah6.5K views
Usenix LISA 2012 - Choosing a Proxy by Leif Hedstrom
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a Proxy
Leif Hedstrom7.7K views
XSS Without Browser by kosborn
XSS Without BrowserXSS Without Browser
XSS Without Browser
kosborn3.4K views
Whats Ajax Cheatsheet by 51 lecture
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet
51 lecture216 views
Whats Ajax Cheatsheet by 51 lecture
Whats Ajax CheatsheetWhats Ajax Cheatsheet
Whats Ajax Cheatsheet
51 lecture132 views
Fisl - Deployment by Fabio Akita
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
Fabio Akita934 views
Understanding the Rails web model and scalability options by .toster
Understanding the Rails web model and scalability optionsUnderstanding the Rails web model and scalability options
Understanding the Rails web model and scalability options
.toster749 views
Toster - Understanding the Rails Web Model and Scalability Options by Fabio Akita
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
Fabio Akita4.4K views
Why Node.js by guileen
Why Node.jsWhy Node.js
Why Node.js
guileen2.9K views
Why Nodejs Guilin Shanghai by Jackson Tian
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
Jackson Tian669 views
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony by Kyle Drake
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
Kyle Drake9.7K views
Sparklife - Life In The Trenches With Spark by Ian Pointer
Sparklife - Life In The Trenches With SparkSparklife - Life In The Trenches With Spark
Sparklife - Life In The Trenches With Spark
Ian Pointer595 views
Developing realtime apps with Drupal and NodeJS by drupalcampest
Developing realtime apps with Drupal and NodeJS Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS
drupalcampest9.8K views
Open innovation in software means Open Source (2011 remix) by Bertrand Delacretaz
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 by jasfog
Your java script libraryYour java script library
Your java script library
jasfog364 views

More from err

Inside GitHub by
Inside GitHubInside GitHub
Inside GitHuberr
69.1K views163 slides
Git: The Lean, Mean, Distributed Machine by
Git: The Lean, Mean, Distributed MachineGit: The Lean, Mean, Distributed Machine
Git: The Lean, Mean, Distributed Machineerr
6.4K views139 slides
Kings of Code 2009 by
Kings of Code 2009Kings of Code 2009
Kings of Code 2009err
1.1K views139 slides
Forbidden Fruit: A Taste of Ruby's ParseTree by
Forbidden Fruit: A Taste of Ruby's ParseTreeForbidden Fruit: A Taste of Ruby's ParseTree
Forbidden Fruit: A Taste of Ruby's ParseTreeerr
2K views100 slides
Kickin' Ass with Cache-Fu (without notes) by
Kickin' Ass with Cache-Fu (without notes)Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)err
4.1K views104 slides
Kickin' Ass with Cache-Fu (with notes) by
Kickin' Ass with Cache-Fu (with notes)Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)err
4K views104 slides

More from err(7)

Inside GitHub by err
Inside GitHubInside GitHub
Inside GitHub
err69.1K views
Git: The Lean, Mean, Distributed Machine by err
Git: The Lean, Mean, Distributed MachineGit: The Lean, Mean, Distributed Machine
Git: The Lean, Mean, Distributed Machine
err6.4K views
Kings of Code 2009 by err
Kings of Code 2009Kings of Code 2009
Kings of Code 2009
err1.1K views
Forbidden Fruit: A Taste of Ruby's ParseTree by err
Forbidden Fruit: A Taste of Ruby's ParseTreeForbidden Fruit: A Taste of Ruby's ParseTree
Forbidden Fruit: A Taste of Ruby's ParseTree
err2K views
Kickin' Ass with Cache-Fu (without notes) by err
Kickin' Ass with Cache-Fu (without notes)Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)
err4.1K views
Kickin' Ass with Cache-Fu (with notes) by err
Kickin' Ass with Cache-Fu (with notes)Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)
err4K views
Making and Breaking Web Services with Ruby by err
Making and Breaking Web Services with RubyMaking and Breaking Web Services with Ruby
Making and Breaking Web Services with Ruby
err6.1K views

Recently uploaded

TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors by
TouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective SensorsTouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective Sensors
TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensorssugiuralab
19 views15 slides
1st parposal presentation.pptx by
1st parposal presentation.pptx1st parposal presentation.pptx
1st parposal presentation.pptxi238212
9 views3 slides
Uni Systems for Power Platform.pptx by
Uni Systems for Power Platform.pptxUni Systems for Power Platform.pptx
Uni Systems for Power Platform.pptxUni Systems S.M.S.A.
55 views21 slides
From chaos to control: Managing migrations and Microsoft 365 with ShareGate! by
From chaos to control: Managing migrations and Microsoft 365 with ShareGate!From chaos to control: Managing migrations and Microsoft 365 with ShareGate!
From chaos to control: Managing migrations and Microsoft 365 with ShareGate!sammart93
9 views39 slides
The details of description: Techniques, tips, and tangents on alternative tex... by
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...BookNet Canada
126 views24 slides
Special_edition_innovator_2023.pdf by
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdfWillDavies22
17 views6 slides

Recently uploaded(20)

TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors by sugiuralab
TouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective SensorsTouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective Sensors
TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors
sugiuralab19 views
1st parposal presentation.pptx by i238212
1st parposal presentation.pptx1st parposal presentation.pptx
1st parposal presentation.pptx
i2382129 views
From chaos to control: Managing migrations and Microsoft 365 with ShareGate! by sammart93
From chaos to control: Managing migrations and Microsoft 365 with ShareGate!From chaos to control: Managing migrations and Microsoft 365 with ShareGate!
From chaos to control: Managing migrations and Microsoft 365 with ShareGate!
sammart939 views
The details of description: Techniques, tips, and tangents on alternative tex... by BookNet Canada
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...
BookNet Canada126 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2217 views
Spesifikasi Lengkap ASUS Vivobook Go 14 by Dot Semarang
Spesifikasi Lengkap ASUS Vivobook Go 14Spesifikasi Lengkap ASUS Vivobook Go 14
Spesifikasi Lengkap ASUS Vivobook Go 14
Dot Semarang37 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software257 views
Lilypad @ Labweek, Istanbul, 2023.pdf by Ally339821
Lilypad @ Labweek, Istanbul, 2023.pdfLilypad @ Labweek, Istanbul, 2023.pdf
Lilypad @ Labweek, Istanbul, 2023.pdf
Ally3398219 views
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 by IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
Data-centric AI and the convergence of data and model engineering: opportunit... by Paolo Missier
Data-centric AI and the convergence of data and model engineering:opportunit...Data-centric AI and the convergence of data and model engineering:opportunit...
Data-centric AI and the convergence of data and model engineering: opportunit...
Paolo Missier39 views
handbook for web 3 adoption.pdf by Liveplex
handbook for web 3 adoption.pdfhandbook for web 3 adoption.pdf
handbook for web 3 adoption.pdf
Liveplex22 views
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta19 views

The Real-Time Web (and Other Buzzwords)