SlideShare a Scribd company logo
Lance Ball
                             Asheville.rb
Creative Commons BY-SA 3.0
                              April 2011
whoami

•@lanceball
•> Java?C > C++ > Java > Ruby
 Perl >

•Red Hat Senior Engineer
•member of
Goal

For you to write a Ruby
app on TorqueBox
tonight!
TorqueBox
the power of JBoss with the expressiveness of Ruby
TorqueBox: what?

•A “real” app server for Ruby
•Founded in 2008
•100% open-source, LGPL license
•Based on JBoss AS and JRuby
•Just released 1.0.0.CR2!
Yes, it's Java
I promise...

•No XML
•No Java *
•No war files *
•Only Ruby and YAML
* Unless you really want to
TorqueBox::Why
• Native support for Rack apps +
  standalone Ruby services
• Built-in:
 • background processing
 • scheduling
 • daemons / services
 • clustering
• Easily scalable
• Optionally enterprisey (JAAS, legacy
  Java, etc.)
JRuby
a good idea done well
JRuby: why?

•Very fast runtime
•Real threads
•Java libraries
•Java tools
•Healthy community
JBoss AS
the good parts
The Competition

Unicorn, Thin, Passenger,
Trinidad, Warbler...

...all address only the web
question.
AS = Application Server

•interpreter” server +
 Not just “web

•appshost multiple, disparate
 Can
       simultaneously
•apps it hosts services to all the
 Provides basic
JBoss AS6

•Tomcat for web
•Infinispan for caching
•HornetQ for messaging
•Quartz for scheduling
•PicketBox for authentication
•mod_cluster for clustering
Setting Up TorqueBox
   in a few simple steps!
Easy Install
(download 1.0.0.CR2 from torquebox.org)

$ unzip torquebox-dist-1.0.0.CR2-bin.zip

$ export TORQUEBOX_HOME=$PWD/torquebox-1*
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby

$ export PATH=$JRUBY_HOME/bin:$PATH
Easy Install
(download 1.0.0.CR2 from torquebox.org)

$ unzip torquebox-dist-1.0.0.CR1-bin.zip

$ export TORQUEBOX_HOME=$PWD/torquebox-1*
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby

$ export PATH=$JRUBY_HOME/bin:$PATH
Easy Install
(download 1.0.0.CR2 from torquebox.org)

$ unzip torquebox-dist-1.0.0.CR2-bin.zip

$ export TORQUEBOX_HOME=$PWD/torquebox-1*
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby

$ export PATH=$JRUBY_HOME/bin:$PATH
Easy Install
(download 1.0.0.CR2 from torquebox.org)

$ unzip torquebox-dist-1.0.0.CR2-bin.zip

$ export TORQUEBOX_HOME=$PWD/torquebox-1*
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby

$ export PATH=$JRUBY_HOME/bin:$PATH
Easy Install
(download 1.0.0.CR2 from torquebox.org)

$ unzip torquebox-dist-1.0.0.CR1-bin.zip the jruby
                              Make sure
                               found in your path
$ export TORQUEBOX_HOME=$PWD/torquebox-1*
                              is in $JRUBY_HOME/
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby

$ export PATH=$JRUBY_HOME/bin:$PATH
Easy Install
(download 1.0.0.CR2 from torquebox.org)

$ unzip torquebox-dist-1.0.0.CR1-bin.zip the jruby
                              Make sure
                               found in your path
$ export TORQUEBOX_HOME=$PWD/torquebox-1*
                              is in $JRUBY_HOME/
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby

$ export PATH=$JRUBY_HOME/bin:$PATH
Easy Install

$ jruby -S gem install torquebox --pre

# optional
$ jruby -S gem install bundler
$ jruby -S gem install rails
$ jruby -S gem install sinatra
Rake Tasks
Rakefile




require "torquebox-rake-support"
Database Connectivity
Gemfile



gem "activerecord-jdbc-adapter"

gem "jdbc-postgres"
# gem "jdbc-sqlite3"
# gem "jdbc-mysql"
Rails Template

•Adds TorqueBox rake tasks
•Adds the JDBC sqlite3 gems
•Adds TorqueBox session_store
•Adds Backgroundable module
Rake Tasks

rake torquebox:run
  Run TorqueBox server

rake torquebox:deploy[context_path]
  Deploy the app in the current directory

rake torquebox:undeploy
  Undeploy the app in the current directory
