SlideShare a Scribd company logo
1 of 71
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çá
Ruby on Rails survival guide of an aged Java developer
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 Projectsjazzman1980
 
Security Goodness with Ruby on Rails
Security Goodness with Ruby on RailsSecurity Goodness with Ruby on Rails
Security Goodness with Ruby on RailsSource Conference
 
Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1Mark Menard
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsAgnieszka 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 IRBHiro 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 BackBurke 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 Jan09Shaer 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 CloudHiro Asari
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012alexismidon
 
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 NewLibin 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 Torqueboxrockyjaiswal
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoojeresig
 
Spring into rails
Spring into railsSpring into rails
Spring into railsHiro Asari
 
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

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 2010Arun Gupta
 
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 Ortegaarman o
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09Michael Neale
 
RubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteRubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteDr Nic Williams
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Racksickill
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiJackson Tian
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.jsguileen
 
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échirentNicolas Ledez
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011Lance 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 ApplicationAndrew 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

Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.francesco barbera
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Babel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxBabel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxYounusS2
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Spring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfSpring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfAnna Loughnan Colquhoun
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 

Recently uploaded (20)

Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Babel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxBabel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptx
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Spring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfSpring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdf
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.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çá
  • 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