SlideShare a Scribd company logo
1 of 128
Download to read offline
Using web services
in JavaScript.




                                 Chris&an Heilmann
           Fron0rends, Warsaw, Poland, October 2010
What is the web?
Was ist das Web?


Data + Interfaces
Lots of yummy,
yummy data.
If a company has a
bit of brains these
days then they build
on and release an
API for their
services.
Company benefits:
People bring your data and
services into environments
you could never reach.
Our benefits:
solve problems and get
information without buying
data or writing code.
Solving 2 problems.
Problem #1:
Distance between
two places on Earth.
Sometimes it would
be good to know
the distance
between two places
on Earth.
For this you could
use any mapping
service and
navigate from one
to the other.
But what if you
want to have that as
plain information?
Battle Plan:
1.   Find the location of the two places
     on Earth
2.   Calculate the distance.
Yahoo GeoPlanet is
a data set that has
information about
the location of
places on Earth.
Yahoo GeoPlanet is
a data set that has
information about
the location of
places on Earth.
 http://developer.yahoo.com/geo/geoplanet/
http://where.yahooapis.com/v1/places.q('warsaw')?
appid={appid}&format=json
This gives us the
latitude and
longitude of both
places...
...but how do we
calculate the
distance?
http://www.movable-type.co.uk/scripts/latlong-
               vincenty.html
Putting it all
together...
Putting it all
together...
Problem #1:
Foreign Tweets.
Twitter supports
different languages,
but has no
translation service.
Google has a
translation service
though.
Battle Plan:
1.   Investigate Twitter’s search API and
     Google’s translation API and if
     needed, get keys.
2.   Get the results from Twitter for a
     certain search.
3.   Loop over the results, see which
     ones are not in English, and then
     translate them with the Google
     Translation API.
The solution is very
similar to the other
solution.
It also suffers from
the same issues.
Not fun with JS:
1.   Asynchronous lookups with
     generated script nodes are a pain to
     get right - what if one breaks?
2.   Depending on how many Tweets are
     not in English, you have to hammer
     Google’s translation API which slows
     down your overall app.
Simplifying access.
Using several APIs
in conjunction in
JavaScript is not
fun.
It doesn’t matter if
that is internally or
externally in a
company.
Yahoo had a lot of
these problems...
...which is why they
built YQL to work
around that.
Using YQL, web
services become
databases you can
access like any
other DB.
YQL   http://developer.yahoo.com/yql/console/
YQL    http://developer.yahoo.com/yql/console/




 select {what} from {where}
     where {conditions}
Foreign Tweets?
select text from twitter.search
where q=”ft2010” and
iso_language_code=”pl”
select * from google.translate
where q in (
select text from twitter.search
where q=”ft2010” and
iso_language_code=”pl”
) and target=”en”
Keywords for
Warsaw?
select * from search.web
where query="warsaw"
select abstract from
search.web where
query="warsaw"
select abstract from
search.web(100) where
query="warsaw"
select * from
search.termextract where
context in (
select abstract from
search.web(100) where
query="warsaw"
)
select * from
search.termextract where
context in (
select abstract from
search.web(100) where
query="warsaw"
)
| sort(field="Result")
| unique(field="Result")
Photos of Warsaw?
select * from
flickr.photos.search(50) where
woe_id in (select woeid from
geo.places where
text="warsaw") and
min_taken_date = "2009"
Instead of going
crazy filtering and
sorting in JS...
...use the YQL server
and then have a very
simple JS for
displaying.
Using web services
with YQL in JS.
YQL is a web
service endpoint on
its own...
https://query.yahooapis.com/v1/public/
yql?q={uri-encoded-query}&
format={xml|json}&
diagnostics={true|false}&
callback={function}&
env=store%3A%2F%2Fdatatables.org
%2Falltableswithkeys
As it supports
JSON-P you can use
it with dynamically
created script
nodes.
Special case:
 Scraping




