SlideShare a Scribd company logo
Ruby on Rails sur vival guide
          of an aged Java developer
                                      or
         how to get a project released without knowing the language
                         and neither the framework




Gian Carlo Pace - RubyDay - 10/06/2011 - Centro Congressi Milanofiori   http://www.thinkgeek.com/gadgets/tools/a396/
Resilienza.
L'arte di risalire sulla barca rovesciata.
“Quando la vita rovescia la
nostra barca, alcuni affogano
altri lottano strenuamente
per risalirvi sopra.
Gli antichi connotavano il gesto
di tentare di risalire sulle
imbarcazioni rovesciate con il
verbo «resalio».
Forse il nome della qualità di chi
non perde mai la speranza e
continua a lottare contro le
av versità, la resilienza deriva
da qui.”
              (Resisto Dunque Sono, Pietro Trabucchi - Casa editrice Corbaccio 2009)
me, myself and I
Z|tÇ VtÜÄÉ ctvx
 ÇÉà vÉw|Çz ]tät yÉÜ DLE wtçá
n 0 0 b
history of a change
t wo teams




Coldfusion team   Java Team
the remake

           Java Team


Customer
The standby...
           we must put in standby the
           project you are working on

                                          ok!

          you’ll work on a new project
          using Java, so you’ll get the
                chance to learn it

                                      good!

manager                                         coldfusion team
fast prototype

          ...ah, a last comment. We need a
           fast prototype for the project
               to study the business in
                        advance!
                                                !!!


                          !!!




manager                                      coldfusion team
steep learning cur ve




confusion team
                 WTF
Java project kick off




           Let’s start!
customer
different internal POV
           SOA
iBatis               JavaScript
             GWT
   JBoss      Hibernate REST
                      Flex
     HTML5 Spring
         Glassfish BlazeDS

          Java Team
time passes




                                  Java Team

Flex   BlazeDS    Spring   Hibernate   Glassfish
time passes




                 B ad M ood
                                  Java Team

Flex   BlazeDS    Spring   Hibernate   Glassfish
what should
  we do?
when the going gets tough...
                we need a BRAVE decision.
               we need a technology switch!




    ...the meeting gets going!
technology selection
Ruby on Rails


Community
Libraries
Age
Books
Ruby on Rails


Community
Libraries
Age
Books
Ruby on Rails
Situation

Project esteemed 3 months Late of 1 month
Ruby Language             unknown
Rails Framework           unknown
Deadline                  unchanged
Customer                  waiting
Waltzing with Bears
Knowledge investment: books
Knowledge investment: a course
Installing Ruby: Windows
Ruby: MacOSX & Linux

                  https://rvm.beginrescueend.com


$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
$ rvm install 1.9.2
$ rvm use 1.9.2
$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
$ which ruby
/Users/gicappa/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
Ruby Virtual Machines
MRI/YARV (ruby) - http://www.ruby-lang.org/en/downloads/

Rubinius (rbx) - http://rubini.us/

JRuby (jruby) - http://www.jruby.org/

Ruby Enterprise Edition (ree) - http://www.rubyenterpriseedition.com/

MagLev (maglev) - http://maglev.gemstone.com/

IronRuby (ironruby) - http://www.ironruby.net/

MacRuby (macruby) - http://www.macruby.org/
Rails Installation



Usually run this as the root user:
# gem install rails
Rails Satisfaction
$ rails new blog
$ cd blog/
$ rake db:create
$ bundle install
$ rails server
=> Booting WEBrick
=> Rails 3.0.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-06-09 13:59:25] INFO WEBrick 1.3.1
[2011-06-09 13:59:25] INFO ruby 1.9.2 (2010-08-18) [x86_64-
darwin10.5.0]
[2011-06-09 13:59:25] INFO WEBrick::HTTPServer#start: pid=30347
port=3000
Rails Satisfaction
Rails Installation on Windows

"If you’re working on Windows, you should be aware that
the vast majority of Rails development is done in Unix
environments...”


