SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
APIs That Make Things Happen
                      WebHooks and the Evented Web




came from my previous talk? expecting talk about npr api?
how many are developers? there will be code...
@progrium
                           #webhooks


this is my twitter username and a handy hashtag if you want to reference this talk
quickly, about me
quickly, about me
What are webhooks?



can’t get very far without addressing this, since i’m sure most of you have no idea
what webhooks are. they’re the basis of this talk.
When something happens, perform
             HTTP POST with relevant data to a URL
                   that the user gives you.




webhooks are event callbacks over http. the server/app calls your URL. that’s it.
it’s not a protocol, there is no standard. it’s more like ajax: just a useful design pattern.
command line: pipes. we used talk about the equivalent of pipes on the web and people say RSS! and I
say nooo.... it’s something else. (webhooks)
Input                                                             Output
                                              Program




pipes are amazing in their simplicity. it’s all from a bit of infrastructure involving input and output
STDIN                                                     STDOUT
                                           Program




                                                                   STDERR



stdin, stdout were available to reroute wherever the user wanted
most common use was chaining commands together: piping
feedback loop, which is the key to emergent systems
xargs
                                                                               wget
                  echo
                                                            mail

           grep
                                          wc

                                                                         cat

so you had all these simple little programs, that might not even be useful alone
cat




                                xargs
                                               wget
                  echo
                                        mail

           grep
                                  wc




string them together...
cat           grep




             xargs
                                   wget
echo
                            mail


               wc
cat                 grep               mail




                                     xargs
                                                                       wget
                echo



                                        wc




and you have something more useful than just the sum of the parts.
remember this because we’ll come back to it.
STDIN
                                             Program




but it doesn’t work without the output. it just breaks.
API
                                          Web App




unfortunately that’s how the web is today.
we can talk to web apps, but they really can’t talk to us.
its as if you had a telephone system where you could only make calls, but never receive them.
unacceptable.
API                                                               Events
                                            Web App




it’s not that they can’t, they just don’t. we need to start placing event hooks in them.
if this were as ubiquitous as apis are today, we would have something amazing:
Event-driven programming
                          at the web ecosystem level




event-driven programming...
hence:
Evented Web



a web where when something happens in one system, something can happen in another:
trivially. you’ve all seen twitter to facebook (or vice versa). that would almost not be worth
making a service for, it would just be a line of code. let me show you with another example:
function clickHandler() {
    alert("Click!");
}

element.addEventListener('click', clickHandler);
element.addEventListener('click', function() {
    alert("Click!");
});
element.addEventListener('click', function() {
    var name = $("input#name").val();
    if (name != "") {
        alert("Hello, " + name);
    }
});
element.addEventListener('click', function(event) {
    var name = $("input#name").val();
    if (name != "") {
        alert("Hello, " + name + ". " +
            "I'm " + event.target.id);
    }
});
twitter.addEventListener('newfollower', function(event) {
    var twitterUser = event.follower;
    var friends = facebook.getFriendsNames();

     if (twitterUser['name'] in friends) {
         twitter.follow(twitterUser);
     }
})
twitter.addEventListener('newfollower', function(event) {
    var twitterUser = event.follower;
    var friends = facebook.getFriendsNames();

     if (twitterUser['name'] in friends) {
         twitter.follow(twitterUser);
     }
})
twitter.addEventListener('newfollower', function(event) {
    var twitterUser = event.follower;
    var friends = facebook.getFriendsNames();

     if (twitterUser['name'] in friends) {
         twitter.follow(twitterUser);
     }
})
twitter.addEventListener('newfollower', function(event) {
    var twitterUser = event.follower;
    var friends = facebook.getFriendsNames();

     if (twitterUser['name'] in friends) {
         twitter.follow(twitterUser);
     }
})
twitter.addEventListener('newfollower', function(event) {
    var twitterUser = event.follower;
    var friends = facebook.getFriendsNames();

     if (twitterUser['name'] in friends) {
         twitter.follow(twitterUser);

     } else if (twitterUser['following'] > 1000 &&
         twitterUser['followers'] < twitterUser['following'] / 2) {

         twitter.block(twitterUser);
     }
})
twitter.addEventListener('newfollower',
v                             eventHandler);
twitter.addWebHook('newfollower',
          'http://example.com/eventhandler');
