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

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
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
 
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
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
🐬 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
 
[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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
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
 
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
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.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 🐘
 
[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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 

Rack Middleware

Editor's Notes