http://www.flickr.com/photos/fdtate/4426760544/
http://www.slideshare.net/cheilmann/reasons-to-be-cheerful-fronteers-2010
select * from html where

url="http://www.slideshare.net/
cheilmann/reasons-to-be-cheerful-
fronteers-2010"

and

xpath="//ol/li/p[contains(.,'http')]"
http://y.ahoo.it/r/ENSPGm
http://lanyrd.com/people/codepo8/
HTML as JSON is
not fun.
JSON-P-X =
HTML as a string in
a JSON-P container!
Using YQL re-use of
web content is very
easy indeed.
Be safe,
be good...
Using JSON-P in
JavaScript is easy.
Don’t rely on
data arriving -
test for it!
XML to JSON?
XML to JSON?
Using JSON is easy
with libraries.
JSON-P and jQuery:

$.getJSON(url+'&callback=?',
 function(data){
});
JSON-P and jQuery:
$.ajax({
  url: url,
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: 'ohyeah'
});
function ohyeah(data){
}
Which one to use?
getJSON() is
dangerous with
other people’s data.
$.ajax():
http://{...}&
format=json&callback=ohyeah


$.getJSON():
http://{...}&
format=json&callback=jsonp1282497813335


                    Random number
Cachebreaking is
not a good idea.
Local caching is a
good idea though.
Cookies
suck,
though.
Would be good to
have a better
solution for that.
localStorage =
cookies on steroids.
if(('localStorage' in window) &&
window['localStorage'] !== null){
  localStorage.setItem(
    'cake',
    'much better than cookies'
  )
}
if(('localStorage' in window) &&
window['localStorage'] !== null){
  var what = localStorage.getItem(
    'cake'
  )
  // what -> 'much better than
  cookies'
}
localStorage only
stores Strings - use
JSON to work
around that.
if(('localStorage' in window) &&
window['localStorage'] !== null){
  localStorage.setItem(
     'cake',
     JSON.stringify(
       {yummy:‘yes’,candles:5}
     )
  );
}
if(('localStorage' in window) &&
window['localStorage'] !== null){
  var what = JSON.parse(
     localStorage.getItem('cake')
  );
  // what -> Object{...}
  // and not [Object object]
}
Let’s wrap this up in
a function.
yql - the query
id - storage key name
cacheage - how long to cache
callback - obvious, isn’t it?
Browsers
supporting
localStorage fetch
the data every hour.
Others still work,
but load the data
every time.
OK, dann machen
wir das halt..
OK, dann machen
wir das halt..
OK, dann machen
wir das halt..
There are a few
libraries offering
fallbacks to other
browers via Flash.
You can of course
also use those.
Offering your own
API.
To get your own API
into YQL all you
need to do is write
an XML schema and
put it on GitHub.
http://github.com/yql/yql-tables
YQL allows you to
write “executable
tables”...
...which means you
can convert data
with JavaScript that
will be executed
server-side.
Twitter translate
example:
Offering your own
API.
Offering your own
API.
SELECT * FROM
twitter.translate WHERE
language="en" and
search="warsaw" and
amount="20"
Distance example:
SELECT * FROM geo.distance
WHERE place1=”london” and
place2="warsaw"
http://isithackday.com/hacks/geo/distance/
Using your JS
tables.
Write your schema,
put it on the web
and use, err... USE
to, err... use it.
use “http://app.pl/distance.xml”
as distance;
SELECT * FROM distance
WHERE place1=”london” and
place2="warsaw"
Both
problems
solved
and
released
as an API
- in JS!
In summary
 Use YQL instead of wasting time
 reading API docs for a simple task
 Filter data in the service and get the
 info back in formats you need.
 Use the fast YQL server instead of
 doing lots of requests.
 Write your own JS APIs using
 execute.
 Use local storage and don’t break
 caching.
 Go and use the web.
