SlideShare a Scribd company logo
1 of 53
Download to read offline
Sinatra:
    The Framework Within



    Aaron Quint / Quirkey NYC, LLC
                    /

    Ruby Kaigi / July 18, 2009


Friday, July 31, 2009
Brooklyn, New York

Friday, July 31, 2009
Sinatra.




Friday, July 31, 2009
I didn’t write Sinatra,
                                         …
                            I just love it.



Friday, July 31, 2009
Sinatra.

     require 'sinatra'

     get '/' do
       "Don't you hate pants?"
     end




Friday, July 31, 2009
Sinatra.




Friday, July 31, 2009
Sinatra.


     require 'sinatra'

     get '/homer/hate/:hate' do
       "Don't you hate #{params[:hate]}?"
     end




Friday, July 31, 2009
Sinatra.




Friday, July 31, 2009
Sinatra.

     require 'sinatra'

     get '/homer/hate/:hate.json' do
       content_type 'json'
       "{'hate': '#{params[:hate]}'}"
     end

     get '/homer/hate/:hate' do
       "Don't you hate #{params[:hate]}?"
     end

Friday, July 31, 2009
Classy.




Friday, July 31, 2009
Sinatra. Classy.
     require 'sinatra'
     require 'rack/flash'

     class ClassyApp < Sinatra::Default
       set :sessions, true
       use Rack::Flash

          get '/' do
            haml :index
          end

          post '/classify' do
            flash[:message] = 'Your text has been classified.'
            @text = "I do say, #{params[:text]}. Quite!"
            haml :classify
          end

     end

Friday, July 31, 2009
Sinatra. Classy.




Friday, July 31, 2009
Sinatra. Classy.




Friday, July 31, 2009
Sinatra
                             is not
                        a framework.



Friday, July 31, 2009
Framework.




Friday, July 31, 2009
Not a Framework.




Friday, July 31, 2009
Sinatra.




Friday, July 31, 2009
Not MVC.




Friday, July 31, 2009
WDNNSP
                        (We Don’t Need No Stinkin’ Pattern)




Friday, July 31, 2009
Sinatra
                           is a
                        library.



Friday, July 31, 2009
Sinatra as a library.

     ‣A DSL for defining routes.
     ‣                        DSL

     ‣A nicer Rack.
     ‣           Rack



Friday, July 31, 2009
Friday, July 31, 2009
Code first.

                        Then Sinatra.
                          Sinatra


Friday, July 31, 2009
My Awesome
                          Ruby Project.

                        Ruby
                                 Includes Sinatra.
                               Sinatra




Friday, July 31, 2009
Sinatra!




Friday, July 31, 2009
HTTP as
                           a language.
                        HTTP



Friday, July 31, 2009
Sinatra
                            speaks HTTP.
                        Sinatra HTTP



Friday, July 31, 2009
Do you speak HTTP?
                             HTTP



Friday, July 31, 2009
GET!




Friday, July 31, 2009
RESPONSE!




Friday, July 31, 2009
User        Rack
                        RestClient   Sinatra




Friday, July 31, 2009
Friday, July 31, 2009
The power of
                        the local web.
                               Web



Friday, July 31, 2009
The power of
                         localhost.




Friday, July 31, 2009
Friday, July 31, 2009
Friday, July 31, 2009
CALLING ALL
                        DEVELOPERS!




Friday, July 31, 2009
CALLING ALL
                        DEVELOPERS!
                         require 'sinatra'




Friday, July 31, 2009
CALLING ALL DEVELOPERS!




                        Awesome
                         Codes.




Friday, July 31, 2009
CALLING ALL DEVELOPERS!




                        Sinatra!




Friday, July 31, 2009
CALLING ALL DEVELOPERS!
     require 'sinatra'

     module MyProject
       class App < ::Sinatra::Default

               set :root, File.join(File.dirname(__FILE__), '..', '..')
               set :app_file, __FILE__
               #...

         get '/' do
           # ... SOMETHING AWESOME
         end
         # ...
       end
     end


Friday, July 31, 2009
CALLING ALL DEVELOPERS!




Friday, July 31, 2009
CALLING ALL DEVELOPERS!



                        Sinatra!




Friday, July 31, 2009
require 'sinatra'

   module Gembox


    CALLING ALL DEVELOPERS!
     class App < ::Sinatra::Default
       include Gembox::ViewHelpers
       include WillPaginate::ViewHelpers

          @@root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))

          set :root, @@root
          set :app_file, __FILE__

          before do
            Gembox::Gems.load
            @gems = Gembox::Gems.local_gems.paginate :page => params[:page], :per_page => 30
            @stats = Gembox::Gems.stats
          end

          #...
          get '/' do
            redirect '/gems'
          end

          get %r{/gems/doc/([w-_]+)/?([d.]+)?/?(.*)?} do
            #...
          end

          get %r{/gems/([w-_]+)/?([d.]+)?/?} do
            # ...
            haml :gem, :layout => show_layout
          end

          get '/gems/?' do
            # ...
            haml "gems_#{@show_as}".to_sym, :layout => show_layout
          end
