SlideShare a Scribd company logo
ql.io and Node.js: Next Generation
Open Source Web Querying System




                                 Jonathan LeBlanc
                Developer Evangelist: X.commerce
                           Email: jleblanc@x.com
                               Twitter: @jcleblanc
                     Github: github.com/jcleblanc
Topics We’ll Be Covering

        Overview of ql.io

        Language Specifications

        Monkey Patching & Enhancements

        Integrating Into Your Node Applications

        Tools and More
Topics We’ll Be Covering

        Overview of ql.io

        Language Specifications

        Monkey Patching & Enhancements

        Integrating Into Your Node Applications

        Tools and More
ql.io: The Problem is API Overload
ql.io: Developing for Mobile
ql.io: Reducing Workload + Processing


                Reduced Documentation


                Reduced Code Length


                Reduced Result Syncing
ql.io: Increasing Performance (Requests)
ql.io: Error Handling and Reporting
ql.io: Open Standard Foundation
ql.io: Using the System


     Web Endpoint     Standalone Server
ql.io: Quering the Web Endpoint



        HTTP GET
        http://ql.io/q?s=QUERY
ql.io: Using the Standalone Server

      Data
   (internal)
                  ql.io        Node Host




      Data
   (external)
Topics We’ll Be Covering

        Overview of ql.io

        Language Specifications

        Monkey Patching & Enhancements

        Integrating Into Your Node Applications

        Tools and More
Language: Defining a Data Source


   Include in Request   Include in .ql Table
Language: Create Table for Data Source


  create table TABLE_NAME
      on select get from "http://api.com/?val1={val1}"
      using defaults val1="VALUE",
                      val2="VALUE”;
Language: Sample Github Issues Table


  create table github.issues
      on select get from "https://github.com/api/v2/json/
                          issues/list/{user}/{repository}/
                          {state}/"
      using defaults state="open";
Language: Obtain Data From New Tables


        select * from TABLE_NAME
           where val1="VALUE"
           and val2="VALUE"
           limit 10
           offset 3;
Language: Sample Github Table Call

         select * from github.issues
             where user="jcleblanc"
             and repository="reddit-php-sdk";

 {
 "comments": 0,
 "body": "http://www.phpdoc.org/",
 "title": "Use standardized documentation",
 "updated_at": "2011/12/11 13:49:07 -0800",
 "html_url": "https://github.com/jcleblanc/reddit-php-sdk/issues/3",
 "state": "open”
 }
Language: Insert Request


      insert into bitly.shorten (longUrl)
          values ('http://ql.io/docs');



               "http://bit.ly/uZIvmY"
Language: Nested Selects

 select ItemID, ViewItemURLForNaturalSearch, Location
     from details
     where itemId
     in (select itemId
              from finditems
              where keywords='mini cooper');

  [
  "330730216553",
  "http://www.ebay.com/itm/Clubman-Auto-Sunroof-Prem-…",
  "Huntingdon Valley, Pennsylvania"
  ],
ql.io: The Test Console
      Test Console: http://ql.io/console
Language: Including Script Routes

 user = "jcleblanc";
 slides = select * from slideshare where user="{user}";
 twitter = select * from github.users where user="{user}";

 return {
   "slides": "{slides}",
   "twitter": "{twitter}"
 }
 via route '/social' using method post;
Language: Using Script Routes




 curl --header "content-type: application/x-www-form-urlencoded"
            -d "user=jcleblanc" http://localhost:3000/social
Topics We’ll Be Covering

        Overview of ql.io

        Language Specifications

        Monkey Patching & Enhancements

        Integrating Into Your Node Applications

        Tools and More
Patching: Including the Monkey Patch



  create table TABLE_NAME
      on select get from "http://api.com/?val1={val1}"
      using defaults val1="VALUE"
      using patch "patch.js";
Patching: Validating Input Parameters


 exports['validate param'] = function(args, param, value) {
    switch(param) {
        case 'duration' :
             return !isNaN(value - 0)
        default:
             return true;
    }
 }
Patching: The Body Patch


 exports['patch body'] = function() {
   return {
      type: 'application/json',
      content: JSON.stringify({message : 'aok'})
   };
 }
Patching: The Response Patch


   exports['patch response'] = function(args){
      var body = args.body;

       //modify response body

       return body;
   }
Topics We’ll Be Covering

        Overview of ql.io

        Language Specifications

        Monkey Patching & Enhancements

        Integrating Into Your Node Applications

        Tools and More
Node.js: Installing the Package




           npm install ql.io-engine