twitter.addWebHook('friendupdate',
           'http://example.com/eventhandler');




some other events you could imagine writing handlers for
twitter.addWebHook('directmessage',
          'http://example.com/eventhandler');
twitter.addWebHook('myupdate',
           'http://example.com/eventhandler');




makes twitter an even more powerful platform than it is
MAILHOOKS
                         DEMO


let’s see this in action. mailhooks was one of the first “adapters” i built for the evented web.
in the evented web ecosystem, you can have very simple web services like this because
integrating them together with webhooks is very easy... just like pipes led to simple
programs.
facebook should be added. pop quiz! what do you get when you combine facebook and
webhooks?
facehooks?
MORE DEMOS
                          (and then code)




create postbin, setup/show tender, pivotal tracker, twilio.
demo clickhooks with postbin and and then show the code.
http://2.latest.scriptletsapp.appspot.com/1w47Cs/run
webhooks are simple as you saw. their simplicity affords them to be used as a simple building
block in slightly more complex systems like pubsubhubbub.
basically real-time feeds using webhooks as the core delivery mechanic.
a specific use case of webhooks for new content updates.
brad is here, he can tell you more...
all these sites publish content with pubsubhubbub, meaning they all effectively have
webhooks for new content events... as a result, you can consume their content in realtime.
simple mechanics, if done right, yield rich, emergent dynamics.
the emergent system with webhooks is the evented web.
The Evented Web
                               Programmable Web 2.0


                                       Web APIs




                  Event Triggers   Handler Scripts
                             WebHooks

how i think of the evented web: at the top, you have key to pw 1.0.
then webhooks, consist of two parts: triggers of events in apps... and handler scripts.
the webhooks are usually the scripts, but i use it to talk about that hole side: trigger and
handler.
“In computer programming, hooking is
           a technique used to alter or augment the
           behavior of [a program], often without
           having access to its source code.”




there’s a reason why it’s hooks, not callbacks or just “events”.
i wanted to frame it with this idea. you can feed the result of a hook back into the system.
this lets you build plugin systems etc that change behavior of web apps.
here’s a video explaining hookpress, a plugin for wordpress that exposes their internal
hooks as webhooks and what that can do.
matt mullenweg realized this is how wordpress.com can have user plugins like
the open source version... this is now deployed on wordpress.com
The Evented Web
                              Programmable Web 2.0


                                      Web APIs




                  Event Triggers   Handler Scripts
                             WebHooks

i focus on the trigger side at talks since that’s the hard part:
getting people to put in event triggers.
as an ecosystem you need infrastructure for this other side of handler scripts.
twitter.addWebHook('newfollower',
           'http://example.com/eventhandler');




to the app that triggers it though, it doesn’t matter.
the idea is the handler is a URL...
twitter.addEventListener('newfollower', function(event) {
       var twitterUser = event.follower;
       var friends = facebook.getFriendsNames();

         if (twitterUser['name'] in friends) {
             twitter.follow(twitterUser);

         } else if (twitterUser['following'] > 1000 &&
             twitterUser['followers'] < twitterUser['following'] / 2) {

               twitter.block(twitterUser);
         }
   })




but this code has to live somewhere. i’ll come back to this, but i wanted to touch on
a point about this indirection via url
twitter.addWebHook('newfollower',
           'http://example.com/eventhandler');




because it’s a URL you can just assume its a web app/script on the other end, which is *key* to why
the evented web is about http webhooks instead of something like xmpp. it turns out...
HTTP is the easiest
               way to trigger code



since cgi in 1993, http is essentially rpc. in fact, its the most widely understood/used rpc in
the world. now with everything in the cloud, web development being so popular, it’s the
easiest way to get code to run. write a php script or ruby script. put it in the cloud for free,
instantly. where? there’s free php hosting, app engine, heroku ... but we can make it better.
if writing webhooks is to be ubiquitous, we need to make it EASY to write them. you don’t
need all of app engine to write a simple little hook script. so i imagined something like a
pastebin site... only it runs code.
so i built scriptlets, which is basically that. use php, python, javascript to write simple little
scripts hosted in the cloud. write it, save it, get a url to run it. perfect for webhook handler
scripts.
here’s a wrapper that makes postbin work for pubsubhubbub
here’s a script used with hookpress to add comment notifications via notify.io to wordpress
this is the code i used for the clickhooks demo. you can see how simple it is, notify.io does
most of the work.
notify.io is a useful part of the ecosystem. it solves the notification part.
“how do you get events to the desktop?” pubsubhubbub for example
also a gateway drug for webhooks...
NOTIFY.IO
                             DEMO