Rake Tasks

Start torquebox:run in its own
shell and leave it running.
Instead of script/server or
shotgun or thin or whatever
else, use torquebox:run.
Deployment Descriptors


 torquebox:deploy creates a
 deployment descriptor in
 the $TORQUEBOX_HOME/
 apps/ directory
Hot Deployment
 $TORQUEBOX_HOME/apps/

• anything added to
  apps/ will get deployed
• anything removed from
  apps/ will get
  undeployed
• anything updated in
  apps/ will get
  redeployed
• TorqueBox deployers
  make JBoss grok YAML
Hot Deployment
 $TORQUEBOX_HOME/apps/
 deployment
•descriptors to
  anything added
  apps/ will get deployed
• anything removed from
  apps/ will get
  undeployed
• anything updated in
  apps/ will get
  redeployed
• TorqueBox deployers
  make JBoss grok YAML
Hot Deployment
 $TORQUEBOX_HOME/apps/
 deployment
•descriptors to
  anything added
  apps/ will get deployed
• anything removed from
  apps/ will get
  undeployed
• anything updated in
  apps/ will get
  redeployed
• TorqueBox deployers
  make JBoss grok YAML
Hot Deployment
  $TORQUEBOX_HOME/apps/

 • anything added to
   apps/ will get deployed
 • anything removed from
   apps/ will get
   undeployed
knob files (zip
 •archives)
   anything updated in
   apps/ will get
   redeployed
 • TorqueBox deployers
   make JBoss grok YAML
Hot Deployment
  $TORQUEBOX_HOME/apps/

 • anything added to
   apps/ will get deployed
 • anything removed from
   apps/ will get
   undeployed
knob files (zip
 •archives)
   anything updated in
   apps/ will get
   redeployed
 • TorqueBox deployers
   make JBoss grok YAML
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development
web:
  context: myapp
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development
web:                      The fully-qualified
  context: myapp
                           path to the app.
  host:    www.yourhost.com
  static: public           This will be the
environment:                value of either
                           RAILS_ROOT or
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
                            RACK_ROOT
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development
web:                      The fully-qualified
  context: myapp
                           path to the app.
  host:    www.yourhost.com
  static: public           This will be the
environment:                value of either
                           RAILS_ROOT or
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
                            RACK_ROOT
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development
web:
  context: myapp          The runtime mode
  host:    www.yourhost.com the app. This
                           of
  static: public             will be either
environment:
                            RAILS_ENV or
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com RACK_ENV
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development
web:
  context: myapp          The runtime mode
  host:    www.yourhost.com the app. This
                           of
  static: public             will be either
environment:
                            RAILS_ENV or
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com RACK_ENV
Deployment Descriptors
                      The app’s context path
 apps/myapp-knob.yml (or “sub URI”):
                   http://localhost:8080/myapp
application:            Can be set via rake:
  root:           rake torquebox:deploy[myapp]
           /path/to/myapp
  env:     development The default is root:
web:                  http://localhost:8080/
  context: myapp
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
                      The app’s context path
 apps/myapp-knob.yml (or “sub URI”):
                   http://localhost:8080/myapp
application:            Can be set via rake:
  root:           rake torquebox:deploy[myapp]
           /path/to/myapp
  env:     development The default is root:
web:                  http://localhost:8080/
  context: myapp
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
                            A list of virtual
  root:    /path/to/myapp
  env:     development      hostnames to
web:                      which to bind the
  context: myapp
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
                            A list of virtual
  root:    /path/to/myapp
  env:     development      hostnames to
web:                      which to bind the
  context: myapp
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development       The location of
web:                        the app’s static
  context: myapp             content, either
  host:    www.yourhost.com
  static: public
                               absolute or
environment:                 relative to the
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp
  env:     development       The location of
web:                        the app’s static
  context: myapp             content, either
  host:    www.yourhost.com
  static: public
                               absolute or
environment:                 relative to the
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp       Any
  env:     development
web:                        environment
  context: myapp              variables
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors
apps/myapp-knob.yml

application:
  root:    /path/to/myapp       Any
  env:     development
web:                        environment
  context: myapp              variables
  host:    www.yourhost.com
  static: public
environment:
  MAIL_HOST: mail.yourhost.com
  REPLY_TO: you@yourhost.com
Deployment Descriptors

•config/torquebox.yml
•internal descriptors have
 the same structure as the
 external ones in apps/
