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

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
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
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
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
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
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
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 

Recently uploaded (20)

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
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
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
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
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
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
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
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
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 

Rack Middleware

Editor's Notes