• Home
  • About
Italians Terminator Railscast 4 italians The last rails gems The miners books Granpa miner

Rails3: Better, Faster, Stronger

Posted in News, rails. on Thursday, June 4th, 2009 by Marcello Barnaba Tags: merb, rails
Jun 04
Rails3: Harder, Better, Faster, StrongerTutti (o quasi) gli sviluppatori web conoscono o hanno sentito almeno parlare di Ruby on Rails, un framework full-stack per la creazione di applicazioni web utilizzando il linguaggio di programmazione Ruby.

Qualora non abbiate mai sentito parlare nè di Rails, nè di web application, sulla wikipedia italiana è presente una brevissima panoramica su di esso, in cui è impossibile non essere colpiti dalla sua Filosofia. Rails è infatti definito dall’autore David Heinemeier Hansson “opinionated software“, cioè un software che impone determinati approcci e workflow durante la progettazione e la stesura di un progetto, con i vantaggi e svantaggi che questo può portare.

Altra caratteristica che ha contraddistinto le prime evoluzioni di Rails (2003-2007) è stata la mancanza di interfacce robuste per la sua estensione attraverso plug-in esterni, complice anche una controversa caratteristica di Ruby: il monkeypatching. In Ruby le classi non sono chiuse: è possibile modificarne il funzionamento in qualsiasi punto del programma, e questo vale anche per le classi base (ad es. String, Integer, …). Ciò ha portato al proliferare di plug-in ed estensioni al framework che facevano leva su dettagli implementativi privati, la cui stabilità nel tempo non è garantita, con tutti i problemi di manutenibilità che ne derivano: chi ha seguito le prime fasi del rilascio di Rails non può non ricordare il lungo dibattito che seguì dall’implementazione dei Rails Engines.

In seguito, gli engines sono stati rivalutati, tanto da venir presentati all’edizione 2009 di RailsConf, come una via funzionale per la realizzazione di componenti software riutilizzabili e completi, poichè possiedono dei Model, View, Controller, e delle Route che connettono gli URI a cui risponde l’applicazione al codice che ne implementa la logica.

Questo cambio di visione da parte di DHH è stato determinato dalla sua esperienza di trovarsi a reimplementare diverse applicazioni che sarebbero potute essere racchiuse in un engine e successivamente riutilizzate.

Simili considerazioni sono state anche espresse in proposito al forte carattere opinionated di Rails, i cui approcci imposti non riguardano solo l’utilizzo di un certo pattern, ma anche l’imposizione di uno specifico “pezzo di software” che lo implementi. Ad esempio, per accedere ad un database in Rails viene utilizzatoActiveRecord, un’implementazione del pattern di Object-Relational Mapping che permette di avvicinare il modello relazionale dei database attualmente diffusi sul mercato al modello object oriented utilizzato da Ruby e pervasivamente ereditato da Rails.

Il contesto Open Source

In un contesto open source, però, tale restrizione è vista come castrante da tanti developer. Nonostante ActiveRecord faccia bene il suo lavoro, è importante poter scegliere il componente più adatto ad un determinato scopo: è un concetto che qualsiasi sviluppatore esperto fa suo, tralasciando le inutili guerre di religione :).

La modularità, estendibilità e la presenza di un’interfaccia ragionata e soprattutto stabile sono i principi fondanti di Merb, un altro framework Ruby-based per la creazione di applicazioni web database-backed, la cui headline è Looking for a hacker framework?. Merb consiste in un piccolo core di funzionalità ben organizzate, su cui una serie di plug-in costruiscono e realizzano l’impianto completo su cui poi realizzare la propria applicazione.

Con Merb è possibile utilizzare il preferito degli ORM, template engine, mailer e testing frameworks disponibili, in quanto tutti si appoggiano al medesimo core. Inoltre è semplice realizzarne di nuovi per soddisfare le esigenze più disparate: è una filosofia molto simile a quella UNIX, in cui ogni singolo toolsoftware implementa limitate funzionalità (ma bene), dove per risolvere problemi più complessi è sufficiente l’utilizzo in cascata di diversi tool.

Dati i numerosi vantaggi di questo approccio, completamente opposto a quello iniziale di Rails, anche un Rated R individual dalle strong opinions ha deciso di cambiare idea ancora una volta, e annunciare al mondo la notizia che nessuno si aspettava di ricevere: rails e merb diventeranno un unico progetto!