•may be used to provide
 your own reasonable
 defaults
Components
Put 'em together, and you have an AS
Web
make rack, not war
jruby-rack
 •supported: rails, sinatra, etc
  All rack-based frameworks

 •deploy from where they apps
  No packaging required:
                            sit on
   disk
 • No redeploy necessary to see
   changes when using rack
   reloading, shotgun or rails
   development mode
 • We use it inside Tomcat
Scheduling
get regular later
Jobs
app/jobs/newsletter_sender.rb

class NewsletterSender
 
  def run()
    subscriptions = Subscription.find(:all)
    subscriptions.each do |e|
      send_newsletter( e )
    end
  end
 
end
Jobs
config/torquebox.yml

jobs:
  monthly_newsletter:
   description: first of month
   job: NewsletterSender
   cron: ‘0 0 0 1 * ?’

 process_tps_reports:
  job: TPSReportProcessor
  cron: ‘0 0 0 0 MON ?’
Jobs
 “Fire every half hour from 10am until
    1pm on the third Friday of each
                 month”
  0      */30 10-13        ?      *      FRI#3

Seconds Minutes   Hours   DOM    Month   DOW     Year

                                          1-7
                                 1-12            1970-
                          1-31           SUN-
 0-59    0-59     0-23           JAN-            2099
                          ?LW            SAT
                                 DEC             empty
                                         ?L#
Jobs
•day ofportable. What is the first
 More
        the week on BSD again?
  What’s cron on Windows?
• Self contained within the app.
  No external systems to manage
  and keep in sync.
• Full application environment
  loaded and available.
Messaging
 asynchronicity
TorqueBox::Messaging


• JMS (Java Message Service)
 is an API for messaging
• HornetQ is the JBoss JMS
 implementation
Background Processing



•Tasks
•Backgroundable
Tasks
app/tasks/email_task.rb

class EmailTask < TorqueBox::Messaging::Task
  def welcome(payload)
    person = Person.find_by_id(payload[:id])
    person.send_welcome_spam if person
  end
end
Tasks
app/tasks/email_task.rb

class EmailTask < TorqueBox::Messaging::Task
  def welcome(payload)
    person = Person.find_by_id(payload[:id])
    person.send_welcome_spam if person
  end
end
Tasks
app/tasks/email_task.rb

class EmailTask < TorqueBox::Messaging::Task
  def welcome(payload)
    person = Person.find_by_id(payload[:id])
    person.send_welcome_spam if person
  end
end
Tasks
app/tasks/email_task.rb

class EmailTask < TorqueBox::Messaging::Task
  def welcome(payload)
    person = Person.find_by_id(payload[:id])
    person.send_welcome_spam if person
  end
end
Tasks
app/controllers/people_controller.rb


class PeopleController < ApplicationController
  def create
    @person = Person.new(params[:person])
    respond_to do |format|
      if @person.save
        EmailTask.async(:welcome, :id => person.id)
        # respond appropriately
      end
    end
  end
end
Tasks
app/controllers/people_controller.rb


class PeopleController < ApplicationController
  def create
    @person = Person.new(params[:person])
    respond_to do |format|
      if @person.save
        EmailTask.async(:welcome, :id => person.id)
        # respond appropriately
      end
    end
  end
end
Backgroundable

Inspired by DelayedJob’s
handle_asynchronously,
it’s trivial to create
implicit background
Tasks.
Backgroundable
 lib/something.rb

include TorqueBox::Messaging

class WelcomeEmailer
 include Backgroundable
 always_background :welcome

  def welcome(id)
    person = Person.find_by_id(id)
    person.send_welcome_spam if person
  end
  def depart(id)
    # do something else
  end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
Backgroundable
 lib/something.rb

include TorqueBox::Messaging

class WelcomeEmailer
 include Backgroundable
 always_background :welcome

  def welcome(id)
    person = Person.find_by_id(id)
    person.send_welcome_spam if person
  end
  def depart(id)
    # do something else
  end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
Backgroundable
 lib/something.rb
include TorqueBox::Messaging

class WelcomeEmailer
 include Backgroundable
 always_background :welcome

  def welcome(id)
    person = Person.find_by_id(id)
    person.send_welcome_spam if person
  end
  def depart(id)
    # do something else
  end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
Backgroundable
 lib/something.rb
include TorqueBox::Messaging