Christian Heilmann
http://wait-till-i.com            Cheers
http://developer-evangelism.com
@codepo8

More Related Content

What's hot

Mobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threading
Mobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threadingMobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threading
Mobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threadingMobileFest2018
 
Performance #1: Memory
Performance #1: MemoryPerformance #1: Memory
Performance #1: MemoryYonatan Levin
 
Android Performance #4: Network
Android Performance #4: NetworkAndroid Performance #4: Network
Android Performance #4: NetworkYonatan Levin
 
Google Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocialGoogle Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocialPatrick Chanezon
 
Top 15-asp-dot-net-interview-questions-and-answers
Top 15-asp-dot-net-interview-questions-and-answersTop 15-asp-dot-net-interview-questions-and-answers
Top 15-asp-dot-net-interview-questions-and-answerssonia merchant
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery維佋 唐
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoojeresig
 
Your java script library
Your java script libraryYour java script library
Your java script libraryjasfog
 
Validating big data jobs - Spark AI Summit EU
Validating big data jobs  - Spark AI Summit EUValidating big data jobs  - Spark AI Summit EU
Validating big data jobs - Spark AI Summit EUHolden Karau
 
Extending spring
Extending springExtending spring
Extending springJoshua Long
 
7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websitesoazabir
 

What's hot (16)

Mobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threading
Mobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threadingMobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threading
Mobile Fest 2018. Fernando Cejas. What Mom Never Told You About Multi-threading
 
All of Javascript
All of JavascriptAll of Javascript
All of Javascript
 
Performance #1: Memory
Performance #1: MemoryPerformance #1: Memory
Performance #1: Memory
 
Android Performance #4: Network
Android Performance #4: NetworkAndroid Performance #4: Network
Android Performance #4: Network
 
Google Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocialGoogle Devfest Singapore - OpenSocial
Google Devfest Singapore - OpenSocial
 
Top 15-asp-dot-net-interview-questions-and-answers
Top 15-asp-dot-net-interview-questions-and-answersTop 15-asp-dot-net-interview-questions-and-answers
Top 15-asp-dot-net-interview-questions-and-answers
 
ReactJS
ReactJSReactJS
ReactJS
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery
 
All of javascript
All of javascriptAll of javascript
All of javascript
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoo
 
Javascript Best Practices
Javascript Best PracticesJavascript Best Practices
Javascript Best Practices
 
Your java script library
Your java script libraryYour java script library
Your java script library
 
Validating big data jobs - Spark AI Summit EU
Validating big data jobs  - Spark AI Summit EUValidating big data jobs  - Spark AI Summit EU
Validating big data jobs - Spark AI Summit EU
 
Ajax Security
Ajax SecurityAjax Security
Ajax Security
 
Extending spring
Extending springExtending spring
Extending spring
 
7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites
 

Viewers also liked

Using YQL Sensibly - YUIConf 2010
Using YQL Sensibly - YUIConf 2010Using YQL Sensibly - YUIConf 2010
Using YQL Sensibly - YUIConf 2010Christian Heilmann
 
Understanding progressive enhancement - yuiconf2010
Understanding progressive enhancement - yuiconf2010Understanding progressive enhancement - yuiconf2010
Understanding progressive enhancement - yuiconf2010Christian Heilmann
 
Reasons to be cheerful - Fronteers 2010
Reasons to be cheerful - Fronteers 2010Reasons to be cheerful - Fronteers 2010
Reasons to be cheerful - Fronteers 2010Christian Heilmann
 
Bastelstunde mit dem web und freien-daten-webtechcon2010
Bastelstunde mit dem web und freien-daten-webtechcon2010Bastelstunde mit dem web und freien-daten-webtechcon2010
Bastelstunde mit dem web und freien-daten-webtechcon2010Christian Heilmann
 

Viewers also liked (6)

Let's interface
Let's interfaceLet's interface
Let's interface
 