Node.js: Including the Engine



       var Engine = require('ql.io-engine');
       var engine = new Engine({
                        connection: 'close'
                    });
Node.js: Building the Script
Topics We’ll Be Covering

        Overview of ql.io

        Language Specifications

        Monkey Patching & Enhancements

        Integrating Into Your Node Applications

        Tools and More
Tools: API Masher

    Visualization Engine:
    https://github.com/jcleblanc/api-masher

    Technology Backbone
      – ql.io
      – jQuery
      – Mustache Templates
Tools: API Masher


 var format = “<li><a href=‘{{link}}’ target=‘_blank’>
     <img src=‘{{media:content.media:thumbnail.url}}’
     width=‘{{media:content.media:thumbnail.width}}’
     height=‘{{media:content.media:thumbnail.height}}’ /></a>
     <br /><span class=‘small’>
     <a href=‘{{link}}’ target=‘_blank’>{{title}}</a></span></li>”;
Tools: API Masher

 var query = “create table slideshare
   on select get from ‘http://www.slideshare.net/rss/user/{user}’
   resultset ‘rss.channel’;
   select * from slideshare where user=“jcleblanc”

 var insertEl = “widgetContainer”;

 parser.push(query, format, insertEl);
 parser.render();
Tools: API Masher Results

    Showcase Website: http://jcleblanc.com
Tools: External API Tables



     Tables Source:
     https://github.com/jcleblanc/ql.io-tables
ql.io: The Link
Thank You!
http://slidesha.re/ql-io-node




                  Jonathan LeBlanc
 Developer Evangelist: X.commerce
            Email: jleblanc@x.com
                Twitter: @jcleblanc
      Github: github.com/jcleblanc

More Related Content

What's hot (20)

PDF
Embulk at Treasure Data
Satoshi Akama
 
PDF
Composable and streamable Play apps
Yevgeniy Brikman
 
PDF
Asynchronous web apps with the Play Framework 2.0
Oscar Renalias
 
PDF
Restful App Engine
Ryan Morlok
 
PDF
Phoenix for Rails Devs
Diacode
 
PDF
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Jesus Manuel Olivas
 
PDF
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
Fernando Hamasaki de Amorim
 
PDF
React Development with the MERN Stack
Troy Miles
 
PDF
Aligning Ember.js with Web Standards
Matthew Beale
 
PPT
Powershell Seminar @ ITWorx CuttingEdge Club
Essam Salah
 
PPTX
Windows PowerShell
Sandun Perera
 
PDF
effective_r27
Hiroshi Ono
 
PPTX
Java Play RESTful ebean
Faren faren
 
ODP
An Introduction to Windows PowerShell
Dale Lane
 
PPTX
Java Play Restful JPA
Faren faren
 
PPTX
Professional Help for PowerShell Modules
June Blender
 
PPTX
Zephir - A Wind of Change for writing PHP extensions
Mark Baker
 
PDF
RESTful API Design & Implementation with CodeIgniter PHP Framework
Bo-Yi Wu
 
PDF
4.2 PHP Function
Jalpesh Vasa
 
PPTX
Power shell training
David Brabant
 
Embulk at Treasure Data
Satoshi Akama
 
Composable and streamable Play apps
Yevgeniy Brikman
 
Asynchronous web apps with the Play Framework 2.0
Oscar Renalias
 
Restful App Engine
Ryan Morlok
 
Phoenix for Rails Devs
Diacode
 
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Jesus Manuel Olivas
 
The worst Ruby codes I’ve seen in my life - RubyKaigi 2015
Fernando Hamasaki de Amorim
 
React Development with the MERN Stack
Troy Miles
 
Aligning Ember.js with Web Standards
Matthew Beale
 
Powershell Seminar @ ITWorx CuttingEdge Club
Essam Salah
 
Windows PowerShell
Sandun Perera
 
effective_r27
Hiroshi Ono
 
Java Play RESTful ebean
Faren faren
 
An Introduction to Windows PowerShell
Dale Lane
 
Java Play Restful JPA
Faren faren
 
Professional Help for PowerShell Modules
June Blender
 
Zephir - A Wind of Change for writing PHP extensions
Mark Baker
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
Bo-Yi Wu
 
4.2 PHP Function
Jalpesh Vasa
 
Power shell training
David Brabant
 

Similar to 2012: ql.io and Node.js (20)

PPTX
High Performance API Mashups with Node.js and ql.io
Jonathan LeBlanc
 