class WelcomeEmailer
 include Backgroundable
 always_background :welcome

  def welcome(id)
    person = Person.find_by_id(id)
    person.send_welcome_spam if person
  end
  def depart(id)
    # do something else
  end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
Background Processing

 Call it from your
 controllers, models,
 and observers, or even
 other tasks. Even in
 non-Rails apps!
Background Processing
•No extra tables in your database
•No external system to manage
•Little to no config required at all
•System gets redeployed w/app
•Efficient loading of rails
 environment
•Automatic load balancing and
 retries
•Works on Windows, if you care
Queues
Tasks and Backgroundable are
built on top of Queues. Of
course, you may build your
own messaging based apps by
defining your own Queues,
Topics, and their message
Processors yourself.
Queues
config/torquebox.yml

queues:
 /queues/questions:

/queues/answers:
 durable: false
Topics
•interface is different, but
 behavior
           is the same.
•each message, of a only one
 all subscribers
                  but
                      topic see
  subscriber will see any message
  from a queue
• use topics: section of
  torquebox.yml to define topics
Processors

You can create a
processor class to
receive messages from a
Topic or Queue
Processors
app/models/print_handler.rb

include TorqueBox::Messaging

class PrintHandler < MessageProcessor
  def initialize(opts)
    @printer = opts['printer'] || default
  end
  def on_message(body)
    puts "Processing #{body} of #{message}"
  end
end
Processors
config/torquebox.yml

messaging:
  /topics/orders:
    - PrintHandler
    - ShoutHandler
  /queues/receipts:
    PrintHandler:
      concurrency: 5
      config:
        printer: the_little_one
Processors
config/torquebox.yml

messaging:
  /topics/orders:
    - PrintHandler
    - ShoutHandler
  /queues/receipts:
    PrintHandler:
      concurrency: 5
      config:
        printer: the_little_one
Processors
config/torquebox.yml

messaging:
  /topics/orders:
    - PrintHandler
    - ShoutHandler
  /queues/receipts:
    PrintHandler:
      concurrency: 5
      config:
        printer: the_little_one
Processors
config/torquebox.yml

messaging:
  /topics/orders:
    - PrintHandler
    - ShoutHandler
  /queues/receipts:
    PrintHandler:
      concurrency: 5
      config:
        printer: the_little_one
Processors
app/models/print_handler.rb

include TorqueBox::Messaging

class PrintHandler < MessageProcessor
  def initialize(opts)
    @printer = opts['printer'] || default
  end
  def on_message(body)
    puts "Processing #{body} of #{message}"
  end
end
Queues (again)


But how do you send a
message?
Queues
contrived example

questions = Queue.new('/queues/questions')
answers = Queue.new('/queues/answers')
 
Thread.new do
  questions.publish "What time is it?"
  puts answers.receive( :timeout => 1000 )
end
 
puts questions.receive
answers.publish Time.now
Queues
contrived example

questions = Queue.new('/queues/questions')
answers = Queue.new('/queues/answers')
 
Thread.new do
  questions.publish "What time is it?"
  puts answers.receive( :timeout => 1000 )
end
 
puts questions.receive
answers.publish Time.now
Queues
contrived example

questions = Queue.new('/queues/questions')
answers = Queue.new('/queues/answers')
 
Thread.new do
  questions.publish "What time is it?"
  puts answers.receive( :timeout => 1000 )
end
 
puts questions.receive
answers.publish Time.now
Queues
contrived example

questions = Queue.new('/queues/questions')
answers = Queue.new('/queues/answers')
 
Thread.new do
  questions.publish "What time is it?"
  puts answers.receive( :timeout => 1000 )
end
 
puts questions.receive
answers.publish Time.now
Services
run along, lil’ daemon
Services

Long-running, non-web
“daemons” that share
the runtime environment
and deployment lifecycle
of your app.
Services
•optional initialize(Hash), start()
 Represented as a class with
  and stop() methods, which
  should each return quickly.
• Typically will start a long-
  running loop in a thread and
  respond to external events.
• Configured via services: section
  in torquebox.yml
Services
config/torquebox.yml


services:
 TimeMachine:
  queue: /queue/morris_day

 MyMudServer:

 SomeOtherService:
Services
 app/services/time_machine.rb

class TimeMachine
 def initialize(opts)
   @queue = Queue.new(opts['queue'])
 end

 def start
  Thread.new do
    until @done
      @queue.publish(Time.now)
      sleep(1)
    end
   end
 end

 def stop; @done = true; end
