SlideShare uma empresa Scribd logo
1 de 114
Baixar para ler offline
TorqueBox
    Ruby on Rails (and Rack)
    with Enterprise Goodness


Bob McWhirter       John Williams
Red Hat
Agenda: Part 1

   Who are these guys up here, talking to you?
   The Language Cusp
       Ruby vs Java
       Polyglotism
       Picture of Bill
   App servers for Java and Ruby
   Basic of Rails on TorqueBox
   Beyond Rails on TorqueBox
   Rack on TorqueBox
   Sinatra on TorqueBox
Agenda: Part 2

   Why TorqueBox
   Deploying with Bundles
   Deploying using Capistrano
Who is Bob McWhirter?

 Active in open-source
 Doing Java for a dozen years


 Doing Ruby for a handful of years


 Research & Prototyping group at JBoss
Who is John Williams?

 Early user of TorqueBox
 Interested in anything open-source


 Doing RoR for 4 years


 Doing web development for 8 years


 Wrote theme music to Star Wars
Who are you?
Java is facing
competition from
other languages
The Language Cusp
polyglot:
  a mixture or
  confusion of
   languages
Polyglotism


“Polyglotism
is the worst
idea I ever
heard”
-Bill Burke, coworker
Polyglotism                Ruby
                           Java
                          Scala
                          Groovy


Polyglotism may
indeed be bad
within a single
developer’s head   Ruby            Java

or even within a
single team.
Polyglotism


Underlying
infrastructure, if             Ruby

polyglotic, can      Other
                             JBoss


support a larger             Java
community and
market.
Services vs APIs


JBoss already has a full
suite of enterprise-grade
services.

        Web Container   Message Bus    SOAP



                        JBoss AS 5.x
Services vs APIs


Wrapped with standard
Java APIs...
                        Java Application
         Servlet API       JMS API         JAX-WS API



        Web Container    Message Bus         SOAP



                         JBoss AS 5.x
Services vs APIs


Why not wrap with Ruby
APIs?
                        Ruby Application
            Rails         TorqueBox        TorqueBox



        Web Container    Message Bus         SOAP



                         JBoss AS 5.x
Ruby App Server


Then, you end up with an
enterprise-grade Ruby app
server.
Ruby App Server
   in 4 Steps
Step 1




  Ruby on Rails
Step 1: Rails

   JRuby
       The guys got regular Rails running
        well under mongrel using JRuby
       There is also Warbler for creating
        deployable WAR files
       Gl*ssfish can run Rails apps in-
        place
Step 1: Rails




   But that’s not
   good enough
Step 1: Rails on JBoss

   JBoss
       Run Rails apps in-place under JBoss
       No WAR-creation required
       Runs alongside other JEE apps
       Runs alongside other Servlets within
        the same application
Step 1.5




           Databases
Step 1.5: Databases

   Since Java has the very nice JDBC
    drivers, let’s use them
   But don’t want to teach Rubyists JDBC
   Add a few ActiveRecord driver gems,
    and your Rails application accesses the
    DB through JDBC
Step 1.5: Databases

   No changes to config/database.yml
    required
   Rails is managing the connections
    itself
Step 1.75: Managed connections on Rails

   If’n you want to use a managed
    datasource deployed outside of the
    application...
       You can make changes to config/
        database.yml to use a datasource
       Datasource located via JNDI
Step 1.75: Managed connections on Rails

   You can even deploy your datasource
    from within your Rails application:
       config/mydb-ds.xml
Step 1.97: Deployment


  Deployment with
TorqueBox is slightly
different, but familiar
   to JBoss users.
Inversion of Deployment


Traditional Rails
   You pull HTTP functionality into
    your app
   You run your app, which listens
    on a port
Inversion of Deployment: Traditional
                                HTTP listener
                              web-server gems
                                mongrel, etc


           controllers              views
            controllers               views
              controllers               views


            models
             models
              models
               models

                     Rails Application
Inversion of Deployment


Rails in an app server
   Load your app into an app-server
    which already listens to HTTP
   App server routes some requests
    to your app or other apps
Inversion of Deployment: App server
                                                              HTTP listener




                                       controllers              views
                                        controllers               views
                                          controllers               views


         controllers                    models
                                  views models
          controllers               views models
            controllers               views models


          models                                 Rails Application
           models
            models
             models

                   Rails Application


                                  App Server
Deployment

   You don’t “start the app”
   You “deploy” it into an App Server
   TorqueBox comes with Rake tasks to
    help
       rake torquebox:rails:deploy
       rake torquebox:run