intro. twitter DM example. outlets. curl. NioCallback. DrEval...
What are webhooks?
                         Event callbacks over HTTP
                                           enabling the Evented Web




The Evented Web blends our existing ecosystem of web APIs with event-driven programming,
creating a web that is both more programmable and real-time.
Infrastructure as
                      Education


i’m heavily interested in education -- hacker dojo, experiment in education.
but also i think there are some huge lessons to be learned from hacker culture.
one idea is this idea of infrastructure as education. OLPC -- not enough? no, it is.
hole in the wall experiment. put a computer in a small city in india and see what happens.
turns out they learn and teach themselves how to use the computer. no guidance at all.
"We need a faster processor and a better mouse."
“Creating content is not what's
          important. What is important is
          infrastructure and access.”
                                                    —Sugata Mitra




Montesorri
Natural language
Google.
taking this idea, and returning to programming...
maybe wrong generation here, but many of the great programmers i know started
on something like these
programming was almost unavoidable on them.
i love this screen.
Programming is discovered.




today, the closest thing is myspace: css hacks to pimp your profile.
but while this IS programming, it’s doesn’t convey the POWER of programming.
its not enough for people to “get” programming and want to become a programmer, BUT
myspace style programming has relevance, expression, and... view source
Programming is discovered.




today, the closest thing is myspace: css hacks to pimp your profile.
but while this IS programming, it’s doesn’t convey the POWER of programming.
its not enough for people to “get” programming and want to become a programmer, BUT
myspace style programming has relevance, expression, and... view source
view page source is a huge reason why there are so many web people (esp frontend)
browser as a sandbox to explore and learn.
unfortunately its not the cool stuff. it’s not the stuff that changes the world.
twitter.addEventListener('newfollower', function(event) {
      var twitterUser = event.follower;
      var friends = facebook.getFriendsNames();

        if (twitterUser['name'] in friends) {
            twitter.follow(twitterUser);

        } else if (twitterUser['following'] > 1000 &&
            twitterUser['followers'] < twitterUser['following'] / 2) {

              twitter.block(twitterUser);
        }
  })




evented web gives us a sandbox to play with code that actually DOES cool and important things that
are relevant to us. making the apps we use *do more* in a very personal and expressive way.
i think this will help make programming discoverable again, which i think is sorely needed.
The world is trending towards
     being programmable




USA Today on CES: “You’re going to be hard-pressed to find a new gadget or gizmo in 2010
that doesn’t also connect you to web services.” That’s just a step away from having apis and
hooks. Imagine a world where everything has an API and webhooks. Programmers can use it
all as building blocks, literally programming the world around them.
@progrium
               #webhooks


questions...

Weitere ähnliche Inhalte

Was ist angesagt?

PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service WorkerAnna Su
 
I Heard React Was Good
I Heard React Was GoodI Heard React Was Good
I Heard React Was GoodFITC
 
The Present Future of OAuth
The Present Future of OAuthThe Present Future of OAuth
The Present Future of OAuthMichael Bleigh
 
The MetaCPAN VM Part II (Using the VM)
The MetaCPAN VM Part II (Using the VM)The MetaCPAN VM Part II (Using the VM)
The MetaCPAN VM Part II (Using the VM)Olaf Alders
 
Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...
Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...
Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...Nicholas Jansma
 
IS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENT
IS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENTIS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENT
IS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENTIsmail Elshareef
 
Java to Golang: An intro by Ryan Dawson Seldon.io
Java to Golang: An intro by Ryan Dawson Seldon.ioJava to Golang: An intro by Ryan Dawson Seldon.io
Java to Golang: An intro by Ryan Dawson Seldon.ioMauricio (Salaboy) Salatino
 