end
Services
 app/services/time_machine.rb

class TimeMachine
 def initialize(opts)
   @queue = Queue.new(opts['queue'])
  end

 def start
  Thread.new do
    until @done
      @queue.publish(Time.now)
      sleep(1)
    end
   end
 end

 def stop; @done = true; end
end
Services
 app/services/time_machine.rb

class TimeMachine
 def initialize(opts)
   @queue = Queue.new(opts['queue'])
 end

 def start
  Thread.new do
    until @done
      @queue.publish(Time.now)
      sleep(1)
    end
   end
 end

 def stop; @done = true; end
end
Services
 app/services/time_machine.rb

class TimeMachine
 def initialize(opts)
   @queue = Queue.new(opts['queue'])
 end

 def start
  Thread.new do
    until @done
      @queue.publish(Time.now)
      sleep(1)
    end
   end
 end

 def stop; @done = true; end
end
Caching
save a little for later
Caching
config/application.rb


config.cache_store =
:torque_box_store, :mode => :local

# or

config.cache_store =
ActiveSupport::Cache::TorqueBoxStore.new( :mode
=> :local )
Runtime Options
   shorts or sweats?
Runtime Options
config/torquebox.yml


#per app!
ruby:
 version: 1.9
 compile_mode: jit
Clustering
less failure faster
Web

•session replication
•mod_cluster)
 intelligent load-balancing (via

•failover (via mod_cluster)
Messaging

HornetQ clusters
automatically, giving you
message processing
capability that grows
with the cluster.
Services

A service runs on every
cluster node, unless
marked as a singleton.
Jobs

A job runs on every
cluster node, unless
marked as a singleton
(just like services).
Caching

Infinispan clusters
automatically,
"distributing" your
cache.
BENchmarks
Real-world Rails application:
Redmine
Comparisons:
TorqueBox, Trinidad, Passenger,
Unicorn, Glassfish, Thin
Runtimes:
JRuby, MRI, RubyEE
Roadmap
May - 1.0.0.Final
Then...
 AS7
 Authentication
 Mobicents
 ??? - you tell us
Resources

•http://torquebox.org
•irc: #torquebox on freenode
•https://github.com/torquebox
•http://twitter.com/torquebox
Thanks!
questions?

More Related Content

What's hot

Apache Sling - The whys and the hows
Apache Sling - The whys and the howsApache Sling - The whys and the hows
Apache Sling - The whys and the hows
Robert Munteanu
 
What’s New in Rails 5.0?
What’s New in Rails 5.0?What’s New in Rails 5.0?
What’s New in Rails 5.0?
Unboxed
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1
Vikas Chauhan
 
BOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyoBOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyo
Toshiaki Maki
 
Getting to know Laravel 5
Getting to know Laravel 5Getting to know Laravel 5
Getting to know Laravel 5
Bukhori Aqid
 
Laravel 5 Annotations: RESTful API routing
Laravel 5 Annotations: RESTful API routingLaravel 5 Annotations: RESTful API routing
Laravel 5 Annotations: RESTful API routing
Christopher Pecoraro
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with Laravel
Michael Peacock
 
Hosting Your Own OTA Update Service
Hosting Your Own OTA Update ServiceHosting Your Own OTA Update Service
Hosting Your Own OTA Update Service
Quinlan Jung
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web Artisans
Raf Kewl
 
REST in-practice, in practice!
REST in-practice, in practice!REST in-practice, in practice!
REST in-practice, in practice!
Codemotion
 
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Adventures in Laravel 5 SunshinePHP 2016 TutorialAdventures in Laravel 5 SunshinePHP 2016 Tutorial
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Joe Ferguson
 
Why Laravel?
Why Laravel?Why Laravel?
Why Laravel?
Jonathan Goode
 
Presentation laravel 5 4
Presentation laravel 5 4Presentation laravel 5 4
Presentation laravel 5 4
Christen Gjølbye Christensen
 
Your first sinatra app
Your first sinatra appYour first sinatra app
Your first sinatra appRubyc Slides
 
Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)
Viral Solani
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
Matt Gauger
 
Tracking huge files with Git LFS (GlueCon 2016)
Tracking huge files with Git LFS (GlueCon 2016)Tracking huge files with Git LFS (GlueCon 2016)
Tracking huge files with Git LFS (GlueCon 2016)
Tim Pettersen
 
