SlideShare une entreprise Scribd logo
1  sur  84
Télécharger pour lire hors ligne
TorqueBox
Enterprise-Grade Ruby Application Server
Bob McWhirter




                                 Asheville.rb
                                 Asheville, North Carolina


                                 2 December 2009




Creative Commons BY-SA 3.0
Bob McWhirter

•   Started in C++
•   Moved to Java with JDK 1.1.8
•   Began Ruby and Rails in 2005
•   Lived in Asheville for 4 years
•   Did some open-source along the way


                       2
Open-Source




        3
Currently
                Linux
                 +
                Java
                 +
                Bob
            4
== Ruby?
   5
Actual R&D

I get to actually research things,
and develop new stuff. Honest-
to-goodness technology R&D
investment.

                6
TorqueBox
...in a nutshell




                   7
What is it?


A merging of the Ruby
language with the Java
Virtual Machine.

           8
Why bother?

As Ruby matures, it’s quickly
being used to solve larger, more
difficult problems.
Problems we’ve solved in the
enterprise with Java already.

                9
Such as...?

•   Scalability
•   Efficient & asynchronous messaging
•   Scheduled jobs
•   Telephony



                     10
Scalability
...because “Rails doesn’t scale”




               11
Web Scalability




         12
mongrel-style

               Ruby

              mongrel




         13
mongrel-style
                      Ruby

                     mongrel



                      Ruby

                     mongrel

        httpd

                      Ruby

                     mongrel



                      Ruby

                     mongrel




                14
mongrel-style
                      Ruby

                     mongrel



                      Ruby

                     mongrel

        httpd

                      Ruby

                     mongrel



                      Ruby

                     mongrel




                15
passenger style
                         Conservative Spawning



                                     Rails


                                     Rails
     httpd   Passenger        Ruby
                                     Rails


                                     Rails




                         16
passenger style
                                    Smart Spawning



                                                Worker


                                                Worker
    httpd   Passenger        Ruby       Rails
                                                Worker

                                                Worker




                        17
TorqueBox style

       TorqueBox

          http



         queues       MyApp   Ruby   Rails



        scheduler




                 18
Clustering
Multiplicity rocks.




                19
Concerns


When clustering, we care
about sessions and load
balancing.

            20
Sessions

With multiple application
servers, sessions must be
shared, or session affinity
must be used.

             21
Session Sharing

Sharing sessions requires
using a central store, such as
memcached or ActiveRecord
session stores.

              22
Session Sharing
    Worker




    Worker

                  memcached

    Worker




    Worker




             23
Session Sharing

But what if the central session
store is unavailable, or
overwhelmed?
Single point of failure!

                24
Session Sharing
    Worker




    Worker

                  memcached

    Worker




    Worker




             25
Session Affinity

Session affinity is making sure
the same back-end server
handles all of Todd’s requests.


               26
Session Affinity
                    Worker

                             Todd’s
                    Worker
                             server
Todd     Balancer

                    Worker




                    Worker




            27
Session Affinity

But what if the back-end server
handling Todd’s requests
becomes unavailable?


                28
Session Affinity
                    Worker

                             Todd’s
                    Worker
                             server
Todd     Balancer

                    Worker




                    Worker




            29
Use Both!

Use session affinity when you
can, but allow workers to
replicate session information
when necessary.

             30
Use Both!

                   Worker Cache




                   Worker Cache

       Balancer

                   Worker Cache




                   Worker Cache




              31
Spanning Hosts
                   Host


                    Worker Cache



                   Host


                    Worker Cache


        Balancer
                   Host


                    Worker Cache



                   Host


                    Worker Cache




          32
Balancer in the cluster

Using mod_cluster for
Apache httpd, the balancer
participates in the cluster
view.

            33
mod_cluster

As server nodes join and
leave the cluster, the
balancer (mod_cluster) is
aware of these changes.

            34
mod_proxy_ajp

The Apache JServ Protocol
(AJP) is an efficient pipeline for
shuffling HTTP requests to a Java
application-server for handling.

                35
Oh yeah...

• Multiple apps per server or cluster.
• Virtual-host support baked in.
• Context-path support.
• Full Rack support (bare, Sinatra, etc).
• Full Java-EE stack.
                  36
And bundles


  myapp.rails
  myapp.rack

        37
And bundles
Single ZIP file bundle of an app.
Easily move specific artifact
between staging and production.
Required for cluster auto-farming
deployment.


                38
Rails scales!
...but there’s more than just port 80.




                  39