An open web for all
An open web for allAn open web for all
An open web for all
 
Using YQL Sensibly - YUIConf 2010
Using YQL Sensibly - YUIConf 2010Using YQL Sensibly - YUIConf 2010
Using YQL Sensibly - YUIConf 2010
 
Understanding progressive enhancement - yuiconf2010
Understanding progressive enhancement - yuiconf2010Understanding progressive enhancement - yuiconf2010
Understanding progressive enhancement - yuiconf2010
 
Reasons to be cheerful - Fronteers 2010
Reasons to be cheerful - Fronteers 2010Reasons to be cheerful - Fronteers 2010
Reasons to be cheerful - Fronteers 2010
 
Bastelstunde mit dem web und freien-daten-webtechcon2010
Bastelstunde mit dem web und freien-daten-webtechcon2010Bastelstunde mit dem web und freien-daten-webtechcon2010
Bastelstunde mit dem web und freien-daten-webtechcon2010
 

Similar to Using Web Services with JavaScript - Fronttrends 2010

Building with JavaScript - write less by using the right tools
Building with JavaScript -  write less by using the right toolsBuilding with JavaScript -  write less by using the right tools
Building with JavaScript - write less by using the right toolsChristian Heilmann
 
Powerful tools that you need and might not know about
Powerful tools that you need and might not know aboutPowerful tools that you need and might not know about
Powerful tools that you need and might not know aboutChristian Heilmann
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWRgouthamrv
 
Creating Custom Dojo Widgets Using WTP
Creating Custom Dojo Widgets Using WTPCreating Custom Dojo Widgets Using WTP
Creating Custom Dojo Widgets Using WTPnsandonato
 
JavaScript Interview Questions with Answers
JavaScript Interview Questions with AnswersJavaScript Interview Questions with Answers
JavaScript Interview Questions with AnswersAK Deep Knowledge
 
Javascript why what and how
Javascript why what and howJavascript why what and how
Javascript why what and howsureshpraja1234
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiJackson Tian
 
Fuel for a great web experience
Fuel for a great web experienceFuel for a great web experience
Fuel for a great web experienceChristian Heilmann
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Using MongoDB and a Relational Database at MongoDB Day
Using MongoDB and a Relational Database at MongoDB DayUsing MongoDB and a Relational Database at MongoDB Day
Using MongoDB and a Relational Database at MongoDB Dayhayesdavis
 
Intro to React - Featuring Modern JavaScript
Intro to React - Featuring Modern JavaScriptIntro to React - Featuring Modern JavaScript
Intro to React - Featuring Modern JavaScriptjasonsich
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyDavid Padbury
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4alexsaves
 
Html5 and beyond the next generation of mobile web applications - Touch Tou...
Html5 and beyond   the next generation of mobile web applications - Touch Tou...Html5 and beyond   the next generation of mobile web applications - Touch Tou...
Html5 and beyond the next generation of mobile web applications - Touch Tou...RIA RUI Society
 
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Gil Irizarry
 
Intro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate JavascriptIntro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate JavascriptAndrew Lovett-Barron
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWTArnaud Tournier
 

Similar to Using Web Services with JavaScript - Fronttrends 2010 (20)

Building with JavaScript - write less by using the right tools
Building with JavaScript -  write less by using the right toolsBuilding with JavaScript -  write less by using the right tools
Building with JavaScript - write less by using the right tools
 
Yahoo is open to developers
Yahoo is open to developersYahoo is open to developers
Yahoo is open to developers
 
What is HTML 5?
What is HTML 5?What is HTML 5?
What is HTML 5?
 
Powerful tools that you need and might not know about
Powerful tools that you need and might not know aboutPowerful tools that you need and might not know about
Powerful tools that you need and might not know about
 
Ajax with DWR
Ajax with DWRAjax with DWR
Ajax with DWR
 