Building drupal web farms with IIS - part 1
Building drupal web farms with IIS - part 1Building drupal web farms with IIS - part 1
Building drupal web farms with IIS - part 1
Alessandro Pilotti
 

What's hot (20)

Apache Sling - The whys and the hows
Apache Sling - The whys and the howsApache Sling - The whys and the hows
Apache Sling - The whys and the hows
 
What’s New in Rails 5.0?
What’s New in Rails 5.0?What’s New in Rails 5.0?
What’s New in Rails 5.0?
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1
 
BOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyoBOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyo
 
Getting to know Laravel 5
Getting to know Laravel 5Getting to know Laravel 5
Getting to know Laravel 5
 
Laravel 5 Annotations: RESTful API routing
Laravel 5 Annotations: RESTful API routingLaravel 5 Annotations: RESTful API routing
Laravel 5 Annotations: RESTful API routing
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with Laravel
 
Hosting Your Own OTA Update Service
Hosting Your Own OTA Update ServiceHosting Your Own OTA Update Service
Hosting Your Own OTA Update Service
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web Artisans
 
REST in-practice, in practice!
REST in-practice, in practice!REST in-practice, in practice!
REST in-practice, in practice!
 
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Adventures in Laravel 5 SunshinePHP 2016 TutorialAdventures in Laravel 5 SunshinePHP 2016 Tutorial
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
 
Why Laravel?
Why Laravel?Why Laravel?
Why Laravel?
 
Presentation laravel 5 4
Presentation laravel 5 4Presentation laravel 5 4
Presentation laravel 5 4
 
Your first sinatra app
Your first sinatra appYour first sinatra app
Your first sinatra app
 
Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
 
Tracking huge files with Git LFS (GlueCon 2016)
Tracking huge files with Git LFS (GlueCon 2016)Tracking huge files with Git LFS (GlueCon 2016)
Tracking huge files with Git LFS (GlueCon 2016)
 
Building drupal web farms with IIS - part 1
Building drupal web farms with IIS - part 1Building drupal web farms with IIS - part 1
Building drupal web farms with IIS - part 1
 
Devignition 2011
Devignition 2011Devignition 2011
Devignition 2011
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 

Viewers also liked

TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
Lance Ball
 
Torquebox rubyhoedown-2012
Torquebox rubyhoedown-2012Torquebox rubyhoedown-2012
Torquebox rubyhoedown-2012
Lance Ball
 
DataMapper on Infinispan
DataMapper on InfinispanDataMapper on Infinispan
DataMapper on InfinispanLance Ball
 
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 TorqueBoxLance Ball
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
Helge Tennø
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post Formats
Barry Feldman
 

Viewers also liked (6)

TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
 
Torquebox rubyhoedown-2012
Torquebox rubyhoedown-2012Torquebox rubyhoedown-2012
Torquebox rubyhoedown-2012
 
DataMapper on Infinispan
DataMapper on InfinispanDataMapper on Infinispan
DataMapper on Infinispan
 
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
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post Formats
 

Similar to Torquebox Asheville.rb April 2011

Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With Rpm
Martin Jackson
 
Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13Rafael Dohms
 
Mojolicious
MojoliciousMojolicious
Mojolicious
Marcus Ramberg
 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
Hyun-Mook Choi
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf Conference
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
Pablo Godel
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best Practices
Docker, Inc.
 
Composer
ComposerComposer
Composer
Tom Corrigan
 
Rails Engine | Modular application
Rails Engine | Modular applicationRails Engine | Modular application
Rails Engine | Modular application
mirrec
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best Practices
Tibor Vass
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
Docker, Inc.
 
Cocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftCocoapods and Most common used library in Swift
Cocoapods and Most common used library in Swift
Wan Muzaffar Wan Hashim
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
José Paumard
 
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...
Amazon Web Services
 
TorqueBox
TorqueBoxTorqueBox
TorqueBox
bobmcwhirter
 
Running Microservices on AWS Elastic Beanstalk
Running Microservices on AWS Elastic BeanstalkRunning Microservices on AWS Elastic Beanstalk
Running Microservices on AWS Elastic Beanstalk
Amazon Web Services
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13
Rafael Dohms
 

Similar to Torquebox Asheville.rb April 2011 (20)

Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With Rpm
 
Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
 
Intro to Rack
Intro to RackIntro to Rack
Intro to Rack
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best Practices
 