Il risultato di questo merge si concretizzerà nella prossima major release di Rails, la 3.0, che è stata oggetto di un consistente talk a RailsConf 2009, e le cui caratteristiche saranno:

  • Meno “opinionated”: non più una singola “Rails Way”, bensì multiple “Rails Ways”, data la possibilità di scegliere tra differenti ORM (AR, Sequel, DataMapper, CouchRest, …), templating engines (ERb, HAML, Liquid, Markaby, …) Javascript libraries (Prototype, jQuery, MooTools, Dojo, …) e testing frameworks (Test::Unit, RSpec, Mocha, …).
  • Più veloce: il team di sviluppo di Merb è sempre stato attento alle performance, cercando di evitare la scrittura di software con troppa “magic” (e.g. abuso di method_missing) e che seguisse la sua filosofia di modularità e circoscrizione ad di un componente ad un singolo dominio applicativo. Rails3 erediterà questi approcci al design garantendo migliori performance. In quest’ottica è avvenuto anche l’inserimento di Metal in Rails 2.3.
  • Una public API: Sbagliando, s’impara. Se è vero che non è possibile immaginare l’uso che un utente finale fà di un software, allo stesso modo sono molteplici e imprevedibili gli usi che uno sviluppatore può fare di un framework, e tali diventano anche evil se non gli è fornita una API e delle linee guida per la sua estensione. Il lungo dibattito riguardo i Rails Engines ha fatto storia, e non è il caso di ripetere gli stessi errori.
  • Più modulare e più agnostico, dirette conseguenze dell’introduzione di una API, e che permettono quindi la realizzazione di applicazioni “componibili”, essendo il framework non una singola torre, ma più un set di strumenti a-la lego technic (bei ricordi :). Una funzionalità che conferma questo approccio, già disponibile in Rails 2.3, sono i Rails templates: essi offrono una DSL per automatizzare l’inizializzazione di una nuova applicazione, attraverso la scrittura dei requisiti in un file .rb da passare come argomento del parametro -m al comando rails. Questo blogpost di lifo contiene tutte le informazioni per un quickstart.
  • Più evolvibile: diretta conseguenza della maggiore modularità e di un cambio di vision. In Rails3 non ci saranno più “Vacche sacre”, bensì qualsiasi aspetto del framework potrà essere soggetto a cambiamento. Non spaventatevi: a patto che la API rimanga stabile e ci sia un definito processo dideprecation per le API marcate come obsolete, per lo sviluppatore non ci sarà alcun mal di testa. Molti più ce ne sono stati in passato a causa dell’assenza di API, dove ognuno implementava come meglio credeva le feature di cui aveva bisogno.

Live from the stage

Uno (dei tantissimi) esempi di come realizzare questo grande merge è possibile vederlo direttamente su github, nello specifico due commit su ActionController. Esso è stato completamente ristrutturato, e la nuova implementazione è stata riposta in una nuova directory, new_base, nel primo commit introdotta la Rails2Compatibility e rimossi i fixture template.

Successivamente, nel secondo commit, è avvenuto lo switch dalla vecchia ActionController::Base alla nuova, inserendo anche qualche hack temporaneo far sì che i test continuassero a funzionare.

Seguire un merge di questa portata operato da professionisti affermati è un ottimo esercizio, soprattutto per chi si è da poco affacciato all’ingegneria del software, e vuole imparare sul campo le best practices che portano le big rewrite al successo.

Il futuro?

Rails3 sarà un notevole passo avanti nella storia di questo framework, che si lascerà dietro le parti più controverse della sua filosofia, e permetterà alla community di farlo evolvere in maniere prima impossibili. È auspicabile per ogni sviluppatore seguirne il suo sviluppo, poichè è anche possibile imparare processi e approcci al project management, oltre che allo sviluppo di software. La gestione del progetto rails con relative milestone è gestita attraverso lighthouse, mentre tutto il codice sorgente è conservato su github. Data la natura di git (e github), chiunque può, in qualsiasi momento, effettuare un fork di rails e modificarlo come più gli piace. È una possibilità che poche altre piattaforme per lo sviluppo di software opensource permettono.

Inoltre, è possibile seguire il Rails Core Team su twitter, mantenersi aggiornati sugli sviluppi ad alto livello seguendo il blog di Ryan Daigle, seguire le discussioni attorno a Rails3 attraverso il mail-to-web gateway presente su ruby-forum.com e, ovviamente, aggiungere therubymine.com ai propri bookmark poichè su queste pagine riparleremo presto di Rails3 :).

A presto!

L’autore