Evented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHPEvented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHPmarkstory
 
Migrating existing monolith to serverless in 8 steps
Migrating existing monolith to serverless in 8 stepsMigrating existing monolith to serverless in 8 steps
Migrating existing monolith to serverless in 8 stepsYan Cui
 
Build your-own-instagram-filters-with-javascript-202-335 (1)
Build your-own-instagram-filters-with-javascript-202-335 (1)Build your-own-instagram-filters-with-javascript-202-335 (1)
Build your-own-instagram-filters-with-javascript-202-335 (1)Thinkful
 
Offline Webapps
Offline Webapps Offline Webapps
Offline Webapps mnitchie
 
Idea2app
Idea2appIdea2app
Idea2appFlumes
 
Forensic Tools for In-Depth Performance Investigations
Forensic Tools for In-Depth Performance InvestigationsForensic Tools for In-Depth Performance Investigations
Forensic Tools for In-Depth Performance InvestigationsNicholas Jansma
 
Continuous integration with Git & CI Joe
Continuous integration with Git & CI JoeContinuous integration with Git & CI Joe
Continuous integration with Git & CI JoeShawn Price
 

Was ist angesagt? (20)

Secure my ng-app
Secure my ng-appSecure my ng-app
Secure my ng-app
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service Worker
 
I Heard React Was Good
I Heard React Was GoodI Heard React Was Good
I Heard React Was Good
 
#PDR15 - PebbleKit iOS 3.0
#PDR15 - PebbleKit iOS 3.0#PDR15 - PebbleKit iOS 3.0
#PDR15 - PebbleKit iOS 3.0
 
The Present Future of OAuth
The Present Future of OAuthThe Present Future of OAuth
The Present Future of OAuth
 
Mangling
Mangling Mangling
Mangling
 
The MetaCPAN VM Part II (Using the VM)
The MetaCPAN VM Part II (Using the VM)The MetaCPAN VM Part II (Using the VM)
The MetaCPAN VM Part II (Using the VM)
 
Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...
Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...
Make It Fast - Using Modern Browser Performance APIs to Monitor and Improve t...
 
IS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENT
IS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENTIS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENT
IS YOUR WIDGET FAST? FIVE BEST PRACTICES TO FASTER EMBEDDABLE CONTENT
 
Java to Golang: An intro by Ryan Dawson Seldon.io
Java to Golang: An intro by Ryan Dawson Seldon.ioJava to Golang: An intro by Ryan Dawson Seldon.io
Java to Golang: An intro by Ryan Dawson Seldon.io
 
Evented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHPEvented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHP
 
Migrating existing monolith to serverless in 8 steps
Migrating existing monolith to serverless in 8 stepsMigrating existing monolith to serverless in 8 steps
Migrating existing monolith to serverless in 8 steps
 
Build your-own-instagram-filters-with-javascript-202-335 (1)
Build your-own-instagram-filters-with-javascript-202-335 (1)Build your-own-instagram-filters-with-javascript-202-335 (1)
Build your-own-instagram-filters-with-javascript-202-335 (1)
 
Meet with Meteor
Meet with MeteorMeet with Meteor
Meet with Meteor
 
Attribute actions
Attribute actionsAttribute actions
Attribute actions
 
Offline Webapps
Offline Webapps Offline Webapps
Offline Webapps
 
React in production
React in productionReact in production
React in production
 
Idea2app
Idea2appIdea2app
Idea2app
 
Forensic Tools for In-Depth Performance Investigations
Forensic Tools for In-Depth Performance InvestigationsForensic Tools for In-Depth Performance Investigations
Forensic Tools for In-Depth Performance Investigations
 
Continuous integration with Git & CI Joe
Continuous integration with Git & CI JoeContinuous integration with Git & CI Joe
Continuous integration with Git & CI Joe
 

Ähnlich wie APIs That Make Things Happen

Madison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small TeamsMadison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small TeamsJoe Ferguson
 
ZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small TeamsZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small TeamsJoe Ferguson
 
Midwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamMidwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamJoe Ferguson
 
Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009pauldix
 
