Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hobbit

Krzysztof Wawer
July 23, 2014
380

 Hobbit

Krzysztof Wawer

July 23, 2014
Tweet

Transcript

  1. Budowanie aplikacji
    webowej w Ruby
    Hobbit

    View Slide

  2. O mnie
    Krzysztof Wawer!
    [email protected]!
    Github: wafcio!
    !
    Neubloc Polska

    View Slide

  3. Ruby on Rails
    Web Serwer
    Ruby on Rails
    Nasza aplikacja

    View Slide

  4. Ruby on Rails
    Web Serwer
    Ruby on Rails
    Nasza aplikacja
    Rack

    View Slide

  5. Ruby on Rails - zależności
    rails
    actionmailer (4.1.4 - 62 112 B)
    mail
    actionpack (4.1.4 - 651 917 B)
    AbstractController, ActionController,
    ActionDispatch
    rack
    rack-test
    actionview (4.1.4 - 624 372 B)
    builder
    erubis
    activemodel (4.1.4 - 159 322 B)
    builder
    activerecord (4.1.4 - 1 143 044 B)
    arel
    !
    activesupport (4.1.4 - 1 475 624 B)
    cache, core_ext, json, multibyte, notyfikacje,
    konwersja liczb
    i18n
    jon
    minitest
    thread_safe
    tzinfo
    bundler
    railties (4.1.4 - 368 897 B)
    rake
    thor
    sprockets-rails
    RAZEM 4 485 298 B ~ 4,28 MB

    View Slide

  6. Ruby on Rails
    Konwencja nad Konfiguracją!
    !
    Twórcy => Odtwórców

    View Slide

  7. Ruby on Rails ???
    Czy na pewno rozumiemy większość kodu RoR ?

    View Slide

  8. Ruby on Rails ???
    Czy potrafimy optymalnie wykorzystać RoR ?

    View Slide

  9. Ruby on Rails ???
    A może coś nam przeszkadza w RoR ?

    View Slide

  10. Ruby off Rails
    Web Serwer
    Ruby on Rails
    Nasza aplikacja
    Rack

    View Slide

  11. Ruby off Rails
    Mikro Biblioteki!
    Piotr Solnica: https://www.youtube.com/
    watch?v=urUEB8Kz6jY!
    Wykorzystanie tylko potrzebnych gemów!
    Zwiększenie wydajności

    View Slide

  12. Rack
    Rack
    Web Serwer
    Nasza aplikacja
    https://github.com/rack/rack

    View Slide

  13. Aplikacja Rack
    require 'rack'
    !
    class HelloWorld
    def call(env)
    [200, {'Content-Type' => 'text/plain'}, 'Hello World!']
    end
    end
    !
    run HelloWorld.new

    View Slide

  14. Rack
    Rack
    Web Serwer
    Nasza aplikacja
    https://github.com/rack/rack
    Lekki framework

    View Slide

  15. Niektóre frameworki
    Brooklyn, Cuba, Hobbit, Lotus, Nancy, NYNY, Mustermann,
    Ramaze, Rambutan, Scorched, Sinatra!
    https://github.com/luislavena/bench-micro!
    !
    Cuba, Hobbit, Jellyfish, Sinatra, Substation, Subway!
    http://microrb.com/#framework!

    View Slide

  16. Hobbit
    Patricio Mac Adden
    [email protected]
    Github: patriciomacadden
    !
    Pierwszy commit: 11 IV 2013

    View Slide

  17. Hobbit
    pierwsza nazwa: bonsai, ale …
    !
    musi być szybki
    bardzo prosty, tylko routing
    rozszerzalny
    zero konfiguracji
    !
    http://www.sitepoint.com/ruby-microframeworks-round/

    View Slide

  18. hobbit - źródło
    https://github.com/patriciomacadden/hobbit
    v0.6.0, 12 VI 2014 - 9 239 B ~ 9,02 KB
    hobbit.rb - 4 linii
    hobbit/base.rb - 93 linii
    hobbit/request.rb - 10 linii
    hobbit/response.rb - 40 linii
    Razem: 147 linii

    View Slide

  19. Hello World
    require 'hobbit'
    !
    class HelloWorld < Hobbit::Base
    get '/' do
    'Hello World!'
    end
    end
    !
    run HelloWorld.new

    View Slide

  20. hobbit-contrib - źródło
    https://github.com/patriciomacadden/hobbit-contrib
    v0.7.0, 10 VII 2014 - 5 280 B ~ 5,16 KB
    hobbit/contrib.rb - 13 linii
    hobbit/environment.rb - 15 linii
    hobbit/error_handling.rb - 27 linii
    hobbit/filter.rb - 73 linii
    hobbit/mote.rb - 42 linii
    hobbit/render.rb - 55 linii
    hobbit/session.rb - 7 linii
    Razem: 232 linii

    View Slide

  21. hobbit-contrib - źródło
    https://github.com/patriciomacadden/hobbit-contrib
    environment.rb - development?, production?
    error_handling.rb - chwyta wyjątki
    filter.rb - after, before
    mote.rb - renderuje widoki przy użyciu Mote
    render.rb - renderuje widoki przy użyciu Tilt
    session.rb - łatwy dostęp do zmiennych zapisanych w sesji

    View Slide

  22. Format HTML
    require 'hobbit'
    require 'hobbit/render'
    require 'tilt/haml'
    !
    class HelloWorld < Hobbit::Base
    def template_engine
    'haml'
    end
    !
    get '/' do
    render 'index', {}, layout: false
    end
    end
    !
    run HelloWorld.new

    View Slide

  23. Co zrobić gdy czegoś brakuje ?
    gemy dla Racka
    gemy dla Sinatry
    activesupport ???

    View Slide

  24. Hobbit - ataki
    brak obrony przed atakami
    zalecane wykorzystanie: https://github.com/rkh/rack-protection
    Cross Site Request Forgery
    Cross Site Scripting
    Clickjacking
    Directory Traversal
    Session Hijacking
    IP Spoofing

    View Slide

  25. Hobbit Application Template
    https://github.com/patriciomacadden/hat
    i18n
    tilt
    sprockets
    better_errors
    rake
    rack-test, minitest

    View Slide

  26. Prekompilacja assetów
    require 'rake/sprocketstask'
    require 'uglifier'
    !
    Rake::SprocketsTask.new do |t|
    environment = Sprockets::Environment.new
    environment.append_path(…)
    environment.js_compressor = :uglify
    environment.css_compressor = :scss
    !
    t.environment = environment
    t.manifest =
    Sprockets::Manifest.new(environment,
    "public/assets/manifest.json")
    !
    t.output = 'public/assets'
    t.assets = %w(application.js
    application.css)
    end
    rake assets
    # Compile assets
    !
    rake clean_assets
    # Clean old assets
    !
    rake clobber_assets
    # Remove all assembler

    View Slide

  27. Przykład
    Na podstawie: https://github.com/ryant523/blog
    haml
    sass
    rake
    sequel
    pony

    View Slide

  28. Dziękuje
    Pytania ???

    View Slide