PDF
Learn backend java script
Tsuyoshi Maeda
 
PDF
GraphQL
Cédric GILLET
 
PDF
Download full ebook of Learning Node Shelley Powers instant download pdf
zeitsloyerqy
 
PPTX
Introduction to node.js
Adrien Guéret
 
PDF
GraphQL: Enabling a new generation of API developer tools
Sashko Stubailo
 
PDF
Building businesspost.ie using Node.js
Richard Rodger
 
PPTX
Intro To Node.js
Chris Cowan
 
PPTX
ql.io: Consuming HTTP at Scale
Subbu Allamaraju
 
PPT
RESTful API In Node Js using Express
Jeetendra singh
 
PDF
GraphQL for Native Apps
Emanuele Di Saverio
 
PDF
Graphql
Neven Rakonić
 
PPTX
Intro to node and mongodb 1
Mohammad Qureshi
 
PDF
Node.js
Matt Simonis
 
PPTX
GraphQL API Crafts presentation
Sudheer J
 
PDF
Web_Development_with_Node_Express.pdf
Marco Antonio Martinez Andrade
 
ODP
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
DataStax Academy
 
ODP
Intravert Server side processing for Cassandra
Edward Capriolo
 
PDF
GraphQL Bangkok meetup 5.0
Tobias Meixner
 
High Performance API Mashups with Node.js and ql.io
Jonathan LeBlanc
 
Learn backend java script
Tsuyoshi Maeda
 
Download full ebook of Learning Node Shelley Powers instant download pdf
zeitsloyerqy
 
Introduction to node.js
Adrien Guéret
 
GraphQL: Enabling a new generation of API developer tools
Sashko Stubailo
 
Building businesspost.ie using Node.js
Richard Rodger
 
Intro To Node.js
Chris Cowan
 
ql.io: Consuming HTTP at Scale
Subbu Allamaraju
 
RESTful API In Node Js using Express
Jeetendra singh
 
GraphQL for Native Apps
Emanuele Di Saverio
 
Intro to node and mongodb 1
Mohammad Qureshi
 
Node.js
Matt Simonis
 
GraphQL API Crafts presentation
Sudheer J
 
Web_Development_with_Node_Express.pdf
Marco Antonio Martinez Andrade
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
DataStax Academy
 
Intravert Server side processing for Cassandra
Edward Capriolo
 
GraphQL Bangkok meetup 5.0
Tobias Meixner
 
Ad

More from Jonathan LeBlanc (20)

PDF
JavaScript App Security: Auth and Identity on the Client
Jonathan LeBlanc
 
PDF
Improving Developer Onboarding Through Intelligent Data Insights
Jonathan LeBlanc
 
PDF
Better Data with Machine Learning and Serverless
Jonathan LeBlanc
 
PPTX
Best Practices for Application Development with Box
Jonathan LeBlanc
 
PPTX
Box Platform Overview
Jonathan LeBlanc
 
PPTX
Box Platform Developer Workshop
Jonathan LeBlanc
 
PPTX
Modern Cloud Data Security Practices
Jonathan LeBlanc
 
PPTX
Box Authentication Types
Jonathan LeBlanc
 
PPTX
Understanding Box UI Elements
Jonathan LeBlanc
 
PPTX
Understanding Box applications, tokens, and scoping
Jonathan LeBlanc
 
PPTX
The Future of Online Money: Creating Secure Payments Globally
Jonathan LeBlanc
 
PDF
Modern API Security with JSON Web Tokens
Jonathan LeBlanc
 
PPTX
Creating an In-Aisle Purchasing System from Scratch
Jonathan LeBlanc
 
PDF
Secure Payments Over Mixed Communication Media
Jonathan LeBlanc
 
PDF
Protecting the Future of Mobile Payments
Jonathan LeBlanc
 
PDF
Node.js Authentication and Data Security
Jonathan LeBlanc
 
PDF
PHP Identity and Data Security
Jonathan LeBlanc
 
PPTX
Secure Payments Over Mixed Communication Media
Jonathan LeBlanc
 
PDF
Protecting the Future of Mobile Payments
Jonathan LeBlanc
 
PPTX
Future of Identity, Data, and Wearable Security
Jonathan LeBlanc
 
JavaScript App Security: Auth and Identity on the Client
Jonathan LeBlanc
 
Improving Developer Onboarding Through Intelligent Data Insights
Jonathan LeBlanc
 
Better Data with Machine Learning and Serverless
Jonathan LeBlanc
 
Best Practices for Application Development with Box
Jonathan LeBlanc
 