Marcello Barnaba, Software Engineer per lavoro e per passione, seguo quotidianamente l’evolversi di Internet che sta cambiando sia la vita di milioni di persone che la società in cui si relazionano l’un l’altro. Ho un blog e cinguetto quotidianamente, cercando di non spendere tutto lo stipendio in Sushi ;).

9 Comments

  1. Luca Guidi on June 4th, 2009

    Bella overview, ma hai dimenticato Rack (presente dalla 2.3), la reimplementazione dei callbacks e l’adozione degli attributi HTML5 che porterà all’utilizzo non intrusivo di JavaScript.

  2. Simone Carletti on June 4th, 2009

    Aggiungo un link ad integrazione dell’articolo.
    http://railsconf.blip.tv/file/2081411/

    E’ il keynote di DHH alla RailsConf 2009.
    Contiene diverse anticipazioni di Rails 3.0, incluse quelle segnalate da Luca.

  3. Marcello Barnaba on June 5th, 2009

    @Luca grazie! Riguardo le mancanze, hai ovviamente ragione: a Rack e ai middleware ci sarebbe da dedicare un articolo intero, per non parlare di HTML5 :). TheRubyMine è un contenitore molto ricettivo, se hai tempo da dedicare alla scrittura potresti proporti come autore, se non lo hai già fatto :).

    @Simone grazie per l’integrazione, consiglio anche l’intervento di Robert Martin di Objectmentor a Railsconf ( http://railsconf.blip.tv/file/2089545/ ) e la relativa discussione che ne è derivata ( http://www.loudthinking.com/posts/42-we-need-both-engineers-and-artists-in-programming e http://blog.objectmentor.com/articles/2009/05/11/why-the-sea-is-boiling-hot ). Sia per gli aspetti più “filosofici” che per lo stile tipico di Uncle Bob :).

    ~Marcello

  4. Andrea on June 7th, 2009

    Ottimo lavoro, bel post. Sono sempre stato così impegnato a seguire l’evolversi di Rails e Ruby su siti e blog stranieri che non conoscevo (non li avevo mai cercati a dire il vero) quelli italiani :) Continuate così!

  5. Marcello Barnaba on June 8th, 2009

    @Andrea grazie! :) anche io come te seguo prevalentemente blog e siti stranieri perchè, purtroppo, le pubblicazioni italiane sono.. carenti :). Però tutti assieme possiamo ovviare a ciò: è sufficiente dedicare un po’ di tempo alla scrittura! A presto :)
    ~Marcello

  6. Marco Mastrodonato on June 18th, 2009

    Fremo per testare il risultato di questo merge, spero ne venga fuori qualcosa di molto interessante e soprattutto supportato da una degna community

  7. Nocleg Warszawa on June 10th, 2011

    obviously like your website however you have to check the spelling on quite a few of your posts. Several of them are rife with spelling issues and I find it very bothersome to inform the reality nevertheless I¡¦ll definitely come back again.

  8. Tod Carkhuff on February 9th, 2012

    This might not be the best place to inquire about this, but I am trying to find a pest management business inside the pittsburgh area and have no way to find out who is the best. I uncovered this business that is truly close to me and wanted to see if anyone has any critiques on them. Spectrum Pest Control, 3058 West Liberty Avenue, Dormont, PA 15216 - (412) 446-2802

  9. Roseann Evey on March 12th, 2012

    I leave a response each time I like a article on a site or I have something to add to the discussion. Usually it is a result of the passion displayed in the post I browsed. And after this post TheRubyMine » Blog Archive » Rails3: Better, Faster, Stronger. I was actually moved enough to post a thought :) I actually do have 2 questions for you if you don’t mind. Is it only me or does it appear like a few of the remarks appear as if they are left by brain dead people? :-P And, if you are posting at additional places, I’d like to keep up with you. Could you list the complete urls of all your social sites like your Facebook page, twitter feed, or linkedin profile?



Leave a Reply

TheRubyMine

  • Photo Stream
  • Categories
    • Granpa miner
    • Italians terminator
    • La miniera
    • News
    • rails
    • Railscast 4 italians
    • The miners books
  • Recent Articles
    • Primo Ruby Social Club del 2010!
    • Una birra con Ruby e Drupal
    • Rails3: Better, Faster, Stronger
    • RailsWayCon 2009 – Un free ticket per te !
    • Ruby Social Club, quarto appuntamento !
    • Free your gems to the wild
  • Archives
    • January 2010
    • June 2009
    • May 2009
    • April 2009
    • March 2009
  • Search






  • Home
  • About

© Copyright TheRubyMine. All rights reserved. The Ruby Mine

Back to Top