Web Hooks Google Tech Talk
Web Hooks Google Tech TalkWeb Hooks Google Tech Talk
Web Hooks Google Tech TalkJeff Lindsay
 
Web Hooks And The Programmable World Of Tomorrow
Web Hooks And The Programmable World Of TomorrowWeb Hooks And The Programmable World Of Tomorrow
Web Hooks And The Programmable World Of TomorrowGoogleTecTalks
 
4007655 introduction-to-javascript
4007655 introduction-to-javascript4007655 introduction-to-javascript
4007655 introduction-to-javascriptVikash Chandra
 
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over WebsocketIntroduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocketsametmax
 
Incredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and GeneratorsIncredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and Generatorsdantleech
 
Google Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, PlatformGoogle Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, PlatformPamela Fox
 
Simple Social Networking with Ruby on Rails
Simple Social Networking with Ruby on RailsSimple Social Networking with Ruby on Rails
Simple Social Networking with Ruby on Railsjhenry
 
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...Paul Jensen
 
Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Richard Banks
 
PATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event ModelPATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event ModelMichael Heron
 
Jeff Lindsay: Building Public Infrastructure with Autosustainable Services
Jeff Lindsay: Building Public Infrastructure with Autosustainable ServicesJeff Lindsay: Building Public Infrastructure with Autosustainable Services
Jeff Lindsay: Building Public Infrastructure with Autosustainable Servicesit-people
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipseanshunjain
 
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)VMware Tanzu
 

Ähnlich wie APIs That Make Things Happen (20)

Madison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small TeamsMadison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small Teams
 
ZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small TeamsZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small Teams
 
Midwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamMidwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small team
 
Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009
 
Web Hooks Google Tech Talk
Web Hooks Google Tech TalkWeb Hooks Google Tech Talk
Web Hooks Google Tech Talk
 
Web Hooks And The Programmable World Of Tomorrow
Web Hooks And The Programmable World Of TomorrowWeb Hooks And The Programmable World Of Tomorrow
Web Hooks And The Programmable World Of Tomorrow
 
4007655 introduction-to-javascript
4007655 introduction-to-javascript4007655 introduction-to-javascript
4007655 introduction-to-javascript
 
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over WebsocketIntroduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
 
Incredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and GeneratorsIncredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and Generators
 
Google Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, PlatformGoogle Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, Platform
 
Simple Social Networking with Ruby on Rails
Simple Social Networking with Ruby on RailsSimple Social Networking with Ruby on Rails
Simple Social Networking with Ruby on Rails
 
Mobile optimization
Mobile optimizationMobile optimization
Mobile optimization
 
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
 
Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016
 
Introduce Django
Introduce DjangoIntroduce Django
Introduce Django
 
PATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event ModelPATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event Model
 
Jeff Lindsay: Building Public Infrastructure with Autosustainable Services
Jeff Lindsay: Building Public Infrastructure with Autosustainable ServicesJeff Lindsay: Building Public Infrastructure with Autosustainable Services
Jeff Lindsay: Building Public Infrastructure with Autosustainable Services
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipse
 
Asynchronyin net
Asynchronyin netAsynchronyin net
Asynchronyin net
 
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
 

Mehr von Jeff Lindsay

Hack Party SHDH Lightning Talk
Hack Party SHDH Lightning TalkHack Party SHDH Lightning Talk
Hack Party SHDH Lightning TalkJeff Lindsay
 
Building an Event-driven Web @ Impact
Building an Event-driven Web @ ImpactBuilding an Event-driven Web @ Impact
Building an Event-driven Web @ ImpactJeff Lindsay
 
Evented Web @ Ignite
Evented Web @ IgniteEvented Web @ Ignite
Evented Web @ IgniteJeff Lindsay
 
Hacker Dojo Origins
Hacker Dojo OriginsHacker Dojo Origins
Hacker Dojo OriginsJeff Lindsay
 
Hacker Dojo @ Google
Hacker Dojo @ GoogleHacker Dojo @ Google
Hacker Dojo @ GoogleJeff Lindsay
 
Creating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game CommunityCreating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game CommunityJeff Lindsay
 
Dissolving Problems
Dissolving ProblemsDissolving Problems
Dissolving ProblemsJeff Lindsay
 