Friday, July 31, 2009
Introducing




Friday, July 31, 2009
Super
                          Simple
                              Sinatra
                        Starter.

Friday, July 31, 2009
Vegas

     #!/usr/bin/env ruby

     require File.expand_path(File.dirname(__FILE__) +
                         "/../lib/gembox")
     require 'vegas'

     Vegas::Runner.new(Gembox::App, 'gembox')




Friday, July 31, 2009
Vegas

     [11:05 PM:~] $ gembox -h
     Usage: gembox [options]

     Vegas       options:
       -s,       --server SERVER     serve using SERVER (webrick/mongrel)
       -o,       --host HOST         listen on HOST (default: 0.0.0.0)
       -p,       --port PORT         use PORT (default: 5678)
       -e,       --env ENVIRONMENT   use ENVIRONMENT for defaults (default: development)
       -F,       --foreground        don't daemonize, run in the foreground
       -K,       --kill              kill the running process and exit
       -S,       --status            display the current running PID and URL then quit

     Common options:
       -h, --help                    Show this message
           --version                 Show version




Friday, July 31, 2009
Vegas
    $ sudo gem install gembox




Friday, July 31, 2009
Vegas
    $ sudo gem install neerajdotname-javascript_lab




Friday, July 31, 2009
The FUTURE!

    ‣Gems+Vegas as a distribution platform.
    ‣
    ‣Even easier workflow for mounting.
    ‣
    ‣Vegas as the central brain.
    ‣Vegas
    ‣Distribute tasks across the local network.
    ‣

Friday, July 31, 2009
Thank you!
     Thanks to Sougo Tsuboi, Leonard
      Chin and the other Ruby Kaigi
                Volunteers


Friday, July 31, 2009
Av
                                                                  ai
                                                                  la
                                                                      bl
                                                                        e
                                                                       fo
                                                                        rh
                                                                            ire
                                                                             !
                                    Aaron Quint
                                aaron@quirkey.com

                              http://www.quirkey.com

                        All code available and open source at:

                          http://code.quirkey.com/vegas
                         http://code.quirkey.com/gembox


Friday, July 31, 2009

More Related Content

Similar to Aaron Quint - Ruby Kaigi Presentation

Welcome and Introduction
Welcome and IntroductionWelcome and Introduction
Welcome and IntroductionESUG
 
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...eCommConf
 
Building scalable applications while scaling your infrastructure by rhommel l...
Building scalable applications while scaling your infrastructure by rhommel l...Building scalable applications while scaling your infrastructure by rhommel l...
Building scalable applications while scaling your infrastructure by rhommel l...NETWAYS
 
Prototype & Scriptaculous
Prototype  & ScriptaculousPrototype  & Scriptaculous
Prototype & ScriptaculousThomas Fuchs
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009Fabio Akita
 
Wave Presentation
Wave PresentationWave Presentation
Wave Presentationbedney
 

Similar to Aaron Quint - Ruby Kaigi Presentation (7)

Welcome and Introduction
Welcome and IntroductionWelcome and Introduction
Welcome and Introduction
 
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
 
Building scalable applications while scaling your infrastructure by rhommel l...
Building scalable applications while scaling your infrastructure by rhommel l...Building scalable applications while scaling your infrastructure by rhommel l...
Building scalable applications while scaling your infrastructure by rhommel l...
 
Prototype & Scriptaculous
Prototype  & ScriptaculousPrototype  & Scriptaculous
Prototype & Scriptaculous
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
 
Perl Critic In Depth
Perl Critic In DepthPerl Critic In Depth
Perl Critic In Depth
 
Wave Presentation
Wave PresentationWave Presentation
Wave Presentation
 

Recently uploaded

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
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
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
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
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
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
 
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
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 

Recently uploaded (20)

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
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
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
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
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
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
 
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
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 