Composer
ComposerComposer
Composer
 
Rails Engine | Modular application
Rails Engine | Modular applicationRails Engine | Modular application
Rails Engine | Modular application
 
Capistrano Overview
Capistrano OverviewCapistrano Overview
Capistrano Overview
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best Practices
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
 
Cocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftCocoapods and Most common used library in Swift
Cocoapods and Most common used library in Swift
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...
 
TorqueBox
TorqueBoxTorqueBox
TorqueBox
 
Running Microservices on AWS Elastic Beanstalk
Running Microservices on AWS Elastic BeanstalkRunning Microservices on AWS Elastic Beanstalk
Running Microservices on AWS Elastic Beanstalk
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13
 

Recently uploaded

20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 

Recently uploaded (20)

20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 

Torquebox Asheville.rb April 2011

Editor's Notes

  1. who uses ruby? + story\n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. SLOW THE FUCK DOWN - BUILT ON THE SHOULDERS OF GIANTS\nfocus on the non-web\nthe rest of this talk is the &apos;why&apos;\n\n
  11. two great technologies\nshoulders of giants\n
  12. 1.6.1\n
  13. Why wouldn&amp;#x2019;t you use it?\nlead with rake/rspec\nFFI support there now, C ext. support soon. Both are slower than on MRI\n
  14. \n
  15. \n
  16. \n
  17. Our goal: bring as much JBoss goodness as we can to Ruby\n- TB is new, but based on stable technologies\n
  18. SLOW THE FUCK DOWN\n
  19. Ensure you have Java 6 installed\n
  20. Ensure you have Java 6 installed\n
  21. Ensure you have Java 6 installed\n
  22. Ensure you have Java 6 installed\n
  23. Ensure you have Java 6 installed\n- rvm\n
  24. jruby&apos;s gem_home\n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. SLOW THE FUCK DOWN\n
  43. \n
  44. - your app appears to be a java app to Tomcat\n- Sinatra reloading is a bit wonky. Shotgun does work, but a safer bet is to touch your deployment descriptor\n
  45. HIDE THIS SLIDE??\n
  46. \n
  47. Can reside anywhere in the load path, app/jobs is preferred\nOnly a run() method is required\nCommon example: send monthly newsletter\n
  48. \n
  49. more granular than standard cron - L=last day of week/month, W=weekday\nThe last day of the month\nThe last weekday of the month\nThe weekday closest to the 15th\n
  50. instead of each cron job spawning your app\n
  51. SLOW THE FUCK DOWN\nThis is what people use Delayed::Job for\n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. /app/tasks or /tasks\nsimilar to Delayed::Job functionality\n
  83. \n
  84. payload is a hash\n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. Or integrate with a legacy Java app through its queues.\n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. These can be anywhere in the load path, but lib and/or app/models is typical\n
  104. concurrency - how many processors are allowed to work at once - default is 1\nconfig - passed to class initializer\n
  105. \n
  106. \n
  107. \n
  108. \n
  109. Ruby messages are Marshaled and Base64-encoded\n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. anywhere in the load path, but app/services is preferred\nDON&amp;#x2019;T EXPLAIN - line by line coming up\n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. - built on Infinispan Data Grid\n-clustered requires no hosts config (like memcached)\n-ActiveSupport 3 only\n
  122. \n
  123. \n
  124. How we do it, advantages\ngood blog post on tb.org\n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. applies to all runtimes for the app (messaging, jobs, services)\n
  131. SLOW THE FUCK DOWN\narticles posted on torquebox.org detailing clustering config\n\n
  132. reverse proxy / load balancer\nAs server nodes join and leave the cluster, the balancer (mod_cluster) is aware of these changes.\n
  133. As server nodes join and leave the cluster, the balancer (mod_cluster) is aware of these changes.\n
  134. \n
  135. \n
  136. \n
  137. local, invalidation, replicated, distributed\n
  138. \n
  139. \n
  140. \n
  141. 80 minute test, # clients increasing every 10m\n
  142. \n
  143. community driven\n
  144. \n
  145. \n
  146. \n
  147. \n
  148. design happens in #torquebox \n
  149. - would you use it?\n- RHT is hiring rubyists in rdu - see me after\n- stickers\n- repeat questions\n
  150. \n
  151. \n
  152. \n
  153. *.bat equivalents\nwindows service config\n
  154. \n
  155. \n