SHDH Retrospective, Part 2
SHDH Retrospective, Part 2SHDH Retrospective, Part 2
SHDH Retrospective, Part 2Jeff Lindsay
 
SHDH Retrospective, Part 1
SHDH Retrospective, Part 1SHDH Retrospective, Part 1
SHDH Retrospective, Part 1Jeff Lindsay
 
Superglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the WebSuperglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the WebJeff Lindsay
 
Beyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and MoreBeyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and MoreJeff Lindsay
 
Web Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of TomorrowWeb Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of TomorrowJeff Lindsay
 

Mehr von Jeff Lindsay (15)

Hack Party SHDH Lightning Talk
Hack Party SHDH Lightning TalkHack Party SHDH Lightning Talk
Hack Party SHDH Lightning Talk
 
NullMQ @ PDX
NullMQ @ PDXNullMQ @ PDX
NullMQ @ PDX
 
Building an Event-driven Web @ Impact
Building an Event-driven Web @ ImpactBuilding an Event-driven Web @ Impact
Building an Event-driven Web @ Impact
 
Evented Web @ Ignite
Evented Web @ IgniteEvented Web @ Ignite
Evented Web @ Ignite
 
Hacker Dojo Origins
Hacker Dojo OriginsHacker Dojo Origins
Hacker Dojo Origins
 
Dinos
DinosDinos
Dinos
 
Hacker Dojo @ Google
Hacker Dojo @ GoogleHacker Dojo @ Google
Hacker Dojo @ Google
 
Creating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game CommunityCreating + Nurturing Your Indie Game Community
Creating + Nurturing Your Indie Game Community
 
Dissolving Problems
Dissolving ProblemsDissolving Problems
Dissolving Problems
 
SHDH Retrospective, Part 2
SHDH Retrospective, Part 2SHDH Retrospective, Part 2
SHDH Retrospective, Part 2
 
SHDH Retrospective, Part 1
SHDH Retrospective, Part 1SHDH Retrospective, Part 1
SHDH Retrospective, Part 1
 
Superglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the WebSuperglue: Web Hooks and the Future of the Web
Superglue: Web Hooks and the Future of the Web
 
Using Web Hooks
Using Web HooksUsing Web Hooks
Using Web Hooks
 
Beyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and MoreBeyond Mashups: Service Integration and More
Beyond Mashups: Service Integration and More
 
Web Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of TomorrowWeb Hooks and the Programmable World of Tomorrow
Web Hooks and the Programmable World of Tomorrow
 