Aaron Quint - Ruby Kaigi Presentation

  • 1. Sinatra: The Framework Within Aaron Quint / Quirkey NYC, LLC / Ruby Kaigi / July 18, 2009 Friday, July 31, 2009
  • 4. I didn’t write Sinatra, … I just love it. Friday, July 31, 2009
  • 5. Sinatra. require 'sinatra' get '/' do "Don't you hate pants?" end Friday, July 31, 2009
  • 7. Sinatra. require 'sinatra' get '/homer/hate/:hate' do "Don't you hate #{params[:hate]}?" end Friday, July 31, 2009
  • 9. Sinatra. require 'sinatra' get '/homer/hate/:hate.json' do content_type 'json' "{'hate': '#{params[:hate]}'}" end get '/homer/hate/:hate' do "Don't you hate #{params[:hate]}?" end Friday, July 31, 2009
  • 11. Sinatra. Classy. require 'sinatra' require 'rack/flash' class ClassyApp < Sinatra::Default set :sessions, true use Rack::Flash get '/' do haml :index end post '/classify' do flash[:message] = 'Your text has been classified.' @text = "I do say, #{params[:text]}. Quite!" haml :classify end end Friday, July 31, 2009
  • 14. Sinatra is not a framework. Friday, July 31, 2009
  • 16. Not a Framework. Friday, July 31, 2009
  • 19. WDNNSP (We Don’t Need No Stinkin’ Pattern) Friday, July 31, 2009
  • 20. Sinatra is a library. Friday, July 31, 2009
  • 21. Sinatra as a library. ‣A DSL for defining routes. ‣ DSL ‣A nicer Rack. ‣ Rack Friday, July 31, 2009
  • 23. Code first. Then Sinatra. Sinatra Friday, July 31, 2009
  • 24. My Awesome Ruby Project. Ruby Includes Sinatra. Sinatra Friday, July 31, 2009
  • 26. HTTP as a language. HTTP Friday, July 31, 2009
  • 27. Sinatra speaks HTTP. Sinatra HTTP Friday, July 31, 2009
  • 28. Do you speak HTTP? HTTP Friday, July 31, 2009
  • 31. User Rack RestClient Sinatra Friday, July 31, 2009
  • 33. The power of the local web. Web Friday, July 31, 2009
  • 34. The power of localhost. Friday, July 31, 2009
  • 37. CALLING ALL DEVELOPERS! Friday, July 31, 2009
  • 38. CALLING ALL DEVELOPERS! require 'sinatra' Friday, July 31, 2009
  • 39. CALLING ALL DEVELOPERS! Awesome Codes. Friday, July 31, 2009
  • 40. CALLING ALL DEVELOPERS! Sinatra! Friday, July 31, 2009
  • 41. CALLING ALL DEVELOPERS! require 'sinatra' module MyProject class App < ::Sinatra::Default set :root, File.join(File.dirname(__FILE__), '..', '..') set :app_file, __FILE__ #... get '/' do # ... SOMETHING AWESOME end # ... end end Friday, July 31, 2009
  • 43. CALLING ALL DEVELOPERS! Sinatra! Friday, July 31, 2009
  • 44. require 'sinatra' module Gembox CALLING ALL DEVELOPERS! class App < ::Sinatra::Default include Gembox::ViewHelpers include WillPaginate::ViewHelpers @@root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) set :root, @@root set :app_file, __FILE__ before do Gembox::Gems.load @gems = Gembox::Gems.local_gems.paginate :page => params[:page], :per_page => 30 @stats = Gembox::Gems.stats end #... get '/' do redirect '/gems' end get %r{/gems/doc/([w-_]+)/?([d.]+)?/?(.*)?} do #... end get %r{/gems/([w-_]+)/?([d.]+)?/?} do # ... haml :gem, :layout => show_layout end get '/gems/?' do # ... haml "gems_#{@show_as}".to_sym, :layout => show_layout end Friday, July 31, 2009
  • 46. Super Simple Sinatra Starter. Friday, July 31, 2009
  • 47. Vegas #!/usr/bin/env ruby require File.expand_path(File.dirname(__FILE__) + "/../lib/gembox") require 'vegas' Vegas::Runner.new(Gembox::App, 'gembox') Friday, July 31, 2009
  • 48. Vegas [11:05 PM:~] $ gembox -h Usage: gembox [options] Vegas options: -s, --server SERVER serve using SERVER (webrick/mongrel) -o, --host HOST listen on HOST (default: 0.0.0.0) -p, --port PORT use PORT (default: 5678) -e, --env ENVIRONMENT use ENVIRONMENT for defaults (default: development) -F, --foreground don't daemonize, run in the foreground -K, --kill kill the running process and exit -S, --status display the current running PID and URL then quit Common options: -h, --help Show this message --version Show version Friday, July 31, 2009
  • 49. Vegas $ sudo gem install gembox Friday, July 31, 2009
  • 50. Vegas $ sudo gem install neerajdotname-javascript_lab Friday, July 31, 2009
  • 51. The FUTURE! ‣Gems+Vegas as a distribution platform. ‣ ‣Even easier workflow for mounting. ‣ ‣Vegas as the central brain. ‣Vegas ‣Distribute tasks across the local network. ‣ Friday, July 31, 2009
  • 52. Thank you! Thanks to Sougo Tsuboi, Leonard Chin and the other Ruby Kaigi Volunteers Friday, July 31, 2009
  • 53. Av ai la bl e fo rh ire ! Aaron Quint aaron@quirkey.com http://www.quirkey.com All code available and open source at: http://code.quirkey.com/vegas http://code.quirkey.com/gembox Friday, July 31, 2009