SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Último

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
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
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 

Último (20)

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
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
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 

Rack Middleware

Notas do Editor