Creating Custom Dojo Widgets Using WTP
Creating Custom Dojo Widgets Using WTPCreating Custom Dojo Widgets Using WTP
Creating Custom Dojo Widgets Using WTP
 
JavaScript Interview Questions with Answers
JavaScript Interview Questions with AnswersJavaScript Interview Questions with Answers
JavaScript Interview Questions with Answers
 
Javascript why what and how
Javascript why what and howJavascript why what and how
Javascript why what and how
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Fuel for a great web experience
Fuel for a great web experienceFuel for a great web experience
Fuel for a great web experience
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Using MongoDB and a Relational Database at MongoDB Day
Using MongoDB and a Relational Database at MongoDB DayUsing MongoDB and a Relational Database at MongoDB Day
Using MongoDB and a Relational Database at MongoDB Day
 
Intro to React - Featuring Modern JavaScript
Intro to React - Featuring Modern JavaScriptIntro to React - Featuring Modern JavaScript
Intro to React - Featuring Modern JavaScript
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
 
Html5 and beyond the next generation of mobile web applications - Touch Tou...
Html5 and beyond   the next generation of mobile web applications - Touch Tou...Html5 and beyond   the next generation of mobile web applications - Touch Tou...
Html5 and beyond the next generation of mobile web applications - Touch Tou...
 
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
 
Intro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate JavascriptIntro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate Javascript
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWT
 
jQuery quick tips
jQuery quick tipsjQuery quick tips
jQuery quick tips
 

More from Christian Heilmann

Develop, Debug, Learn? - Dotjs2019
Develop, Debug, Learn? - Dotjs2019Develop, Debug, Learn? - Dotjs2019
Develop, Debug, Learn? - Dotjs2019Christian Heilmann
 
Taking the "vile" out of privilege
Taking the "vile" out of privilegeTaking the "vile" out of privilege
Taking the "vile" out of privilegeChristian Heilmann
 
Seven ways to be a happier JavaScript developer - NDC Oslo
Seven ways to be a happier JavaScript developer - NDC OsloSeven ways to be a happier JavaScript developer - NDC Oslo
Seven ways to be a happier JavaScript developer - NDC OsloChristian Heilmann
 
Artificial intelligence for humans… #AIDC2018 keynote
Artificial intelligence for humans… #AIDC2018 keynoteArtificial intelligence for humans… #AIDC2018 keynote
Artificial intelligence for humans… #AIDC2018 keynoteChristian Heilmann
 
Killing the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynoteKilling the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynoteChristian Heilmann
 
Progressive Web Apps - Techdays Finland
Progressive Web Apps - Techdays FinlandProgressive Web Apps - Techdays Finland
Progressive Web Apps - Techdays FinlandChristian Heilmann
 
Taking the "vile" out of privilege
Taking the "vile" out of privilegeTaking the "vile" out of privilege
Taking the "vile" out of privilegeChristian Heilmann
 
Five ways to be a happier JavaScript developer
Five ways to be a happier JavaScript developerFive ways to be a happier JavaScript developer
Five ways to be a happier JavaScript developerChristian Heilmann
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Christian Heilmann
 
You learned JavaScript - now what?
You learned JavaScript - now what?You learned JavaScript - now what?
You learned JavaScript - now what?Christian Heilmann
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Christian Heilmann
 
Progressive Web Apps - Covering the best of both worlds - DevReach
Progressive Web Apps - Covering the best of both worlds - DevReachProgressive Web Apps - Covering the best of both worlds - DevReach
Progressive Web Apps - Covering the best of both worlds - DevReachChristian Heilmann
 
Progressive Web Apps - Covering the best of both worlds
Progressive Web Apps - Covering the best of both worldsProgressive Web Apps - Covering the best of both worlds
Progressive Web Apps - Covering the best of both worldsChristian Heilmann
 
Non-trivial pursuits: Learning machines and forgetful humans
Non-trivial pursuits: Learning machines and forgetful humansNon-trivial pursuits: Learning machines and forgetful humans
Non-trivial pursuits: Learning machines and forgetful humansChristian Heilmann
 