Box Platform Overview
Jonathan LeBlanc
 
Box Platform Developer Workshop
Jonathan LeBlanc
 
Modern Cloud Data Security Practices
Jonathan LeBlanc
 
Box Authentication Types
Jonathan LeBlanc
 
Understanding Box UI Elements
Jonathan LeBlanc
 
Understanding Box applications, tokens, and scoping
Jonathan LeBlanc
 
The Future of Online Money: Creating Secure Payments Globally
Jonathan LeBlanc
 
Modern API Security with JSON Web Tokens
Jonathan LeBlanc
 
Creating an In-Aisle Purchasing System from Scratch
Jonathan LeBlanc
 
Secure Payments Over Mixed Communication Media
Jonathan LeBlanc
 
Protecting the Future of Mobile Payments
Jonathan LeBlanc
 
Node.js Authentication and Data Security
Jonathan LeBlanc
 
PHP Identity and Data Security
Jonathan LeBlanc
 
Secure Payments Over Mixed Communication Media
Jonathan LeBlanc
 
Protecting the Future of Mobile Payments
Jonathan LeBlanc
 
Future of Identity, Data, and Wearable Security
Jonathan LeBlanc
 
Ad

Recently uploaded (20)

PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Wojciech Ciemski for Top Cyber News MAGAZINE. June 2025
Dr. Ludmila Morozova-Buss
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PPTX
Top iOS App Development Company in the USA for Innovative Apps
SynapseIndia
 
PDF
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Wojciech Ciemski for Top Cyber News MAGAZINE. June 2025
Dr. Ludmila Morozova-Buss
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Top iOS App Development Company in the USA for Innovative Apps
SynapseIndia
 
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 

