SlideShare a Scribd company logo
1 of 175
Rack
          Middleware
Tuesday, March 17, 2009
m/
Tuesday, March 17, 2009
NEED
Tuesday, March 17, 2009
CHOICE
Tuesday, March 17, 2009
Jon Crosby
      http://joncrosby.me
Tuesday, March 17, 2009
CloudKit
           http://getcloudkit.com

Tuesday, March 17, 2009
rack-contrib

             http://github.com/rack/rack-contrib




Tuesday, March 17, 2009
Tuesday, March 17, 2009
Engine Yard Solo
                                “The platform for
                          on-demand management of your
                             Ruby on Rails application
                                  in the cloud.”


Tuesday, March 17, 2009
Free during HackFest


Tuesday, March 17, 2009
Discount for Sign Up


Tuesday, March 17, 2009
CGI
Tuesday, March 17, 2009
app.cgi
Tuesday, March 17, 2009
WARNING
Tuesday, March 17, 2009
Contains Perl

Tuesday, March 17, 2009
old skool perl cgi

Tuesday, March 17, 2009
if ($cgi->param(‘action’) eq ‘all’) {
        my $sql = “select * from customer”;
        my $rows =
            $dbh->selectall_arrayref($sql);
        if (@$rows) {
            print “<table border=1>” .
                  “<th>name</th>” .
    ...

Tuesday, March 17, 2009
if ($cgi->param(‘action’) eq ‘all’) {
        my $sql = “select * from customer”;
        my $rows =
            $dbh->selectall_arrayref($sql);
        if (@$rows) {
            print “<table border=1>” .
                  “<th>name</th>” .
    ...

Tuesday, March 17, 2009
if ($cgi->param(‘action’) eq ‘all’) {
        my $sql = “select * from customer”;
        my $rows =
            $dbh->selectall_arrayref($sql);
        if (@$rows) {
            print “<table border=1>” .
                  “<th>name</th>” .
    ...

Tuesday, March 17, 2009
if ($cgi->param(‘action’) eq ‘all’) {
        my $sql = “select * from customer”;
        my $rows =
            $dbh->selectall_arrayref($sql);
        if (@$rows) {
            print “<table border=1>” .
                  “<th>name</th>” .
    ...

Tuesday, March 17, 2009
if ($cgi->param(‘action’) eq ‘all’) {
        my $sql = “select * from customer”;
        my $rows =
            $dbh->selectall_arrayref($sql);
        if (@$rows) {
            print “<table border=1>” .
                  “<th>name</th>” .
    ...

Tuesday, March 17, 2009
if ($cgi->param(‘action’) eq ‘all’) {
        my $sql = “select * from customer”;
        my $rows =
            $dbh->selectall_arrayref($sql);
        if (@$rows) {
            print “<table border=1>” .
                  “<th>name</th>” .
    ...

Tuesday, March 17, 2009
Monolith
Tuesday, March 17, 2009
:-(
Tuesday, March 17, 2009
Rails
Tuesday, March 17, 2009
Merb
                          Sinatra
                           Mack
                          Ramaze
                          Waves
Tuesday, March 17, 2009
Authentication



Tuesday, March 17, 2009
Single Sign-On



Tuesday, March 17, 2009
Caching



Tuesday, March 17, 2009
Authentication Example:
            OpenID + OAuth


Tuesday, March 17, 2009
Install Auth Plugin(s)




Tuesday, March 17, 2009
Install Auth Plugin(s)
                          Generate Controllers




Tuesday, March 17, 2009
Install Auth Plugin(s)
                          Generate Controllers
                          Generate Models




Tuesday, March 17, 2009
Install Auth Plugin(s)
                          Generate Controllers
                          Generate Models
                          Generate Migrations




Tuesday, March 17, 2009
Install Auth Plugin(s)
                          Generate Controllers
                          Generate Models
                          Generate Migrations
                          Modify Existing Controllers



Tuesday, March 17, 2009
Install Auth Plugin(s)
                          Generate Controllers
                          Generate Models
                          Generate Migrations
                          Modify Existing Controllers
                          Monkey Patch Rails


Tuesday, March 17, 2009
:-(
Tuesday, March 17, 2009
The Web

Tuesday, March 17, 2009
Tuesday, March 17, 2009
HTTP




Tuesday, March 17, 2009
Intermediaries



         HTTP




Tuesday, March 17, 2009
Intermediaries   App



         HTTP




Tuesday, March 17, 2009
Intermediaries   App



         HTTP




Tuesday, March 17, 2009
Rack
Tuesday, March 17, 2009
Tuesday, March 17, 2009
HTTP




Tuesday, March 17, 2009
Intermediaries



         HTTP




Tuesday, March 17, 2009
Middleware



         HTTP




Tuesday, March 17, 2009
Middleware   App



         HTTP




Tuesday, March 17, 2009
Rack is the Web

Tuesday, March 17, 2009
The Web is Rack

Tuesday, March 17, 2009
WSGI
Tuesday, March 17, 2009
SPEC
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
run lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
config.ru

Tuesday, March 17, 2009
$ rackup config.ru


Tuesday, March 17, 2009
$ curl http://localhost:9292



Tuesday, March 17, 2009
Hello
Tuesday, March 17, 2009
class App
                            def call(env)
                             [200, {...}, [...]]
                            end
                          end


Tuesday, March 17, 2009
SPEC
Tuesday, March 17, 2009
$ rake SPEC


Tuesday, March 17, 2009
Rack::Lint
Tuesday, March 17, 2009
lambda { |env|
           [
             200,
             {
                ‘Content-Type’ => ‘text/plain’,
                ‘Content-Length’ => ‘5’
             },
             [‘Hello’]
           ]
         }
Tuesday, March 17, 2009
env
Tuesday, March 17, 2009
REQUEST_METHOD



Tuesday, March 17, 2009
env[‘REQUEST_METHOD’]




Tuesday, March 17, 2009
GET
                          PUT
                          POST
                          DELETE
                          HEAD
                          OPTIONS
                          TRACE

Tuesday, March 17, 2009
PATH_INFO



Tuesday, March 17, 2009
/items/123



Tuesday, March 17, 2009
HTTP_*



Tuesday, March 17, 2009
HTTP_ACCEPT



Tuesday, March 17, 2009
application/json



Tuesday, March 17, 2009
rack.*



Tuesday, March 17, 2009
rack.input

                          (the input stream)




Tuesday, March 17, 2009
#gets
                          #each
                          #read
                          #rewind

Tuesday, March 17, 2009
yournamespace.*



Tuesday, March 17, 2009
request = Rack::Request.new(env)




Tuesday, March 17, 2009
request.post?




Tuesday, March 17, 2009
request.params[‘id’]




Tuesday, March 17, 2009
request[‘HTTP_IF_MATCH’]




Tuesday, March 17, 2009
m/
Tuesday, March 17, 2009
Middleware   App



         HTTP




Tuesday, March 17, 2009
use MiddlewareA
                          use MiddlewareB
                          use MiddlewareC
                          run app

Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
rack-contrib

             http://github.com/rack/rack-contrib




Tuesday, March 17, 2009
Rack::Profiler



Tuesday, March 17, 2009
Rack::MailExceptions



Tuesday, March 17, 2009
Rack::JSONP



Tuesday, March 17, 2009
Rack::CSSHTTPRequest



Tuesday, March 17, 2009
Rack::Cache

     http://github.com/rtomayko/rack-cache



Tuesday, March 17, 2009
Rack::NotFound



Tuesday, March 17, 2009
404



Tuesday, March 17, 2009
Middleware   App



         HTTP




Tuesday, March 17, 2009
use MiddlewareA
                          use MiddlewareB
                          use MiddlewareC
                          run app

Tuesday, March 17, 2009
class App
                            def call(env)
                             [200, {...}, [...]]
                            end
                          end


Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
class GoSlower
                            def initialize(app)
                             @app = app
                            end

                           def call(env)
                            sleep(1)
                            @app.call(env)
                           end
                          end
Tuesday, March 17, 2009
use MiddlewareA
                          use MiddlewareB
                          use MiddlewareC
                          run app

Tuesday, March 17, 2009
Middleware   App



         HTTP




Tuesday, March 17, 2009
Middleware   App



         HTTP




Tuesday, March 17, 2009
Cooperative Middleware



Tuesday, March 17, 2009
URI Space



Tuesday, March 17, 2009
/*



Tuesday, March 17, 2009
/just-what-it-needs




Tuesday, March 17, 2009
CloudKit



Tuesday, March 17, 2009
Open Web
                           JSON
                          Appliance

Tuesday, March 17, 2009
expose :notes, :todos




Tuesday, March 17, 2009
expose :notes, :todos




Tuesday, March 17, 2009
contain :notes, :todos




Tuesday, March 17, 2009
use Rack::Pool::Session
    use CloudKit::OAuthFilter
    use CloudKit::OpenIDFilter
    use CloudKit::Service, :collections => [:notes, :todos]
    (run DefaultApp)




Tuesday, March 17, 2009
CloudKit::OAuthFilter

                          /oauth/*




Tuesday, March 17, 2009
CloudKit::OpenIDFilter
                          /login
                          /logout
                          /openid_complete



Tuesday, March 17, 2009
CloudKit::Service
                               /notes/*
                               /todos/*




Tuesday, March 17, 2009
?
Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service




Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service




Tuesday, March 17, 2009
Browser


                                  {...}
                          OAuth            OpenID   Service




Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service




Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service

                                    {...}

                                    Login



Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service




Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service




Tuesday, March 17, 2009
Browser


                          OAuth    OpenID   Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Service or Desktop App


                                  {...}
                          OAuth           OpenID   Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service

                                     {...}

                                     Login



Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Service or Desktop App


                          OAuth     OpenID     Service




Tuesday, March 17, 2009
Announcing
                          Middleware
                           Presence

Tuesday, March 17, 2009
HTTP

                          Via

Tuesday, March 17, 2009
Via: 1.0 ricky, 1.1 ethel, 1.1 fred




Tuesday, March 17, 2009
Via: 1.0 ricky, 1.1 ethel, 1.1 fred




Tuesday, March 17, 2009
Via: 1.0 ricky, 1.1 ethel, 1.1 fred




Tuesday, March 17, 2009
Via: 1.0 ricky, 1.1 ethel, 1.1 fred




Tuesday, March 17, 2009
env[‘cloudkit.auth’] = 1




Tuesday, March 17, 2009
env[‘cloudkit.via’] << ‘cloudkit.filter.oauth’




Tuesday, March 17, 2009
env[‘cloudkit.via’] << ‘cloudkit.filter.openid’




Tuesday, March 17, 2009
env[‘cloudkit.user’] = ‘http://joncrosby.me’




Tuesday, March 17, 2009
Alternative Stacks



Tuesday, March 17, 2009
Rack::Map



Tuesday, March 17, 2009
map “/” do
                           run Blog::Public
                          end

                          map “/db” do
                           run Blog::DBAdmin
                          end

Tuesday, March 17, 2009
Rack::Map + Sinatra



Tuesday, March 17, 2009
require ‘sinatra/base’

                          module Blog
                           class Public < Sinatra::Base
                             get ‘/’ do
                              erb :index
                             end
                           end
                          end
Tuesday, March 17, 2009
require ‘sinatra/base’

                          module Blog
                           class Public < Sinatra::Base
                             get ‘/’ do
                              erb :index
                             end
                           end
                          end
Tuesday, March 17, 2009
require ‘sinatra/base’

                          module Blog
                           class Public < Sinatra::Base
                             get ‘/’ do
                              erb :index
                             end
                           end
                          end
Tuesday, March 17, 2009
require ‘sinatra’

                             for “apps”

                           /* URI space


Tuesday, March 17, 2009
require ‘sinatra/base’

                          MyClass < Sinatra::Base

   Minimal Sinatra (routing, rendering, etc.)


Tuesday, March 17, 2009
m/
Tuesday, March 17, 2009
use MySinatraApp
                          run SomeOtherApp




Tuesday, March 17, 2009
Rack::Cascade



Tuesday, March 17, 2009
app1 = lambda { ... }
       app2 = lambda { ... }
       run Rack::Cascade.new([app1, app2])




Tuesday, March 17, 2009
Sinatra as Middleware
                         in Rails


Tuesday, March 17, 2009
class X < Sinatra::Base
             get ‘/what’ do
              ‘what’
             end
           end

           Rails::Initializer.run do |config|
            config.use.middleware ‘X’
           end
Tuesday, March 17, 2009
CloudKit in Rails



Tuesday, March 17, 2009
Rails::Initializer.run do |config|
  config.use.middleware ‘CloudKit::Service’, :collections => [:notes, :todos]
 end




Tuesday, March 17, 2009
Middleware   App



         HTTP




Tuesday, March 17, 2009
Middleware   App

                          Rails

         HTTP




Tuesday, March 17, 2009
Middleware   App

                          Rails   Merb

         HTTP




Tuesday, March 17, 2009
Middleware       App

                          Rails   Merb   *

         HTTP




Tuesday, March 17, 2009
New Unit of Composition



Tuesday, March 17, 2009
m/
Tuesday, March 17, 2009

More Related Content

Similar to Rack Middleware

SOA não precisa ser buzzword
SOA não precisa ser buzzwordSOA não precisa ser buzzword
SOA não precisa ser buzzwordFabio Kung
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009Fabio Akita
 
WordPress SEO - SEO-Campixx
WordPress SEO - SEO-CampixxWordPress SEO - SEO-Campixx
WordPress SEO - SEO-Campixxsteffenhd
 
Getting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlGetting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlJohn Paulett
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebFelipe Ribeiro
 
Beyond The Web: Drupal Meets The Desktop (And Mobile)
Beyond The Web: Drupal Meets The Desktop (And Mobile)Beyond The Web: Drupal Meets The Desktop (And Mobile)
Beyond The Web: Drupal Meets The Desktop (And Mobile)Justin Miller
 
Huffduffer
HuffdufferHuffduffer
Huffdufferadactio
 
The State of the Social Desktop 2009
The State of the Social Desktop 2009The State of the Social Desktop 2009
The State of the Social Desktop 2009Frank Karlitschek
 
Vladimir Oane
Vladimir OaneVladimir Oane
Vladimir Oaneevensys
 
Foundation of Web Application Developmnet - XHTML
Foundation of Web Application Developmnet - XHTMLFoundation of Web Application Developmnet - XHTML
Foundation of Web Application Developmnet - XHTMLVashira Ravipanich
 
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2Plone in the Cloud - an on-demand CMS hosted on Amazon EC2
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2Jazkarta, Inc.
 
Latinoware Rails 2009
Latinoware Rails 2009Latinoware Rails 2009
Latinoware Rails 2009Fabio Akita
 
Outside In Development With Cucumber
Outside In Development With CucumberOutside In Development With Cucumber
Outside In Development With CucumberLittleBIGRuby
 
Outside-In Development With Cucumber
Outside-In Development With CucumberOutside-In Development With Cucumber
Outside-In Development With CucumberBen Mabey
 
Rails For Kids 2009
Rails For Kids 2009Rails For Kids 2009
Rails For Kids 2009Fabio Akita
 
Introduction to Scala for Java Developers
Introduction to Scala for Java DevelopersIntroduction to Scala for Java Developers
Introduction to Scala for Java DevelopersMichael Galpin
 
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume LaforgeGaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume LaforgeGuillaume Laforge
 

Similar to Rack Middleware (20)

SOA não precisa ser buzzword
SOA não precisa ser buzzwordSOA não precisa ser buzzword
SOA não precisa ser buzzword
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
 
WordPress SEO - SEO-Campixx
WordPress SEO - SEO-CampixxWordPress SEO - SEO-Campixx
WordPress SEO - SEO-Campixx
 
Getting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlGetting Started with (Distributed) Version Control
Getting Started with (Distributed) Version Control
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento Web
 
Agilidade e qualidade de projetos
Agilidade e qualidade de projetosAgilidade e qualidade de projetos
Agilidade e qualidade de projetos
 
Beyond The Web: Drupal Meets The Desktop (And Mobile)
Beyond The Web: Drupal Meets The Desktop (And Mobile)Beyond The Web: Drupal Meets The Desktop (And Mobile)
Beyond The Web: Drupal Meets The Desktop (And Mobile)
 
Locos x Rails
Locos x RailsLocos x Rails
Locos x Rails
 
Huffduffer
HuffdufferHuffduffer
Huffduffer
 
The State of the Social Desktop 2009
The State of the Social Desktop 2009The State of the Social Desktop 2009
The State of the Social Desktop 2009
 
Enecomp 2009
Enecomp 2009Enecomp 2009
Enecomp 2009
 
Vladimir Oane
Vladimir OaneVladimir Oane
Vladimir Oane
 
Foundation of Web Application Developmnet - XHTML
Foundation of Web Application Developmnet - XHTMLFoundation of Web Application Developmnet - XHTML
Foundation of Web Application Developmnet - XHTML
 
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2Plone in the Cloud - an on-demand CMS hosted on Amazon EC2
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2
 
Latinoware Rails 2009
Latinoware Rails 2009Latinoware Rails 2009
Latinoware Rails 2009
 
Outside In Development With Cucumber
Outside In Development With CucumberOutside In Development With Cucumber
Outside In Development With Cucumber
 
Outside-In Development With Cucumber
Outside-In Development With CucumberOutside-In Development With Cucumber
Outside-In Development With Cucumber
 
Rails For Kids 2009
Rails For Kids 2009Rails For Kids 2009
Rails For Kids 2009
 
Introduction to Scala for Java Developers
Introduction to Scala for Java DevelopersIntroduction to Scala for Java Developers
Introduction to Scala for Java Developers
 
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume LaforgeGaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
Gaelyk quickie - GR8Conf Europe 2010 - Guillaume Laforge
 

Recently uploaded

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Recently uploaded (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

Rack Middleware

Editor's Notes