Task Queues
Simply install Erlang, set up
RabbitMQ, use an AMQP gem...




               40
Or just use TorqueBox
...and just write a Ruby class.




               41
app/queues/**_queue.rb


• A class per queue.
• A method per task handled by the
  queue.
• A simple API to toss stuff around.
                42
my_first_queue.rb
class MyFirstQueue
  include TorqueBox::Queues::Base

  def task_one(payload={})
    o = Thing.find_by_id( payload[:thing_id] )
    o.frob!
    o.save!
  end

end

                      43
my_first_queue.rb
class MyFirstQueue
  include TorqueBox::Queues::Base

  def task_one(payload={})
    o = Thing.find_by_id( payload[:thing_id] )
    o.frob!
    o.save!
  end

end

                      44
my_first_queue.rb
class MyFirstQueue
  include TorqueBox::Queues::Base

  def task_one(payload={})
    o = Thing.find_by_id( payload[:thing_id] )
    o.frob!
    o.save!
  end

end

                      45
my_first_queue.rb
class MyFirstQueue
  include TorqueBox::Queues::Base

  def task_one(payload={})
    o = Thing.find_by_id( payload[:thing_id] )
    o.frob!
    o.save!
  end

end

                      46
my_first_queue.rb
class MyFirstQueue
  include TorqueBox::Queues::Base

  def task_one(payload={})
    o = Thing.find_by_id( payload[:thing_id] )
    o.frob!
    o.save!
  end

end

                      47
Enqueue

TorqueBox::Queues.enqueue(
  ‘MyFirstQueue’,
  :task_one,
  { :thing_id=>42 }
)

            48
Enqueue

TorqueBox::Queues.enqueue(
  ‘MyFirstQueue’,
  :task_one,
  { :thing_id=>42 }
)

            49
Enqueue

TorqueBox::Queues.enqueue(
  ‘MyFirstQueue’,
  :task_one,
  { :thing_id=>42 }
)

            50
Enqueue

TorqueBox::Queues.enqueue(
  ‘MyFirstQueue’,
  :task_one,
  { :thing_id=>42 }
)

            51
Enqueue


Use from your controllers,
ActiveRecord observers, or
other queues.

            52
Enqueue
class User < ActiveRecord::Base
  has_attached_file :avatar, ...
  after_save do |user|
    TorqueBox::Queues.enqueue(
      :image_processor_queue,
      :process_user_avatar,
      user.id
    ) if user.avatar_needs_processing?
  end
end

                    53
Enqueue
class User < ActiveRecord::Base
  has_attached_file :avatar, ...
  after_save do |user|
    TorqueBox::Queues.enqueue(
      :image_processor_queue,
      :process_user_avatar,
      user.id
    ) if user.avatar_needs_processing?
  end
end

                    54
Enqueue
class User < ActiveRecord::Base
  has_attached_file :avatar, ...
  after_save do |user|
    TorqueBox::Queues.enqueue(
      :image_processor_queue,
      :process_user_avatar,
      user.id
    ) if user.avatar_needs_processing?
  end
end

                    55
Enqueue
class User < ActiveRecord::Base
  has_attached_file :avatar, ...
  after_save do |user|
    TorqueBox::Queues.enqueue(
      :image_processor_queue,
      :process_user_avatar,
      user.id
    ) if user.avatar_needs_processing?
  end
end

                    56
Queue Benefits

•   No additional systems or languages to
    setup and maintain.
•   Clustering/HA available (including durable
    messages).
•   No explicit queue configuration required.


                      57
Scheduled Jobs
Just write a script, and a crontab,
and deploy it with your app. Don’t
forget to undeploy and update it
also. And check cron.log for errors.

                 58
Or just use TorqueBox
...and just write a Ruby class.




               59
app/jobs/**.rb


• A class per queue.
• A method called run()
• Configure it via jobs.yml

               60
my_first_job.rb
class MyFirstJob
  include TorqueBox::Jobs::Base

  def run()
    subscriptions = Subscription.find(:all)
    subscriptions.each do |e|
      send_newsletter( e )
    end
  end
end

                    61
my_first_job.rb
class MyFirstJob
  include TorqueBox::Jobs::Base

  def run()
    subscriptions = Subscription.find(:all)
    subscriptions.each do |e|
      send_newsletter( e )
    end
  end
end

                    62
my_first_job.rb
class MyFirstJob
  include TorqueBox::Jobs::Base

  def run()
    subscriptions = Subscription.find(:all)
    subscriptions.each do |e|
      send_newsletter( e )
    end
  end
end

                    63
my_first_job.rb
class MyFirstJob
  include TorqueBox::Jobs::Base

  def run()
    subscriptions = Subscription.find(:all)
    subscriptions.each do |e|
      send_newsletter( e )
    end
  end
end

                    64
config/jobs.yml


subscription.mailer:
  description: send out newsletters
  job: MyFirstJob
  cron: 20 7 1 * * ?




                    65
config/jobs.yml


subscription.mailer:
  description: send out newsletters
  job: MyFirstJob
  cron: 20 7 1 * * ?




                    66
config/jobs.yml


subscription.mailer:
  description: send out newsletters
  job: MyFirstJob
  cron: 20 7 1 * * ?




                    67
config/jobs.yml


subscription.mailer:
  description: send out newsletters
  job: MyFirstJob
  cron: 20 7 1 * * ?




                    68
config/jobs.yml


subscription.mailer:
  description: send out newsletters
  job: MyFirstJob
  cron: 20 7 1 * * ?




                    69
config/jobs.yml



20 7 1 * * ?
sec         hour         mon
      min          d.o.m.   d.o.y

              70
config/jobs.yml

   20 7 1 * * ?
   Every day,
   at 1:07:20 am
        71
Scheduler Benefits
•   Uses existing Ruby interpreter when jobs
    fire. No waiting for Ruby/Rails to load.
•   No external system (crontab) to maintain.
•   No additional daemons to monitor
    (daemonize)
•   Full Rails environment (AR models,
    queues, lib/)

                     72
Telephony
Just... um... something... with
Asterisk?


               73
Or just use TorqueBox
...and just write a Ruby class.




               74
Initiate Calls

By doing SIP magic, your
application can initiate
calls, or connect multiple
parties.

             75
Press 2 to STFU

Using the Media Server,
automated messages,
interactive voice response
(IVR) and other advanced
systems can be built.
              76
OMGWTFBBQPONIES!


Have your app (for instance, upon
successful job completion) fire off an
SMS.

                  77
Telephony Benefits



•   It’s just freakin’ cool.


                78
Manageability
Okay, sorta speculative, forward-
looking dreaming, but...



               79
Manageable

Everything ultimately maps to a
managed object within the Java
application-server.
We have the JOPR management
console.

               80
But not yet


But we haven’t exposed
everything in a super nice
fashion. Yet.

             81
All-in-One
Everything’s in the tin.
Everything works together.


              82
More information...
http://torquebox.org/
http://github.com/torquebox
http://twitter.com/torquebox


               83
Thanks
                               +
                              Q&A

Creative Commons BY-SA 3.0
                               84

Contenu connexe

Tendances

JUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBoxJUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBoxmarekgoldmann
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrindermarekgoldmann
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011Lance Ball
 
Torquebox - O melhor dos dois mundos
Torquebox - O melhor dos dois mundosTorquebox - O melhor dos dois mundos
Torquebox - O melhor dos dois mundosBruno Oliveira
 
When Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the EnterpriseWhen Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the Enterprisebenbrowning
 
Torquebox OSCON Java 2011
Torquebox OSCON Java 2011Torquebox OSCON Java 2011
Torquebox OSCON Java 2011tobiascrawley
 
The Enterprise Strikes Back
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes BackBurke Libbey
 
Torquebox @ Raleigh.rb - April 2011
Torquebox @ Raleigh.rb - April 2011Torquebox @ Raleigh.rb - April 2011
Torquebox @ Raleigh.rb - April 2011tobiascrawley
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyNick Sieger
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache CamelFuseSource.com
 
Apache camel overview dec 2011
Apache camel overview dec 2011Apache camel overview dec 2011
Apache camel overview dec 2011Marcelo Jabali
 
Using Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBUsing Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBHiro Asari
 
The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for RubyHiroshi SHIBATA
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developergicappa
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)ngotogenome
 
Apache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source IntegrationApache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source Integrationprajods
 
ZK_Arch_notes_20081121
ZK_Arch_notes_20081121ZK_Arch_notes_20081121
ZK_Arch_notes_20081121WANGCHOU LU
 

Tendances (20)

JUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBoxJUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBox
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
 
Torquebox - O melhor dos dois mundos
Torquebox - O melhor dos dois mundosTorquebox - O melhor dos dois mundos
Torquebox - O melhor dos dois mundos
 
When Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the EnterpriseWhen Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the Enterprise
 
Torquebox OSCON Java 2011
Torquebox OSCON Java 2011Torquebox OSCON Java 2011
Torquebox OSCON Java 2011
 
The Enterprise Strikes Back
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes Back
 
Torquebox @ Raleigh.rb - April 2011
Torquebox @ Raleigh.rb - April 2011Torquebox @ Raleigh.rb - April 2011
Torquebox @ Raleigh.rb - April 2011
 
How DSL works on Ruby
How DSL works on RubyHow DSL works on Ruby
How DSL works on Ruby
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRuby
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
 
Apache camel overview dec 2011
Apache camel overview dec 2011Apache camel overview dec 2011
Apache camel overview dec 2011
 
Using Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBUsing Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRB
 
The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for Ruby
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
 
First Day With J Ruby
First Day With J RubyFirst Day With J Ruby
First Day With J Ruby
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
 
Apache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source IntegrationApache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source Integration
 
Ruby 2.4 Internals
Ruby 2.4 InternalsRuby 2.4 Internals
Ruby 2.4 Internals
 
ZK_Arch_notes_20081121
ZK_Arch_notes_20081121ZK_Arch_notes_20081121
ZK_Arch_notes_20081121
 

Similaire à TorqueBox Enterprise-Grade Ruby Application Server

MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?Joshua Ballanco
 
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
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin ProgrammingAtlassian
 
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Paolo Negri
 
Jazoon 2011 - Smart EAI with Apache Camel
Jazoon 2011 - Smart EAI with Apache CamelJazoon 2011 - Smart EAI with Apache Camel
Jazoon 2011 - Smart EAI with Apache CamelKai Wähner
 
Ruby for C#-ers (ScanDevConf 2010)
Ruby for C#-ers (ScanDevConf 2010)Ruby for C#-ers (ScanDevConf 2010)
Ruby for C#-ers (ScanDevConf 2010)Thomas Lundström
 
Ruby on rails探索
Ruby on rails探索Ruby on rails探索
Ruby on rails探索Mu Chun Wang
 
Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Wen-Tien Chang
 
Deployment with Ruby on Rails
Deployment with Ruby on RailsDeployment with Ruby on Rails
Deployment with Ruby on RailsJonathan Weiss
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudHiro Asari
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMRaimonds Simanovskis
 
Rocket Fuelled Cucumbers
Rocket Fuelled CucumbersRocket Fuelled Cucumbers
Rocket Fuelled CucumbersJoseph Wilk
 
Middleware as Code with mruby
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mrubyHiroshi SHIBATA
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Charles Nutter
 
Getting Distributed (With Ruby On Rails)
Getting Distributed (With Ruby On Rails)Getting Distributed (With Ruby On Rails)
Getting Distributed (With Ruby On Rails)martinbtt
 

Similaire à TorqueBox Enterprise-Grade Ruby Application Server (20)

Concurrency in ruby
Concurrency in rubyConcurrency in ruby
Concurrency in ruby
 
MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?
 
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...
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
 
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
 
Ruby Under The Hood
Ruby Under The HoodRuby Under The Hood
Ruby Under The Hood
 
MacRuby
MacRubyMacRuby
MacRuby
 
Jazoon 2011 - Smart EAI with Apache Camel
Jazoon 2011 - Smart EAI with Apache CamelJazoon 2011 - Smart EAI with Apache Camel
Jazoon 2011 - Smart EAI with Apache Camel
 
Ruby for C#-ers (ScanDevConf 2010)
Ruby for C#-ers (ScanDevConf 2010)Ruby for C#-ers (ScanDevConf 2010)
Ruby for C#-ers (ScanDevConf 2010)
 
Ruby on rails探索
Ruby on rails探索Ruby on rails探索
Ruby on rails探索
 
Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門
 
Deployment with Ruby on Rails
Deployment with Ruby on RailsDeployment with Ruby on Rails
Deployment with Ruby on Rails
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the Cloud
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVM
 
Rocket Fuelled Cucumbers
Rocket Fuelled CucumbersRocket Fuelled Cucumbers
Rocket Fuelled Cucumbers
 
Middleware as Code with mruby
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mruby
 
PDF Ruby on Rails 3 Day BC
 PDF Ruby on Rails 3 Day BC PDF Ruby on Rails 3 Day BC
PDF Ruby on Rails 3 Day BC
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016
 
Getting Distributed (With Ruby On Rails)
Getting Distributed (With Ruby On Rails)Getting Distributed (With Ruby On Rails)
Getting Distributed (With Ruby On Rails)
 

Dernier

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 

Dernier (20)

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 

TorqueBox Enterprise-Grade Ruby Application Server