Kürzlich hochgeladen

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Kürzlich hochgeladen (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

APIs That Make Things Happen

  • 1. APIs That Make Things Happen WebHooks and the Evented Web came from my previous talk? expecting talk about npr api? how many are developers? there will be code...
  • 2. @progrium #webhooks this is my twitter username and a handy hashtag if you want to reference this talk
  • 5. What are webhooks? can’t get very far without addressing this, since i’m sure most of you have no idea what webhooks are. they’re the basis of this talk.
  • 6. When something happens, perform HTTP POST with relevant data to a URL that the user gives you. webhooks are event callbacks over http. the server/app calls your URL. that’s it. it’s not a protocol, there is no standard. it’s more like ajax: just a useful design pattern.
  • 7. command line: pipes. we used talk about the equivalent of pipes on the web and people say RSS! and I say nooo.... it’s something else. (webhooks)
  • 8. Input Output Program pipes are amazing in their simplicity. it’s all from a bit of infrastructure involving input and output
  • 9. STDIN STDOUT Program STDERR stdin, stdout were available to reroute wherever the user wanted most common use was chaining commands together: piping feedback loop, which is the key to emergent systems
  • 10. xargs wget echo mail grep wc cat so you had all these simple little programs, that might not even be useful alone
  • 11. cat xargs wget echo mail grep wc string them together...
  • 12. cat grep xargs wget echo mail wc
  • 13. cat grep mail xargs wget echo wc and you have something more useful than just the sum of the parts. remember this because we’ll come back to it.
  • 14. STDIN Program but it doesn’t work without the output. it just breaks.
  • 15. API Web App unfortunately that’s how the web is today. we can talk to web apps, but they really can’t talk to us. its as if you had a telephone system where you could only make calls, but never receive them. unacceptable.
  • 16. API Events Web App it’s not that they can’t, they just don’t. we need to start placing event hooks in them. if this were as ubiquitous as apis are today, we would have something amazing:
  • 17. Event-driven programming at the web ecosystem level event-driven programming... hence:
  • 18. Evented Web a web where when something happens in one system, something can happen in another: trivially. you’ve all seen twitter to facebook (or vice versa). that would almost not be worth making a service for, it would just be a line of code. let me show you with another example:
  • 19. function clickHandler() { alert("Click!"); } element.addEventListener('click', clickHandler);
  • 21. element.addEventListener('click', function() { var name = $("input#name").val(); if (name != "") { alert("Hello, " + name); } });
  • 22. element.addEventListener('click', function(event) { var name = $("input#name").val(); if (name != "") { alert("Hello, " + name + ". " + "I'm " + event.target.id); } });
  • 23. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } })
  • 24. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } })
  • 25. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } })
  • 26. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } })
  • 27. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } else if (twitterUser['following'] > 1000 && twitterUser['followers'] < twitterUser['following'] / 2) { twitter.block(twitterUser); } })
  • 29. twitter.addWebHook('newfollower', 'http://example.com/eventhandler');
  • 30. twitter.addWebHook('friendupdate', 'http://example.com/eventhandler'); some other events you could imagine writing handlers for
  • 31. twitter.addWebHook('directmessage', 'http://example.com/eventhandler');
  • 32. twitter.addWebHook('myupdate', 'http://example.com/eventhandler'); makes twitter an even more powerful platform than it is
  • 33. MAILHOOKS DEMO let’s see this in action. mailhooks was one of the first “adapters” i built for the evented web. in the evented web ecosystem, you can have very simple web services like this because integrating them together with webhooks is very easy... just like pipes led to simple programs.
  • 34. facebook should be added. pop quiz! what do you get when you combine facebook and webhooks?
  • 36. MORE DEMOS (and then code) create postbin, setup/show tender, pivotal tracker, twilio. demo clickhooks with postbin and and then show the code. http://2.latest.scriptletsapp.appspot.com/1w47Cs/run
  • 37. webhooks are simple as you saw. their simplicity affords them to be used as a simple building block in slightly more complex systems like pubsubhubbub.
  • 38. basically real-time feeds using webhooks as the core delivery mechanic. a specific use case of webhooks for new content updates. brad is here, he can tell you more...
  • 39. all these sites publish content with pubsubhubbub, meaning they all effectively have webhooks for new content events... as a result, you can consume their content in realtime.
  • 40. simple mechanics, if done right, yield rich, emergent dynamics. the emergent system with webhooks is the evented web.
  • 41. The Evented Web Programmable Web 2.0 Web APIs Event Triggers Handler Scripts WebHooks how i think of the evented web: at the top, you have key to pw 1.0. then webhooks, consist of two parts: triggers of events in apps... and handler scripts. the webhooks are usually the scripts, but i use it to talk about that hole side: trigger and handler.
  • 42. “In computer programming, hooking is a technique used to alter or augment the behavior of [a program], often without having access to its source code.” there’s a reason why it’s hooks, not callbacks or just “events”. i wanted to frame it with this idea. you can feed the result of a hook back into the system. this lets you build plugin systems etc that change behavior of web apps.
  • 43. here’s a video explaining hookpress, a plugin for wordpress that exposes their internal hooks as webhooks and what that can do. matt mullenweg realized this is how wordpress.com can have user plugins like the open source version... this is now deployed on wordpress.com
  • 44. The Evented Web Programmable Web 2.0 Web APIs Event Triggers Handler Scripts WebHooks i focus on the trigger side at talks since that’s the hard part: getting people to put in event triggers. as an ecosystem you need infrastructure for this other side of handler scripts.
  • 45. twitter.addWebHook('newfollower', 'http://example.com/eventhandler'); to the app that triggers it though, it doesn’t matter. the idea is the handler is a URL...
  • 46. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } else if (twitterUser['following'] > 1000 && twitterUser['followers'] < twitterUser['following'] / 2) { twitter.block(twitterUser); } }) but this code has to live somewhere. i’ll come back to this, but i wanted to touch on a point about this indirection via url
  • 47. twitter.addWebHook('newfollower', 'http://example.com/eventhandler'); because it’s a URL you can just assume its a web app/script on the other end, which is *key* to why the evented web is about http webhooks instead of something like xmpp. it turns out...
  • 48. HTTP is the easiest way to trigger code since cgi in 1993, http is essentially rpc. in fact, its the most widely understood/used rpc in the world. now with everything in the cloud, web development being so popular, it’s the easiest way to get code to run. write a php script or ruby script. put it in the cloud for free, instantly. where? there’s free php hosting, app engine, heroku ... but we can make it better.
  • 49. if writing webhooks is to be ubiquitous, we need to make it EASY to write them. you don’t need all of app engine to write a simple little hook script. so i imagined something like a pastebin site... only it runs code.
  • 50. so i built scriptlets, which is basically that. use php, python, javascript to write simple little scripts hosted in the cloud. write it, save it, get a url to run it. perfect for webhook handler scripts.
  • 51. here’s a wrapper that makes postbin work for pubsubhubbub
  • 52. here’s a script used with hookpress to add comment notifications via notify.io to wordpress
  • 53. this is the code i used for the clickhooks demo. you can see how simple it is, notify.io does most of the work.
  • 54. notify.io is a useful part of the ecosystem. it solves the notification part. “how do you get events to the desktop?” pubsubhubbub for example also a gateway drug for webhooks...
  • 55. NOTIFY.IO DEMO intro. twitter DM example. outlets. curl. NioCallback. DrEval...
  • 56. What are webhooks? Event callbacks over HTTP enabling the Evented Web The Evented Web blends our existing ecosystem of web APIs with event-driven programming, creating a web that is both more programmable and real-time.
  • 57. Infrastructure as Education i’m heavily interested in education -- hacker dojo, experiment in education. but also i think there are some huge lessons to be learned from hacker culture. one idea is this idea of infrastructure as education. OLPC -- not enough? no, it is.
  • 58. hole in the wall experiment. put a computer in a small city in india and see what happens. turns out they learn and teach themselves how to use the computer. no guidance at all. "We need a faster processor and a better mouse."
  • 59. “Creating content is not what's important. What is important is infrastructure and access.” —Sugata Mitra Montesorri Natural language Google. taking this idea, and returning to programming...
  • 60. maybe wrong generation here, but many of the great programmers i know started on something like these
  • 61. programming was almost unavoidable on them. i love this screen.
  • 62. Programming is discovered. today, the closest thing is myspace: css hacks to pimp your profile. but while this IS programming, it’s doesn’t convey the POWER of programming. its not enough for people to “get” programming and want to become a programmer, BUT myspace style programming has relevance, expression, and... view source
  • 63. Programming is discovered. today, the closest thing is myspace: css hacks to pimp your profile. but while this IS programming, it’s doesn’t convey the POWER of programming. its not enough for people to “get” programming and want to become a programmer, BUT myspace style programming has relevance, expression, and... view source
  • 64. view page source is a huge reason why there are so many web people (esp frontend) browser as a sandbox to explore and learn. unfortunately its not the cool stuff. it’s not the stuff that changes the world.
  • 65. twitter.addEventListener('newfollower', function(event) { var twitterUser = event.follower; var friends = facebook.getFriendsNames(); if (twitterUser['name'] in friends) { twitter.follow(twitterUser); } else if (twitterUser['following'] > 1000 && twitterUser['followers'] < twitterUser['following'] / 2) { twitter.block(twitterUser); } }) evented web gives us a sandbox to play with code that actually DOES cool and important things that are relevant to us. making the apps we use *do more* in a very personal and expressive way. i think this will help make programming discoverable again, which i think is sorely needed.
  • 66. The world is trending towards being programmable USA Today on CES: “You’re going to be hard-pressed to find a new gadget or gizmo in 2010 that doesn’t also connect you to web services.” That’s just a step away from having apis and hooks. Imagine a world where everything has an API and webhooks. Programmers can use it all as building blocks, literally programming the world around them.
  • 67. @progrium #webhooks questions...