Progressive Web Apps - Bringing the web front and center
Progressive Web Apps - Bringing the web front and center Progressive Web Apps - Bringing the web front and center
Progressive Web Apps - Bringing the web front and center Christian Heilmann
 
CSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. ControlCSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. ControlChristian Heilmann
 
Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017Christian Heilmann
 
The Soul in The Machine - Developing for Humans (FrankenJS edition)
The Soul in The Machine - Developing for Humans (FrankenJS edition)The Soul in The Machine - Developing for Humans (FrankenJS edition)
The Soul in The Machine - Developing for Humans (FrankenJS edition)Christian Heilmann
 

More from Christian Heilmann (20)

Develop, Debug, Learn? - Dotjs2019
Develop, Debug, Learn? - Dotjs2019Develop, Debug, Learn? - Dotjs2019
Develop, Debug, Learn? - Dotjs2019
 
Hinting at a better web
Hinting at a better webHinting at a better web
Hinting at a better web
 
Taking the "vile" out of privilege
Taking the "vile" out of privilegeTaking the "vile" out of privilege
Taking the "vile" out of privilege
 
Seven ways to be a happier JavaScript developer - NDC Oslo
Seven ways to be a happier JavaScript developer - NDC OsloSeven ways to be a happier JavaScript developer - NDC Oslo
Seven ways to be a happier JavaScript developer - NDC Oslo
 
Artificial intelligence for humans… #AIDC2018 keynote
Artificial intelligence for humans… #AIDC2018 keynoteArtificial intelligence for humans… #AIDC2018 keynote
Artificial intelligence for humans… #AIDC2018 keynote
 
Killing the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynoteKilling the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynote
 
Progressive Web Apps - Techdays Finland
Progressive Web Apps - Techdays FinlandProgressive Web Apps - Techdays Finland
Progressive Web Apps - Techdays Finland
 
Taking the "vile" out of privilege
Taking the "vile" out of privilegeTaking the "vile" out of privilege
Taking the "vile" out of privilege
 
Five ways to be a happier JavaScript developer
Five ways to be a happier JavaScript developerFive ways to be a happier JavaScript developer
Five ways to be a happier JavaScript developer
 
Taking the P out of PWA
Taking the P out of PWATaking the P out of PWA
Taking the P out of PWA
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"
 
You learned JavaScript - now what?
You learned JavaScript - now what?You learned JavaScript - now what?
You learned JavaScript - now what?
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"
 
Progressive Web Apps - Covering the best of both worlds - DevReach
Progressive Web Apps - Covering the best of both worlds - DevReachProgressive Web Apps - Covering the best of both worlds - DevReach
Progressive Web Apps - Covering the best of both worlds - DevReach
 
Progressive Web Apps - Covering the best of both worlds
Progressive Web Apps - Covering the best of both worldsProgressive Web Apps - Covering the best of both worlds
Progressive Web Apps - Covering the best of both worlds
 
Non-trivial pursuits: Learning machines and forgetful humans
Non-trivial pursuits: Learning machines and forgetful humansNon-trivial pursuits: Learning machines and forgetful humans
Non-trivial pursuits: Learning machines and forgetful humans
 
Progressive Web Apps - Bringing the web front and center
Progressive Web Apps - Bringing the web front and center Progressive Web Apps - Bringing the web front and center
Progressive Web Apps - Bringing the web front and center
 
CSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. ControlCSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. Control
 
Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017
 
The Soul in The Machine - Developing for Humans (FrankenJS edition)
The Soul in The Machine - Developing for Humans (FrankenJS edition)The Soul in The Machine - Developing for Humans (FrankenJS edition)
The Soul in The Machine - Developing for Humans (FrankenJS edition)
 

Using Web Services with JavaScript - Fronttrends 2010