“...If at all possible, we suggest that you install a Linux
virtual machine and use that for Rails development, instead
of using Windows."

                        (http://guides.rubyonrails.org/getting_started.html)
Ruby vs Java: similarities

Memory is managed for you via a garbage collector.

Objects are strongly typed.

There are public, private, and protected methods.

There are embedded doc tools (Ruby’s is called RDoc).
Ruby vs Java: differences
You don’t need to compile your code. You just run it directly.
All member variables are private. From the outside, you
access everything via methods.
Parentheses in method calls are usually optional and often
omitted.
Everything is an object.
There’s no static type checking.
Variable names are just labels. They don’t have a type
associated with them.

                    http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
Ruby Language: IRB


$ irb
irb(main):001:0> puts "Welcome rubyfriday!"
Welcome rubyfriday!
=> nil
irb(main):002:0>
Ruby Language: OO




              “Metaprogramming Ruby” - Paolo Perrotta
Ruby Language: OO

irb(main):002:0> 3.times { puts "hi!" }
hi!
hi!
hi!
=> 3

irb(main):003:0> "hi there".split(" ")
=> ["hi", "there"]
irb(main):004:0>
Ruby Language :symbols
Symbols are constant names that you
 don’t have to predeclare and that are
        guaranteed to be unique.

  NORTH = 1           :north
  EAST = 2            :east
  SOUTH = 3           :south
  WEST = 4            :west
Ruby Language: code blocks


 Code blocks are chunks of code you can
associate with method invocation almost
       as if they were parameters
Ruby Language: code blocks

  def call_block
  
    puts “Start of method”
  
    yield
  
    yield
  
    puts “End of method”
  end

  irb(main):008:0> call_block { puts 'In the block' }
  Start of method
  In the block
  In the block
  End of method
  => nil
Rails
  Rails is a web application development
framework written in the Ruby language


            DRY
Convention Over Configuration
    RESTful Acrhitecture
     MVC Pattern Based
        ORM Based
Rails: bundler

                                      Dependency manager




$ bundle install
Using rake (0.9.2)
Using abstract (1.0.0)
Using activesupport (3.0.7)
Using builder (2.1.2)
Using i18n (0.5.0)
Using activemodel (3.0.7)
...
Your bundle is complete! Use `bundle show [gemname]` to see where a
bundled gem is installed.
$
Rails: rake
rake means ruby make
$ rake -T
rake db:create                               # Create the database from config/
database.yml for the current Rails.env (use db:cre...
rake db:drop                                 # Drops the database for the current
Rails.env (use db:drop:all to drop all databases)
rake db:fixtures:load                        # Load fixtures into the current
environment's database.
rake db:migrate                              # Migrate the database (options:
VERSION=x, VERBOSE=false).
rake db:migrate:status                       # Display status of migrations
...
Rails: MVC
Rails: generators

rails new MyProject
rails generate model MyModel attr:string
rails generate controller MyController
rails generate mailer SenderClass
Rails: generators
$ rails generate scaffold Post title:string body:text
      invoke active_record
      create    db/migrate/20110609171958_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/unit/post_test.rb
      create      test/fixtures/posts.yml
       route resources :posts
      invoke scaffold_controller
      create    app/controllers/posts_controller.rb
      invoke    erb
      create      app/views/posts
      create      app/views/posts/index.html.erb
      create      app/views/posts/edit.html.erb
      create      app/views/posts/show.html.erb
      create      app/views/posts/new.html.erb
      create      app/views/posts/_form.html.erb
      invoke    test_unit
        ...
      invoke    helper
        ...
      invoke stylesheets
      create    public/stylesheets/scaffold.c
Rails: routes



$ rake routes
    posts GET      /posts(.:format)            {:action=>"index", :controller=>"posts"}
          POST     /posts(.:format)            {:action=>"create", :controller=>"posts"}
 new_post GET      /posts/new(.:format)        {:action=>"new", :controller=>"posts"}
edit_post GET      /posts/:id/edit(.:format)   {:action=>"edit", :controller=>"posts"}
     post GET      /posts/:id(.:format)        {:action=>"show", :controller=>"posts"}
          PUT      /posts/:id(.:format)        {:action=>"update", :controller=>"posts"}
          DELETE   /posts/:id(.:format)        {:action=>"destroy", :controller=>"posts"}
Rails: controller
Rails: view
erb = templating system
Rails: active record
Rails: active record
rake db:migrate
Rails: useful gems
Rails: authentication


Devise               http://ruby-toolbox.com/




Authlogic
Rails: authorization


                       http://ruby-toolbox.com/




CanCan
declarative_authorization
Rails: file upload



paperclip
                        http://ruby-toolbox.com/




attachment_fu
Rails: misc

will_paginate
rufus-scheduler                 http://ruby-toolbox.com/


rmagick
EventMachine
formtastic
aws-s3
bitly
t witter_oauth
Rails: testing

test-unit
rspec                   http://ruby-toolbox.com/



cucumber
factory_girl
capybara
spork
Rails: deployment


                    http://ruby-toolbox.com/




             capistrano
Rails: passenger
Project?
Work Hard
Production




           Good job guys!
customer
What we achieved

Delivered working soft ware
          On time
  Starting a month LATER
Learning from scratch Ruby
Learning from scratch Rails
One team!




Rails team
Lesson learned

cohesion and mood matters

       be resilient!
Thank You!
Q&A?

More Related Content

What's hot

JRuby in Java Projects
JRuby in Java ProjectsJRuby in Java Projects
JRuby in Java Projects
jazzman1980
 
Security Goodness with Ruby on Rails
Security Goodness with Ruby on RailsSecurity Goodness with Ruby on Rails
Security Goodness with Ruby on Rails
Source Conference
 
Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1
Mark Menard
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
Agnieszka Figiel
 
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
TorqueBox - Ultrapassando a fronteira entre Java e RubyTorqueBox - Ultrapassando a fronteira entre Java e Ruby
TorqueBox - Ultrapassando a fronteira entre Java e RubyBruno Oliveira
 
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
Hiro Asari
 
DataMapper on Infinispan
DataMapper on InfinispanDataMapper on Infinispan
DataMapper on InfinispanLance Ball
 
The Enterprise Strikes Back
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes Back
Burke Libbey
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09
Shaer Hassan
 
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
Hiro Asari
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012
alexismidon
 
Ruby on Rails 2.1 What's New
Ruby on Rails 2.1 What's NewRuby on Rails 2.1 What's New
Ruby on Rails 2.1 What's New
Libin Pan
 
Практики применения JRuby
Практики применения JRubyПрактики применения JRuby
Практики применения JRuby
.toster
 
When Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of TorqueboxWhen Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of Torquebox
rockyjaiswal
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoo
jeresig
 
Spring into rails
Spring into railsSpring into rails
Spring into rails
Hiro Asari
 
JRuby and You
JRuby and YouJRuby and You
JRuby and You
Hiro Asari
 
Pi
PiPi
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012Anton Arhipov
 

What's hot (20)

JRuby in Java Projects
JRuby in Java ProjectsJRuby in Java Projects
JRuby in Java Projects
 
Security Goodness with Ruby on Rails
Security Goodness with Ruby on RailsSecurity Goodness with Ruby on Rails
Security Goodness with Ruby on Rails
 
Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
TorqueBox - Ultrapassando a fronteira entre Java e RubyTorqueBox - Ultrapassando a fronteira entre Java e Ruby
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
 
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
 
DataMapper on Infinispan
DataMapper on InfinispanDataMapper on Infinispan
DataMapper on Infinispan
 
The Enterprise Strikes Back
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes Back
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09
 
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
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012
 
Ruby on Rails 2.1 What's New
Ruby on Rails 2.1 What's NewRuby on Rails 2.1 What's New
Ruby on Rails 2.1 What's New
 
遇見 Ruby on Rails
遇見 Ruby on Rails遇見 Ruby on Rails
遇見 Ruby on Rails
 
Практики применения JRuby
Практики применения JRubyПрактики применения JRuby
Практики применения JRuby
 
When Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of TorqueboxWhen Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of Torquebox
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoo
 
Spring into rails
Spring into railsSpring into rails
Spring into rails
 
JRuby and You
JRuby and YouJRuby and You
JRuby and You
 
Pi
PiPi
Pi
 
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
 

Viewers also liked

Venue for recycling e-waste
Venue for recycling e-wasteVenue for recycling e-waste
Venue for recycling e-wastealind tiwari
 
Presentacioningles
PresentacioninglesPresentacioningles
Presentacioninglesguestbc4f665
 
PEARL: Providing Education and Resources for Leadership
PEARL: Providing Education and Resources for Leadership  PEARL: Providing Education and Resources for Leadership
PEARL: Providing Education and Resources for Leadership
briandmiller
 
Green Color of Islam
Green Color of IslamGreen Color of Islam
Green Color of Islam
Ismaili parivartan
 
Hill Stephen Rendering Tools Splinter Cell Conviction
Hill Stephen Rendering Tools Splinter Cell ConvictionHill Stephen Rendering Tools Splinter Cell Conviction
Hill Stephen Rendering Tools Splinter Cell Conviction
ozlael ozlael
 
Feco Rest Bloom
Feco Rest BloomFeco Rest Bloom
Feco Rest Bloom
lukas
 
Universidad particular san gregorio de
Universidad particular san gregorio deUniversidad particular san gregorio de
Universidad particular san gregorio dejonathan
 
E-waste recycling-L
E-waste recycling-LE-waste recycling-L
E-waste recycling-Lalind tiwari
 
Semiología respiratoria imágenes
Semiología respiratoria imágenesSemiología respiratoria imágenes
Semiología respiratoria imágenes
isaco
 

Viewers also liked (20)

testing in server
testing in servertesting in server
testing in server
 
asdf
asdfasdf
asdf
 
Venue for recycling e-waste
Venue for recycling e-wasteVenue for recycling e-waste
Venue for recycling e-waste
 
before upload
before uploadbefore upload
before upload
 
Maas
MaasMaas
Maas
 
Presentacioningles
PresentacioninglesPresentacioningles
Presentacioningles
 
Sedimentary
SedimentarySedimentary
Sedimentary
 
PEARL: Providing Education and Resources for Leadership
PEARL: Providing Education and Resources for Leadership  PEARL: Providing Education and Resources for Leadership
PEARL: Providing Education and Resources for Leadership
 
E xplorer
E xplorerE xplorer
E xplorer
 
aprueba
apruebaaprueba
aprueba
 
Green Color of Islam
Green Color of IslamGreen Color of Islam
Green Color of Islam
 
Hill Stephen Rendering Tools Splinter Cell Conviction
Hill Stephen Rendering Tools Splinter Cell ConvictionHill Stephen Rendering Tools Splinter Cell Conviction
Hill Stephen Rendering Tools Splinter Cell Conviction
 
Feco Rest Bloom
Feco Rest BloomFeco Rest Bloom
Feco Rest Bloom
 
Disasters
DisastersDisasters
Disasters
 
Universidad particular san gregorio de
Universidad particular san gregorio deUniversidad particular san gregorio de
Universidad particular san gregorio de
 
Nan's Pitch
Nan's PitchNan's Pitch
Nan's Pitch
 
E-waste recycling-L
E-waste recycling-LE-waste recycling-L
E-waste recycling-L
 
Publicity
PublicityPublicity
Publicity
 
Semiología respiratoria imágenes
Semiología respiratoria imágenesSemiología respiratoria imágenes
Semiología respiratoria imágenes
 
234234
234234234234
234234
 

Similar to Ruby on Rails survival guide of an aged Java developer

JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011Nick Sieger
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Arun Gupta
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
Jean-Baptiste Feldis
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
arman o
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
Michael Neale
 
RubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteRubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - Keynote
Dr Nic Williams
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
sickill
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
Jackson Tian
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.jsguileen
 
Intro to Rails
Intro to RailsIntro to Rails
Intro to Rails
lvrubygroup
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Ryan Weaver
 
Torquebox OSCON Java 2011
Torquebox OSCON Java 2011Torquebox OSCON Java 2011
Torquebox OSCON Java 2011tobiascrawley
 
Jruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaKeith Bennett
 
Pourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirentPourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirent
Nicolas Ledez
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
Harsha Vashisht
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
Lance Ball
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
Andrew Rota
 
Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
cloudbring
 

Similar to Ruby on Rails survival guide of an aged Java developer (20)

JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
 
Play framework
Play frameworkPlay framework
Play framework
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
 
RubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteRubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - Keynote
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
 
Intro to Rails
Intro to RailsIntro to Rails
Intro to Rails
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
Torquebox OSCON Java 2011
Torquebox OSCON Java 2011Torquebox OSCON Java 2011
Torquebox OSCON Java 2011
 
First Day With J Ruby
First Day With J RubyFirst Day With J Ruby
First Day With J Ruby
 
Jruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-java
 
Pourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirentPourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirent
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
 

Recently uploaded

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
 
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
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
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
 
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
 
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
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
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.
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
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
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 

Recently uploaded (20)

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...
 
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
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
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
 
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
 
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
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
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
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 

Ruby on Rails survival guide of an aged Java developer

  • 1. Ruby on Rails sur vival guide of an aged Java developer or how to get a project released without knowing the language and neither the framework Gian Carlo Pace - RubyDay - 10/06/2011 - Centro Congressi Milanofiori http://www.thinkgeek.com/gadgets/tools/a396/
  • 2. Resilienza. L'arte di risalire sulla barca rovesciata.
  • 3. “Quando la vita rovescia la nostra barca, alcuni affogano altri lottano strenuamente per risalirvi sopra.
  • 4. Gli antichi connotavano il gesto di tentare di risalire sulle imbarcazioni rovesciate con il verbo «resalio».
  • 5. Forse il nome della qualità di chi non perde mai la speranza e continua a lottare contro le av versità, la resilienza deriva da qui.” (Resisto Dunque Sono, Pietro Trabucchi - Casa editrice Corbaccio 2009)
  • 7. Z|tÇ VtÜÄÉ ctvx ÇÉà vÉw|Çz ]tät yÉÜ DLE wtçá
  • 8.
  • 9. n 0 0 b
  • 10. history of a change
  • 11. t wo teams Coldfusion team Java Team
  • 12. the remake Java Team Customer
  • 13. The standby... we must put in standby the project you are working on ok! you’ll work on a new project using Java, so you’ll get the chance to learn it good! manager coldfusion team
  • 14. fast prototype ...ah, a last comment. We need a fast prototype for the project to study the business in advance! !!! !!! manager coldfusion team
  • 15. steep learning cur ve confusion team WTF
  • 16. Java project kick off Let’s start! customer
  • 17. different internal POV SOA iBatis JavaScript GWT JBoss Hibernate REST Flex HTML5 Spring Glassfish BlazeDS Java Team
  • 18. time passes Java Team Flex BlazeDS Spring Hibernate Glassfish
  • 19. time passes B ad M ood Java Team Flex BlazeDS Spring Hibernate Glassfish
  • 20. what should we do?
  • 21. when the going gets tough... we need a BRAVE decision. we need a technology switch! ...the meeting gets going!
  • 26. Situation Project esteemed 3 months Late of 1 month Ruby Language unknown Rails Framework unknown Deadline unchanged Customer waiting
  • 31. Ruby: MacOSX & Linux https://rvm.beginrescueend.com $ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) $ rvm install 1.9.2 $ rvm use 1.9.2 $ ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] $ which ruby /Users/gicappa/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
  • 32. Ruby Virtual Machines MRI/YARV (ruby) - http://www.ruby-lang.org/en/downloads/ Rubinius (rbx) - http://rubini.us/ JRuby (jruby) - http://www.jruby.org/ Ruby Enterprise Edition (ree) - http://www.rubyenterpriseedition.com/ MagLev (maglev) - http://maglev.gemstone.com/ IronRuby (ironruby) - http://www.ironruby.net/ MacRuby (macruby) - http://www.macruby.org/
  • 33. Rails Installation Usually run this as the root user: # gem install rails
  • 34. Rails Satisfaction $ rails new blog $ cd blog/ $ rake db:create $ bundle install $ rails server => Booting WEBrick => Rails 3.0.7 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2011-06-09 13:59:25] INFO WEBrick 1.3.1 [2011-06-09 13:59:25] INFO ruby 1.9.2 (2010-08-18) [x86_64- darwin10.5.0] [2011-06-09 13:59:25] INFO WEBrick::HTTPServer#start: pid=30347 port=3000
  • 36. Rails Installation on Windows "If you’re working on Windows, you should be aware that the vast majority of Rails development is done in Unix environments...” “...If at all possible, we suggest that you install a Linux virtual machine and use that for Rails development, instead of using Windows." (http://guides.rubyonrails.org/getting_started.html)
  • 37. Ruby vs Java: similarities Memory is managed for you via a garbage collector. Objects are strongly typed. There are public, private, and protected methods. There are embedded doc tools (Ruby’s is called RDoc).
  • 38. Ruby vs Java: differences You don’t need to compile your code. You just run it directly. All member variables are private. From the outside, you access everything via methods. Parentheses in method calls are usually optional and often omitted. Everything is an object. There’s no static type checking. Variable names are just labels. They don’t have a type associated with them. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
  • 39. Ruby Language: IRB $ irb irb(main):001:0> puts "Welcome rubyfriday!" Welcome rubyfriday! => nil irb(main):002:0>
  • 40. Ruby Language: OO “Metaprogramming Ruby” - Paolo Perrotta
  • 41. Ruby Language: OO irb(main):002:0> 3.times { puts "hi!" } hi! hi! hi! => 3 irb(main):003:0> "hi there".split(" ") => ["hi", "there"] irb(main):004:0>
  • 42. Ruby Language :symbols Symbols are constant names that you don’t have to predeclare and that are guaranteed to be unique. NORTH = 1 :north EAST = 2 :east SOUTH = 3 :south WEST = 4 :west
  • 43. Ruby Language: code blocks Code blocks are chunks of code you can associate with method invocation almost as if they were parameters
  • 44. Ruby Language: code blocks def call_block puts “Start of method” yield yield puts “End of method” end irb(main):008:0> call_block { puts 'In the block' } Start of method In the block In the block End of method => nil
  • 45. Rails Rails is a web application development framework written in the Ruby language DRY Convention Over Configuration RESTful Acrhitecture MVC Pattern Based ORM Based
  • 46. Rails: bundler Dependency manager $ bundle install Using rake (0.9.2) Using abstract (1.0.0) Using activesupport (3.0.7) Using builder (2.1.2) Using i18n (0.5.0) Using activemodel (3.0.7) ... Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. $
  • 47. Rails: rake rake means ruby make $ rake -T rake db:create # Create the database from config/ database.yml for the current Rails.env (use db:cre... rake db:drop # Drops the database for the current Rails.env (use db:drop:all to drop all databases) rake db:fixtures:load # Load fixtures into the current environment's database. rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false). rake db:migrate:status # Display status of migrations ...
  • 49. Rails: generators rails new MyProject rails generate model MyModel attr:string rails generate controller MyController rails generate mailer SenderClass
  • 50. Rails: generators $ rails generate scaffold Post title:string body:text invoke active_record create db/migrate/20110609171958_create_posts.rb create app/models/post.rb invoke test_unit create test/unit/post_test.rb create test/fixtures/posts.yml route resources :posts invoke scaffold_controller create app/controllers/posts_controller.rb invoke erb create app/views/posts create app/views/posts/index.html.erb create app/views/posts/edit.html.erb create app/views/posts/show.html.erb create app/views/posts/new.html.erb create app/views/posts/_form.html.erb invoke test_unit ... invoke helper ... invoke stylesheets create public/stylesheets/scaffold.c
  • 51. Rails: routes $ rake routes posts GET /posts(.:format) {:action=>"index", :controller=>"posts"} POST /posts(.:format) {:action=>"create", :controller=>"posts"} new_post GET /posts/new(.:format) {:action=>"new", :controller=>"posts"} edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"} post GET /posts/:id(.:format) {:action=>"show", :controller=>"posts"} PUT /posts/:id(.:format) {:action=>"update", :controller=>"posts"} DELETE /posts/:id(.:format) {:action=>"destroy", :controller=>"posts"}
  • 53. Rails: view erb = templating system
  • 57. Rails: authentication Devise http://ruby-toolbox.com/ Authlogic
  • 58. Rails: authorization http://ruby-toolbox.com/ CanCan declarative_authorization
  • 59. Rails: file upload paperclip http://ruby-toolbox.com/ attachment_fu
  • 60. Rails: misc will_paginate rufus-scheduler http://ruby-toolbox.com/ rmagick EventMachine formtastic aws-s3 bitly t witter_oauth
  • 61. Rails: testing test-unit rspec http://ruby-toolbox.com/ cucumber factory_girl capybara spork
  • 62. Rails: deployment http://ruby-toolbox.com/ capistrano
  • 66. Production Good job guys! customer
  • 67. What we achieved Delivered working soft ware On time Starting a month LATER Learning from scratch Ruby Learning from scratch Rails
  • 69. Lesson learned cohesion and mood matters be resilient!
  • 71. Q&A?

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. Benvenuti a tutti mi chiamo Gian Carlo Pace e sono il leader del JUG Milano e sono 192 giorni che non programmo in Java.\nLo speech &amp;#xE8; di livello introduttivo anche perch&amp;#xE9; non potrebbe essere diversamente dato che sono in posizione socratica. \nsapiente &amp;#xE8; soltanto chi sa di non sapere - dotta ignoranza\novvero so di non sapere nulla. insomma io per primo sono un n00b per cui probabilmente commetter&amp;#xF2; imprecisioni che spero perdoniate. \n
  9. Comunque oggi vi vorrei parlare della storia di uno switch di un&apos;azienda piccola ma agguerrita da java/coldfusion a ruby on rails e di tutte le difficolt&amp;#xE0; che abbiamo dovuto incontrare per portare a casa la pagnotta e si spera rendere felice un cliente. \n\n
  10. La storia comincia quando arrivo nell&apos;azienda in cui lavoro attualmente in cui fondamentalmente ci sono due team uno java ed uno coldfusion con progetti e know how ben distinti. L&apos;azienda nasce dalla fusione di due aziende precedenti che si occupavano di progetti differenti ma vuole mettere a frutto la sinergia delle varie competenze ed estrazioni che sembrano essere compementari ma la cosa stenta a succedere in quanto i due team presi dal lavoro quotidiano difficilmente riescono a vedersi se non alla macchinetta del caff&amp;#xE9; o a pranzo. \n
  11. Un giorno arriva un grosso cliente dell&apos;azienda che chiede il rifacimento di un&apos;applicazione coldfusion.\nL&apos;applicazione &amp;#xE8; nata con una textbox ed oggi ha la form principale con 136 campi. Si parla di 7 anni di sviluppi che affastellano feature ed un database che stenta a seguire le esigenze del cliente sia di performance (ricerche avanzate lentissime) che di business: l&apos;applicazione non rispecchia pi&amp;#xF9; la situazione del business attuale. Il codice diventa viscoso: ovvero cosa meno il workaround che una soluzione corretta. \n\n
  12. Altro problema: un altro cliente mette in standby lo sviluppo di uno del secondo progetto principale. Le persone del secondo progetto dovrebbero essere allocate ad un progetto interno che prevede una prima fase di prototipizzazione. Su quale linguaggio? Potrebbe essere la volta buona che iniziamo ad unificare l&apos;azienda con direzione Java. \nPer&amp;#xF2; dire Java e fast prototyping non &amp;#xE8; proprio la stessa cosa. \n\n
  13. Gli sviluppatori coldfusion avrebbero dovuto imparare cose come Spring, Hibernate, un framework web a scelta (flex? altro linguaggio), Maven application server...\n\n
  14. \nma subito appare un problema \ndifficile fare fast prototyping a causa di una curva di apprndimento particolarmente lenta\n
  15. Nel frattempo il progetto di rifacimento del software in java + flex parte a novembre 2010. \n\n
  16. Ulteriore complicazione data la pletora di linguaggi e di esperienze personali che costituiscono il team ci sono visioni abbastanza differenti sulle architetture e approcci allo sviluppo. Flex / HTML5 + Js ? Restful?\nPartono flame e trolling sulla mailing list interna ma nonostante le discussioni non si riesce a trovare una quadra. \n
  17. Ulteriore complicazione data la pletora di linguaggi e di esperienze personali che costituiscono il team ci sono visioni abbastanza differenti sulle architetture e approcci allo sviluppo. Flex / HTML5 + Js ? Restful?\nPartono flame e trolling sulla mailing list interna ma nonostante le discussioni non si riesce a trovare una quadra. \n
  18. Si lavora per un mese ottenendo solo una form malfatta in flex con una lentezza colossale.\nCresce il malumore ed il management se ne accorge. Occorre una soluzione dirompente.\n\n
  19. Riunione con gli sviluppatori tutti contingentati. Si decice di cambiare radicalmente tecnologia su cui si baser&amp;#xE0; lo sviluppo aziendale da qui in avanti in modo democratico. \n
  20. Si profilano dei candidati che devono poter prototipizzare velocemente e avere una robustezza enterprise e si far&amp;#xE0; scouting in pair. I candidati sono stati Django, Rails, Play e Grails.\nDopo quattro giorni di dure prove di tutto il team, indovinate chi ha vinto? Rails. \n\n
  21. Ha vinto soprattutto per la community e perch&amp;#xE9; inizia ad essere un framework molto maturo e quindi adatto sia la fast and furios che all&apos;enterprise.\nE poi ha una community piena di troll basta guardare il thread che &amp;#xE8; uscito fuori su coffescript e questo rispecchia molto la nostra azienda. \n\n
  22. Ha vinto soprattutto per la community e perch&amp;#xE9; inizia ad essere un framework molto maturo e quindi adatto sia la fast and furios che all&apos;enterprise.\nE poi ha una community piena di troll basta guardare il thread che &amp;#xE8; uscito fuori su coffescript e questo rispecchia molto la nostra azienda. \n\n
  23. Per cui ecco che esce la resilienza aziendale, la capacit&amp;#xE0; di risalire sulla barca rovesciata. Si ripianifica il progetto che doveva essere finito in tre mesi di tre sviluppatori lasciando la deadline fissa e aggiungendo due sviluppatori si pensa di farlo in due mesi. Senza alcuna esperienza del linguaggio ruby, n&amp;#xE9; del framework rails e senza nessuna idea dei tempi che occorrano n&amp;#xE9; per apprenderli n&amp;#xE9; per sviluppare.\nresilienza alle volte fa rima con incoscienza.\n\n
  24. \n
  25. Prima cosa abbiamo comprato libri sulla neonata amazon.it.\n\n
  26. Poi abbiamo contattato amici che potessero fornirci un corso acceleratissimo persgrossarci dei rudimenti base.\nE abbiamo trovato Paolo Montrasio. \nNel frattempo che facevamo il corso abbiamo mosso i primi passi con i tutorial sia di ruby che di rails e successivamente abbiamo cominciato a sviluppare principalmente in pair per diffondere la conoscenza le prime user stories pi&amp;#xF9; semplici.\n\n
  27. \n
  28. Io ho fatto casino e devo dire che se siete usi a compilarvi i vostri pacchetti unix ricompilare ruby vi d&amp;#xE0; una qualche sicurezza di un mondo che conoscete e che in qualche modo potete dominiare meglio. Anche perch&amp;#xE9; dovrete ancora comprendere come e dove vengono installate le gemme.\n\nrvm in prima battuta vi aiuta a switchare da una versione ad un altra di ruby ma in effetti fa molte pi&amp;#xF9; cose. Il tutto viene spiegato qui: https://rvm.beginrescueend.com/rvm/myths/\n\n
  29. In effetti di Virtual Machines per far girare ruby ce ne sono un po&apos;\nMRI/YARV (ruby) VM di default (green threads)\nRubinius (rbx) - http://rubini.us/ - &amp;#xE8; simile concettualmente alla JVM con un Justi in time compiler Bytecode compiler ed una efficiente traduzione in codice macchima prima dell&apos;esecuzione. Compatibile al 93% con l&apos;implementazione 1.8.7 della MRI. Cominceranno l&apos;implementazione della 1.9 dopo la release della ver 1.0.\nJRuby (jruby) - http://www.jruby.org/ - uscita la compatibilit&amp;#xE0; con ruby 1.9.2 solo da poco 2011-03-15 per cui non l&apos;abbiamo accarezzata inoltre non volevamo aggiungere una variabile al gi&amp;#xE0; difficile lavoro.\n\nRuby Enterprise Edition (ree) Minore memory footprint interprete 1.8.7 molto stabile - http://www.rubyenterpriseedition.com/\nMagLev (maglev) - http://maglev.gemstone.com/ - Alpha Basata su GemStone VM\nIronRuby (ironruby) - http://www.ironruby.net/ - implementazione su .net\nMacRuby (macruby) - http://www.macruby.org/ implementazione in ObjectiveC della VM integrata con MacOSX\n\n
  30. \n
  31. $ rails new blog\n$ cd blog/\n$ rake db:create\n$ bundle install\n$ rails server\n\n\n\nrails s\n=&gt; Booting WEBrick\n=&gt; Rails 3.0.7 application starting in development on http://0.0.0.0:3000\n=&gt; Call with -d to detach\n=&gt; Ctrl-C to shutdown server\n[2011-06-09 13:59:25] INFO WEBrick 1.3.1\n[2011-06-09 13:59:25] INFO ruby 1.9.2 (2010-08-18) [x86_64-darwin10.5.0]\n[2011-06-09 13:59:25] INFO WEBrick::HTTPServer#start: pid=30347 port=3000\n
  32. $ rails new blog\n$ cd blog/\n$ rake db:create\n$ bundle install\n$ rails server\n\n\n\nrails s\n=&gt; Booting WEBrick\n=&gt; Rails 3.0.7 application starting in development on http://0.0.0.0:3000\n=&gt; Call with -d to detach\n=&gt; Ctrl-C to shutdown server\n[2011-06-09 13:59:25] INFO WEBrick 1.3.1\n[2011-06-09 13:59:25] INFO ruby 1.9.2 (2010-08-18) [x86_64-darwin10.5.0]\n[2011-06-09 13:59:25] INFO WEBrick::HTTPServer#start: pid=30347 port=3000\n
  33. Per gli utenti windows la prima cosa &amp;#xE8; fare riferimento alla pagina:\nhttp://wiki.rubyonrails.org/it/getting-started/installation/windows\nAlla fine gli sviluppatori in azienda da noi esasperati dai problemi dei crash su windows e delle incopatibilit&amp;#xE0; di alcune gemme che su *nix funzionavano egregiamente hanno installato una vm ubuntu e lanciano il server rails l&amp;#xEC; utilizzando l&apos;editor da windows in una directory condivisa.\n\n
  34. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  35. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  36. Un tool che risulta molto utile &amp;#xE8; irb (Interactive Ruby) che &amp;#xE8; una shell interprete del inguaggio in cui si possono definire classi moduli variabili e ispezionare subito il risultato delle nostre operazioni. La shell &amp;#xE8; molto molto comoda per imparare o per comprendere come funzioni uno stralcio di codice particolarmente ostico. \n\n
  37. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  38. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  39. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  40. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  41. \n
  42. Quando si approccia Rails il problema &amp;#xE8; dato dal fatto che non si conosce n&amp;#xE8; il liguaggio n&amp;#xE8; il framework. La parte positiva &amp;#xE8; che il framework &amp;#xE8; pi&amp;#xF9; un DSL e quindi ha un processo di apprendimento a cipolla ovvero si pu&amp;#xF2; cominciare ad utilizzarlo conoscendolo poco e scoprendo volta per volta quello che &amp;#xE8; necessario scoprire.\n\nhttp://guides.rubyonrails.org/\nsimpatico http://railsforzombies.org/\n\nLe guides molto ben fatte permettono di creare la classica applicazione di blogging. E permettono di fare una carrellata di molte delle parti di rails.\n\n
  43. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  44. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  45. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  46. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  47. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  48. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  49. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  50. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  51. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  52. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  53. Quando si approccia Rails il problema &amp;#xE8; dato dal fatto che non si conosce n&amp;#xE8; il liguaggio n&amp;#xE8; il framework. La parte positiva &amp;#xE8; che il framework &amp;#xE8; pi&amp;#xF9; un DSL e quindi ha un processo di apprendimento a cipolla ovvero si pu&amp;#xF2; cominciare ad utilizzarlo conoscendolo poco e scoprendo volta per volta quello che &amp;#xE8; necessario scoprire.\n\nhttp://guides.rubyonrails.org/\nsimpatico http://railsforzombies.org/\n\nLe guides molto ben fatte permettono di creare la classica applicazione di blogging. E permettono di fare una carrellata di molte delle parti di rails.\n\n
  54. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  55. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  56. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  57. Rails &amp;#xE8; una gemma che si basa su altre gemme. Rack &amp;#xE8; la gemma che assolve alla comunicazione web e che costituisce la base di molti framework web. \n\nRails si basa sul pattern model view controller con un&apos;architettura RESTful. Utilizza la gemma ActiveRecord come orm ed un sistema di migrazioni che permettono di versionare i cambiamenti del database (simile a liquidbase per java per chi lo conoscesse). \nUtilizza bundler per gestire le dipendenze un po&apos; come maven non sovraingegnerizzato.\nBisogna dire che ruby parte avvantaggiato perch&amp;#xE9; ha il package manager rubygems embedded nel linguaggio che java non ha mai avuto. Inoltre le gemme vengono tutte storate nel file https://rubygems.org/ senza la necessit&amp;#xE0; di fare il setup di mille repository. Chiunque pu&amp;#xF2; creare ed uplodare gemme e quindi rilasciarle.\nAltra gemma importante &amp;#xE8; rake: ovvero ruby make. con essa si possono lanciare task (simili a quelli di ant) scritti sempre in ruby. \nRails ne ha alcuni di default che si possono listare andando nella directory di progetto e lanciando\n\nrake -T\n\n
  58. inizialmente abiutuati a fare testdriven ma non riuscivamo a causa del fatto che non conoscendo ruby non sapevamo se il test non funzionasse a causa di ruby o di rails \n\nPaura dell&apos;effetto boiled frogs \n\n\n
  59. inizialmente abiutuati a fare testdriven ma non riuscivamo a causa del fatto che non conoscendo ruby non sapevamo se il test non funzionasse a causa di ruby o di rails \n\nPaura dell&apos;effetto boiled frogs \n\n\n
  60. inizialmente abiutuati a fare testdriven ma non riuscivamo a causa del fatto che non conoscendo ruby non sapevamo se il test non funzionasse a causa di ruby o di rails \n\nPaura dell&apos;effetto boiled frogs \n\n\n
  61. \n
  62. Abbiamo studiato abbiamo lavorato feature per feature scoprendo sempre cose nuove ogni giorno e tentando di convidirele il pi&amp;#xF9; possibile imparando molto da ruby dal progetto e dai noi stessi e abbiamo aggredito una feature alla volta tentando comunque dei ricicli nonostante i tempi fossero stretti dato che c&apos;era di mezzo anche il natale. \nAbbiamo lavorato indefessamente non facendo quasi pause e facendo training on the job\n\n\n
  63. Il giorno 4 Febbraio 2011 abbiamo deployato un&apos;applicazione feature complete.\nPer cui un&apos;applicazione stimata con un effort di 150gg uomo per un elapsed di tre mesi per tre sviluppatori &amp;#xE8; stato rilasciata in 200gg uomo con un elapsed di due mesi e 5 sviluppatori.\n\n\n\n
  64. Il giorno 4 Febbraio 2011 abbiamo deployato un&apos;applicazione feature complete.\nPer cui un&apos;applicazione stimata con un effort di 150gg uomo per un elapsed di tre mesi per tre sviluppatori &amp;#xE8; stato rilasciata in 200gg uomo con un elapsed di due mesi e 5 sviluppatori.\n\n\n\n
  65. Il giorno 4 Febbraio 2011 abbiamo deployato un&apos;applicazione feature complete.\nPer cui un&apos;applicazione stimata con un effort di 150gg uomo per un elapsed di tre mesi per tre sviluppatori &amp;#xE8; stato rilasciata in 200gg uomo con un elapsed di due mesi e 5 sviluppatori.\n\n\n\n
  66. Il giorno 4 Febbraio 2011 abbiamo deployato un&apos;applicazione feature complete.\nPer cui un&apos;applicazione stimata con un effort di 150gg uomo per un elapsed di tre mesi per tre sviluppatori &amp;#xE8; stato rilasciata in 200gg uomo con un elapsed di due mesi e 5 sviluppatori.\n\n\n\n
  67. \n
  68. \n