SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie TorqueBox for Rubyists

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
 

Ähnlich wie TorqueBox for Rubyists (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)
 

Kürzlich hochgeladen

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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

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...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

TorqueBox for Rubyists