2012: ql.io and Node.js

  • 1. ql.io and Node.js: Next Generation Open Source Web Querying System Jonathan LeBlanc Developer Evangelist: X.commerce Email: [email protected] Twitter: @jcleblanc Github: github.com/jcleblanc
  • 2. Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 3. Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 4. ql.io: The Problem is API Overload
  • 6. ql.io: Reducing Workload + Processing Reduced Documentation Reduced Code Length Reduced Result Syncing
  • 8. ql.io: Error Handling and Reporting
  • 9. ql.io: Open Standard Foundation
  • 10. ql.io: Using the System Web Endpoint Standalone Server
  • 11. ql.io: Quering the Web Endpoint HTTP GET http://ql.io/q?s=QUERY
  • 12. ql.io: Using the Standalone Server Data (internal) ql.io Node Host Data (external)
  • 13. Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 14. Language: Defining a Data Source Include in Request Include in .ql Table
  • 15. Language: Create Table for Data Source create table TABLE_NAME on select get from "http://api.com/?val1={val1}" using defaults val1="VALUE", val2="VALUE”;
  • 16. Language: Sample Github Issues Table create table github.issues on select get from "https://github.com/api/v2/json/ issues/list/{user}/{repository}/ {state}/" using defaults state="open";
  • 17. Language: Obtain Data From New Tables select * from TABLE_NAME where val1="VALUE" and val2="VALUE" limit 10 offset 3;
  • 18. Language: Sample Github Table Call select * from github.issues where user="jcleblanc" and repository="reddit-php-sdk"; { "comments": 0, "body": "http://www.phpdoc.org/", "title": "Use standardized documentation", "updated_at": "2011/12/11 13:49:07 -0800", "html_url": "https://github.com/jcleblanc/reddit-php-sdk/issues/3", "state": "open” }
  • 19. Language: Insert Request insert into bitly.shorten (longUrl) values ('http://ql.io/docs'); "http://bit.ly/uZIvmY"
  • 20. Language: Nested Selects select ItemID, ViewItemURLForNaturalSearch, Location from details where itemId in (select itemId from finditems where keywords='mini cooper'); [ "330730216553", "http://www.ebay.com/itm/Clubman-Auto-Sunroof-Prem-…", "Huntingdon Valley, Pennsylvania" ],
  • 21. ql.io: The Test Console Test Console: http://ql.io/console
  • 22. Language: Including Script Routes user = "jcleblanc"; slides = select * from slideshare where user="{user}"; twitter = select * from github.users where user="{user}"; return { "slides": "{slides}", "twitter": "{twitter}" } via route '/social' using method post;
  • 23. Language: Using Script Routes curl --header "content-type: application/x-www-form-urlencoded" -d "user=jcleblanc" http://localhost:3000/social
  • 24. Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 25. Patching: Including the Monkey Patch create table TABLE_NAME on select get from "http://api.com/?val1={val1}" using defaults val1="VALUE" using patch "patch.js";
  • 26. Patching: Validating Input Parameters exports['validate param'] = function(args, param, value) { switch(param) { case 'duration' : return !isNaN(value - 0) default: return true; } }
  • 27. Patching: The Body Patch exports['patch body'] = function() { return { type: 'application/json', content: JSON.stringify({message : 'aok'}) }; }
  • 28. Patching: The Response Patch exports['patch response'] = function(args){ var body = args.body; //modify response body return body; }
  • 29. Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 30. Node.js: Installing the Package npm install ql.io-engine
  • 31. Node.js: Including the Engine var Engine = require('ql.io-engine'); var engine = new Engine({ connection: 'close' });
  • 33. Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 34. Tools: API Masher Visualization Engine: https://github.com/jcleblanc/api-masher Technology Backbone – ql.io – jQuery – Mustache Templates
  • 35. Tools: API Masher var format = “<li><a href=‘{{link}}’ target=‘_blank’> <img src=‘{{media:content.media:thumbnail.url}}’ width=‘{{media:content.media:thumbnail.width}}’ height=‘{{media:content.media:thumbnail.height}}’ /></a> <br /><span class=‘small’> <a href=‘{{link}}’ target=‘_blank’>{{title}}</a></span></li>”;
  • 36. Tools: API Masher var query = “create table slideshare on select get from ‘http://www.slideshare.net/rss/user/{user}’ resultset ‘rss.channel’; select * from slideshare where user=“jcleblanc” var insertEl = “widgetContainer”; parser.push(query, format, insertEl); parser.render();
  • 37. Tools: API Masher Results Showcase Website: http://jcleblanc.com
  • 38. Tools: External API Tables Tables Source: https://github.com/jcleblanc/ql.io-tables
  • 40. Thank You! http://slidesha.re/ql-io-node Jonathan LeBlanc Developer Evangelist: X.commerce Email: [email protected] Twitter: @jcleblanc Github: github.com/jcleblanc

Editor's Notes

  • #5: Mashing up multiple data sourcesPerformance issuesAdd slides showing performance hits
  • #6: Most mobile applications will, on average, make at least 5+ HTTP data requests per UI paint.
  • #10: Language based on a SQL-like syntax which exports all data to JSON
  • #12: If you’re using the web endpoint you would make HTTP GET requests to the API endpoint, inserting your query in the request. A JSON response will be returned to you.
  • #13: If you download the standalone server version of ql.io, it will sit on top of your existing node server (or within your node applications) and be able to query your internal data and/or external data sources
  • #15: A create table call (to define a data source) may be included in the HTTP request to the ql.io web source or defined in a .ql file, which is added into the /tables directory of your application.
  • #20: Update / Delete requests not currently supported, but are being actively worked on.
  • #22: create table slideshare on select get from &quot;http://www.slideshare.net/rss/user/{user}&quot; resultset &quot;rss.channel&quot;;create table github.users on select get from &quot;http://github.com/api/v2/json/user/show/{user}&quot;;user = &quot;jcleblanc&quot;;slides = select * from slideshare where user=&quot;{user}&quot;;twitter = select * from github.users where user=&quot;{user}&quot;;return { &quot;slides&quot;: &quot;{slides}&quot;, &quot;twitter&quot;: &quot;{twitter}&quot;}
  • #23: Route files are also stored with the .ql extension but are placed under the routes directory
  • #33: var script = &quot;create table geocoder &quot; + &quot; on select get from &apos;http://maps.googleapis.com/maps/api/geocode/json?address={address}&amp;sensor=true&apos; &quot; + &quot; resultset &apos;results.geometry.location&apos;&quot; + &quot;select lat as lattitude, lng as longitude from geocoder where address=&apos;Mt. Everest&apos;&quot;;engine.execute(script, function(emitter) {emitter.on(&apos;end&apos;, function(err, res) {console.log(res.body[0]); });});
  • #38: var script = &quot;create table geocoder &quot; + &quot; on select get from &apos;http://maps.googleapis.com/maps/api/geocode/json?address={address}&amp;sensor=true&apos; &quot; + &quot; resultset &apos;results.geometry.location&apos;&quot; + &quot;select lat as lattitude, lng as longitude from geocoder where address=&apos;Mt. Everest&apos;&quot;;engine.execute(script, function(emitter) {emitter.on(&apos;end&apos;, function(err, res) {console.log(res.body[0]); });});