Deployment Descriptor
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
   host: www.myhost.com
Act like normal

   Once deployed, continue to edit
       Models
       Views
       Controllers
   Without re-deploying your app
Go beyond Rails
Step 2: Scheduled Jobs

Sometimes you’ve got a
 recurring task not associated
 with a web request
A cron job
Step 2: Scheduled Jobs

   Let’s use Quartz, it comes with JBoss

                         config/jobs.yml
     github.commit_poller:
       description: Poll GitHub
       job: Github::CommitPoller
       cron: 12 */10 * * * ?
Step 2: Scheduled Jobs

   We’re used to
       app/controllers/**.rb
       app/views/**.erb
       app/models/**.rb
   So let’s go with
     app/jobs/**.rb
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

   Jobs will deploy with your app
   Jobs will undeploy with your app
   Jobs have complete access to your
    ActiveRecord models
   Jobs have complete access to your lib/
    classes
   Jobs can be live edited like anything else
Well, that was easy
Step 3: Async Task Queues

   Sometimes you want something non-
    recurring to happen
   Perhaps outside of the context of a
    web request
   Perhaps triggered by a web request,
    though
That sounds like a
  message queue.

JBoss has one of those.
Step 3: Async Task Queues

   Like you’d expect...
     app/queues/**.rb


   A class per queue
   A method per task
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Enqueuing

MyQueue.enqueue(:do_something,{
     :quantity=>100,
     :cheese=>:gouda
})
Step 3: Enqueuing

MyQueue.enqueue(:do_something,{
     :quantity=>100,
     :cheese=>:gouda
})
Step 3: Enqueuing

MyQueue.enqueue(:do_something,{
     :quantity=>100,
     :cheese=>:gouda
})
Step 3: Async Task Queues

   A JMS queue is created for each
    queue class
   The payload is anything that can be
    serialized into bytes
       Including ActiveRecord models
Sometimes you’ve
got to use SOAP
Step 4: SOAP

   Sure, SOAP is obnoxious
   SOAP from Ruby is obnoxious, and
    underpowered
   Apache CXF is some good stuff
   Sometimes you have to do SOAP, so
    at least you can do it from Ruby
Step 4: SOAP

   Goal is not to generate WSDL from
    Ruby endpoints
   Instead, only supports binding Ruby
    endpoints to existing WSDL
   If you’re doing greenfield
    development, prefer REST. Or
    sockets. Or pigeons.
Step 4: SOAP

   As you’d expect, again...
     app/endpoints/**.rb


       app/endpoints/**.wsdl
Step 4: SOAP

module Amazon
  class Ec2Endpoint

    include TorqueBox::Endpoints::Base

  end
end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

      include TorqueBox::Endpoints::Base

        endpoint_configuration do
           target_namespace 'http://ec2.amazonaws.com/doc/2008-12-01/'
           port_name                  'AmazonEC2'
           security do
              inbound do
                 verify_timestamp
                 verify_signature
              end
           end
        end
 end

end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

      include TorqueBox::Endpoints::Base

        endpoint_configuration do
           target_namespace 'http://ec2.amazonaws.com/doc/2008-12-01/'
           port_name                  'AmazonEC2'
           security do
              inbound do
                 verify_timestamp
                 verify_signature
              end
           end
        end
 end

end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

      include TorqueBox::Endpoints::Base

        endpoint_configuration do
           target_namespace 'http://ec2.amazonaws.com/doc/2008-12-01/'
           port_name                  'AmazonEC2'
           security do
              inbound do
                 verify_timestamp
                 verify_signature
              end
           end
        end
 end

end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

       def describe_instances

         response = create_response

         request.instancesSet.each do |instance_id|
           reservation_info = response.reservationSet.create
           reservation_info.ownerId = ...
         end

         return response

       end
 end

end
Step 4: SOAP

   TorqueBox provides...
       full request/response XSD data-
        binding (like JAXB)
       security, such as X.509 signature
        verification
Now you have a pretty
nice Ruby app server.

   Not too shabby.
Wait, that was just
Ruby on Rails...
Anything Rack

TorqueBox uses Rack
 plumbing to handle RoR
Now Soon will allow

 deploying of arbitrary Rack
 applications
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
Sinatra!
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
Questions?
Deploying Rails
Applications to
 TorqueBox
Why TorqueBox?
Why TorqueBox?
Rails Application           Rails Application


  20 Mongrels                 20 Mongrels


                TorqueBox
  Rails Application     Rails Application


 Capistrano Deployed    Bundle Deployed
Methods to Deploy


Application Bundle   OR Capistrano
Application Bundle


What is an Application Bundle?
Application Bundle

Web Application Archive (WAR) of
     your Rails application.


  It will be created with a .rails
            file extension.
Application Bundle

   How do I create it?
Application Bundle

        App Bundle Rake tasks:


   rake torquebox:rails:bundle
rake torquebox:rails:deploy:bundle
Application Bundle

    What to do next?
Application Bundle

Drop it in your TorqueBox deploy directory.

                   OR
 Deploy it locally using the Rake tasks using:
rake torquebox:rails:deploy:bundle
Application Bundle

     Don’t forget...
Application Bundle

     config/web.yml

        AND
   config/rails-env.yml
config/web.yml


Host   AND   Context
config/web.yml

       Example:


  host: torquebox.org
  context: /
config/rails-env.yml


  Rails Environment
config/rails-env.yml

        Example:


  RAILS_ENV: production
Capistrano


          Complete Example:
http://github.com/torquebox/ballast-rails
Capistrano
         Supports:

daemontools   AND    init.d
Capistrano

      Don’t Forget...


require 'recipes/torquebox'
Questions?

Mais conteúdo relacionado

Mais procurados

Composing Project Dependencies
Composing Project DependenciesComposing Project Dependencies
Composing Project Dependencies
Derek Gallo
 

Mais procurados (20)

Composing Project Dependencies
Composing Project DependenciesComposing Project Dependencies
Composing Project Dependencies
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Serverless Beyond Functions - CTO Club Made in JLM
Serverless Beyond Functions - CTO Club Made in JLMServerless Beyond Functions - CTO Club Made in JLM
Serverless Beyond Functions - CTO Club Made in JLM
 
How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails Presentation
 
All the Laravel Things – Up & Running to Making $$
All the Laravel Things – Up & Running to Making $$All the Laravel Things – Up & Running to Making $$
All the Laravel Things – Up & Running to Making $$
 
Top ten of PHP 7.4
Top ten of PHP 7.4Top ten of PHP 7.4
Top ten of PHP 7.4
 
Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:winConsole Apps: php artisan forthe:win
Console Apps: php artisan forthe:win
 
Avik_RailsTutorial
Avik_RailsTutorialAvik_RailsTutorial
Avik_RailsTutorial
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginners
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP framework
 
Maven
MavenMaven
Maven
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1
 
Maven
MavenMaven
Maven
 
The Guardian Open Platform Content API: Implementation
The Guardian Open Platform Content API: ImplementationThe Guardian Open Platform Content API: Implementation
The Guardian Open Platform Content API: Implementation
 
Java Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldJava Intro: Unit1. Hello World
Java Intro: Unit1. Hello World
 
Ruby an overall approach
Ruby an overall approachRuby an overall approach
Ruby an overall approach
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Web Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureWeb Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the future
 

Semelhante a TorqueBox

Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
pmashchak
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
Vikas Goyal
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 

Semelhante a TorqueBox (20)

Dev streams2
Dev streams2Dev streams2
Dev streams2
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
 
Rails 5 – most effective features for apps upgradation
Rails 5 – most effective features for apps upgradationRails 5 – most effective features for apps upgradation
Rails 5 – most effective features for apps upgradation
 
RoR guide_p1
RoR guide_p1RoR guide_p1
RoR guide_p1
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
 
Ruby Rails Web Development.pdf
Ruby Rails Web Development.pdfRuby Rails Web Development.pdf
Ruby Rails Web Development.pdf
 
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using ruby
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
JRuby in the enterprise
JRuby in the enterpriseJRuby in the enterprise
JRuby in the enterprise
 
Ruby Rails Web Development
Ruby Rails Web DevelopmentRuby Rails Web Development
Ruby Rails Web Development
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
BPMS1
BPMS1BPMS1
BPMS1
 
BPMS1
BPMS1BPMS1
BPMS1
 

Mais de bobmcwhirter (7)

Microservices with JBoss EAP & OpenShift
Microservices with JBoss EAP & OpenShiftMicroservices with JBoss EAP & OpenShift
Microservices with JBoss EAP & OpenShift
 
The Life & Journey of a Professional Open-Source Developer
The Life & Journey of a Professional Open-Source DeveloperThe Life & Journey of a Professional Open-Source Developer
The Life & Journey of a Professional Open-Source Developer
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBox
 
TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannonJBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
 
TorqueBox for Rubyists
TorqueBox for RubyistsTorqueBox for Rubyists
TorqueBox for Rubyists
 

Último

Último (20)

Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 

TorqueBox