Ruby on Rails sur vival guide          of an aged Java developer                                      or         how to ge...
Resilienza.Larte di risalire sulla barca rovesciata.
“Quando la vita rovescia lanostra barca, alcuni affoganoaltri lottano strenuamenteper risalirvi sopra.
Gli antichi connotavano il gestodi tentare di risalire sulleimbarcazioni rovesciate con ilverbo «resalio».
Forse il nome della qualità di chinon perde mai la speranza econtinua a lottare contro leav versità, la resilienza derivad...
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 teamsColdfusion team   Java Team
the remake           Java TeamCustomer
The standby...           we must put in standby the           project you are working on                                  ...
fast prototype          ...ah, a last comment. We need a           fast prototype for the project               to study t...
steep learning cur veconfusion team                 WTF
Java project kick off           Let’s start!customer
different internal POV           SOAiBatis               JavaScript             GWT   JBoss      Hibernate REST           ...
time passes                                  Java TeamFlex   BlazeDS    Spring   Hibernate   Glassfish
time passes                 B ad M ood                                  Java TeamFlex   BlazeDS    Spring   Hibernate   Gl...
what should  we do?
when the going gets tough...                we need a BRAVE decision.               we need a technology switch!    ...the...
technology selection
Ruby on RailsCommunityLibrariesAgeBooks
Ruby on RailsCommunityLibrariesAgeBooks
Ruby on Rails
SituationProject esteemed 3 months Late of 1 monthRuby Language             unknownRails Framework           unknownDeadli...
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/inst...
Ruby Virtual MachinesMRI/YARV (ruby) - http://www.ruby-lang.org/en/downloads/Rubinius (rbx) - http://rubini.us/JRuby (jrub...
Rails InstallationUsually 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...
Rails Satisfaction
Rails Installation on Windows"If you’re working on Windows, you should be aware thatthe vast majority of Rails development...
Ruby vs Java: similaritiesMemory is managed for you via a garbage collector.Objects are strongly typed.There are public, p...
Ruby vs Java: differencesYou don’t need to compile your code. You just run it directly.All member variables are private. F...
Ruby Language: IRB$ irbirb(main):001:0> puts "Welcome rubyfriday!"Welcome rubyfriday!=> nilirb(main):002:0>
Ruby Language: OO              “Metaprogramming Ruby” - Paolo Perrotta
Ruby Language: OOirb(main):002:0> 3.times { puts "hi!" }hi!hi!hi!=> 3irb(main):003:0> "hi there".split(" ")=> ["hi", "ther...
Ruby Language :symbolsSymbols are constant names that you don’t have to predeclare and that are        guaranteed to be un...
Ruby Language: code blocks Code blocks are chunks of code you canassociate with method invocation almost       as if they ...
Ruby Language: code blocks  def call_block      puts “Start of method”      yield      yield      puts “End of method”  en...
Rails  Rails is a web application developmentframework written in the Ruby language            DRYConvention Over Configura...
Rails: bundler                                      Dependency manager$ bundle installUsing rake (0.9.2)Using abstract (1....
Rails: rakerake means ruby make$ rake -Trake db:create                               # Create the database from config/dat...
Rails: MVC
Rails: generatorsrails new MyProjectrails generate model MyModel attr:stringrails generate controller MyControllerrails ge...
Rails: generators$ rails generate scaffold Post title:string body:text      invoke active_record      create    db/migrate...
Rails: routes$ rake routes    posts GET      /posts(.:format)            {:action=>"index", :controller=>"posts"}         ...
Rails: controller
Rails: viewerb = templating system
Rails: active record
Rails: active recordrake db:migrate
Rails: useful gems
Rails: authenticationDevise               http://ruby-toolbox.com/Authlogic
Rails: authorization                       http://ruby-toolbox.com/CanCandeclarative_authorization
Rails: file uploadpaperclip                        http://ruby-toolbox.com/attachment_fu
Rails: miscwill_paginaterufus-scheduler                 http://ruby-toolbox.com/rmagickEventMachineformtasticaws-s3bitlyt ...
Rails: testingtest-unitrspec                   http://ruby-toolbox.com/cucumberfactory_girlcapybaraspork
Rails: deployment                    http://ruby-toolbox.com/             capistrano
Rails: passenger
Project?
Work Hard
Production           Good job guys!customer
What we achievedDelivered working soft ware          On time  Starting a month LATERLearning from scratch RubyLearning fro...
One team!Rails team
Lesson learnedcohesion and mood matters       be resilient!
Thank You!
Q&A?
Ruby on Rails survival guide of an aged Java developer
Upcoming SlideShare
Loading in …5
×

Ruby on Rails survival guide of an aged Java developer

1,798 views

Published on

History of a change from Java to Ruby on Rails

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,798
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 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
  • 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
  • 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
  • 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
  • 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
  • Gli sviluppatori coldfusion avrebbero dovuto imparare cose come Spring, Hibernate, un framework web a scelta (flex? altro linguaggio), Maven application server...\n\n
  • \nma subito appare un problema \ndifficile fare fast prototyping a causa di una curva di apprndimento particolarmente lenta\n
  • Nel frattempo il progetto di rifacimento del software in java + flex parte a novembre 2010. \n\n
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • \n
  • Prima cosa abbiamo comprato libri sulla neonata amazon.it.\n\n
  • 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
  • \n
  • 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
  • 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
  • \n
  • $ 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
  • $ 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
  • 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
  • http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  • http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  • 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
  • http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  • http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  • http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  • http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/\n
  • \n
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • \n
  • 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
  • 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
  • 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
  • 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
  • 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
  • \n
  • \n
  • Ruby on Rails survival guide of an aged Java developer

    1. 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 frameworkGian Carlo Pace - RubyDay - 10/06/2011 - Centro Congressi Milanofiori http://www.thinkgeek.com/gadgets/tools/a396/
    2. 2. Resilienza.Larte di risalire sulla barca rovesciata.
    3. 3. “Quando la vita rovescia lanostra barca, alcuni affoganoaltri lottano strenuamenteper risalirvi sopra.
    4. 4. Gli antichi connotavano il gestodi tentare di risalire sulleimbarcazioni rovesciate con ilverbo «resalio».
    5. 5. Forse il nome della qualità di chinon perde mai la speranza econtinua a lottare contro leav versità, la resilienza derivada qui.” (Resisto Dunque Sono, Pietro Trabucchi - Casa editrice Corbaccio 2009)
    6. 6. me, myself and I
    7. 7. Z|tÇ VtÜÄÉ ctvx ÇÉà vÉw|Çz ]tät yÉÜ DLE wtçá
    8. 8. n 0 0 b
    9. 9. history of a change
    10. 10. t wo teamsColdfusion team Java Team
    11. 11. the remake Java TeamCustomer
    12. 12. 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
    13. 13. fast prototype ...ah, a last comment. We need a fast prototype for the project to study the business in advance! !!! !!!manager coldfusion team
    14. 14. steep learning cur veconfusion team WTF
    15. 15. Java project kick off Let’s start!customer
    16. 16. different internal POV SOAiBatis JavaScript GWT JBoss Hibernate REST Flex HTML5 Spring Glassfish BlazeDS Java Team
    17. 17. time passes Java TeamFlex BlazeDS Spring Hibernate Glassfish
    18. 18. time passes B ad M ood Java TeamFlex BlazeDS Spring Hibernate Glassfish
    19. 19. what should we do?
    20. 20. when the going gets tough... we need a BRAVE decision. we need a technology switch! ...the meeting gets going!
    21. 21. technology selection
    22. 22. Ruby on RailsCommunityLibrariesAgeBooks
    23. 23. Ruby on RailsCommunityLibrariesAgeBooks
    24. 24. Ruby on Rails
    25. 25. SituationProject esteemed 3 months Late of 1 monthRuby Language unknownRails Framework unknownDeadline unchangedCustomer waiting
    26. 26. Waltzing with Bears
    27. 27. Knowledge investment: books
    28. 28. Knowledge investment: a course
    29. 29. Installing Ruby: Windows
    30. 30. 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 -vruby 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
    31. 31. Ruby Virtual MachinesMRI/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/
    32. 32. Rails InstallationUsually run this as the root user:# gem install rails
    33. 33. 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=30347port=3000
    34. 34. Rails Satisfaction
    35. 35. Rails Installation on Windows"If you’re working on Windows, you should be aware thatthe vast majority of Rails development is done in Unixenvironments...”“...If at all possible, we suggest that you install a Linuxvirtual machine and use that for Rails development, insteadof using Windows." (http://guides.rubyonrails.org/getting_started.html)
    36. 36. Ruby vs Java: similaritiesMemory 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).
    37. 37. Ruby vs Java: differencesYou don’t need to compile your code. You just run it directly.All member variables are private. From the outside, youaccess everything via methods.Parentheses in method calls are usually optional and oftenomitted.Everything is an object.There’s no static type checking.Variable names are just labels. They don’t have a typeassociated with them. http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
    38. 38. Ruby Language: IRB$ irbirb(main):001:0> puts "Welcome rubyfriday!"Welcome rubyfriday!=> nilirb(main):002:0>
    39. 39. Ruby Language: OO “Metaprogramming Ruby” - Paolo Perrotta
    40. 40. Ruby Language: OOirb(main):002:0> 3.times { puts "hi!" }hi!hi!hi!=> 3irb(main):003:0> "hi there".split(" ")=> ["hi", "there"]irb(main):004:0>
    41. 41. Ruby Language :symbolsSymbols 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
    42. 42. Ruby Language: code blocks Code blocks are chunks of code you canassociate with method invocation almost as if they were parameters
    43. 43. 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
    44. 44. Rails Rails is a web application developmentframework written in the Ruby language DRYConvention Over Configuration RESTful Acrhitecture MVC Pattern Based ORM Based
    45. 45. Rails: bundler Dependency manager$ bundle installUsing 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 abundled gem is installed.$
    46. 46. Rails: rakerake means ruby make$ rake -Trake 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 currentRails.env (use db:drop:all to drop all databases)rake db:fixtures:load # Load fixtures into the currentenvironments database.rake db:migrate # Migrate the database (options:VERSION=x, VERBOSE=false).rake db:migrate:status # Display status of migrations...
    47. 47. Rails: MVC
    48. 48. Rails: generatorsrails new MyProjectrails generate model MyModel attr:stringrails generate controller MyControllerrails generate mailer SenderClass
    49. 49. 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
    50. 50. 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"}
    51. 51. Rails: controller
    52. 52. Rails: viewerb = templating system
    53. 53. Rails: active record
    54. 54. Rails: active recordrake db:migrate
    55. 55. Rails: useful gems
    56. 56. Rails: authenticationDevise http://ruby-toolbox.com/Authlogic
    57. 57. Rails: authorization http://ruby-toolbox.com/CanCandeclarative_authorization
    58. 58. Rails: file uploadpaperclip http://ruby-toolbox.com/attachment_fu
    59. 59. Rails: miscwill_paginaterufus-scheduler http://ruby-toolbox.com/rmagickEventMachineformtasticaws-s3bitlyt witter_oauth
    60. 60. Rails: testingtest-unitrspec http://ruby-toolbox.com/cucumberfactory_girlcapybaraspork
    61. 61. Rails: deployment http://ruby-toolbox.com/ capistrano
    62. 62. Rails: passenger
    63. 63. Project?
    64. 64. Work Hard
    65. 65. Production Good job guys!customer
    66. 66. What we achievedDelivered working soft ware On time Starting a month LATERLearning from scratch RubyLearning from scratch Rails
    67. 67. One team!Rails team
    68. 68. Lesson learnedcohesion and mood matters be resilient!
    69. 69. Thank You!
    70. 70. Q&A?

    ×