Infrastrutture per il web e Ruby on Rails Luigi Maselli http://grigio.org Corso autogestito di Linux 2007/2008 – Università di Torino Web 2.0 Nessuno ha ben capito cosa significhi “Web 2.0”, ma dire che qualcosa lo é fa figo.. Cosa c'é di nuovo? Dal punto di vista dell'utente Più interattività ●Interfacce più semplici ●Possibilità di condividere e ricomporre i propri contenuti ●Dati sempre disponibili online ●Siti web che possono sostituire applicazioni locali (client email, lettori di feed,..) ● Dal punto di vista del programmatore Standard web in continua evoluzione ●Chiamate asincrone ●WebApi ●Framework ●.. ● ..cioé Client presentazione (html, xml, json, flash), interazione (javascript, ajax, flash) Firefox(gecko), IE, Safari(WebKit), Opera, applicazioni native interfacciate a WebAPI (es: Tweet = Clutter + Twitter) Server webserver, database Apache, Lighttpd, Php, Python, Ruby, Mysql, Oracle, SQLite,.. ..e Ruby on Rails? Client presentazione (html, xml, json, flash), interazione (javascript, ajax, flash) Firefox(gecko), IE, Safari(WebKit), Opera, applicazioni native interfacciate a WebAPI (es: Clutter + Twitter) Ruby on Rails Server webserver, database Apache, Lighttpd, Php, Python, Ruby, Mysql, Oracle, SQLite,.. Prima di andare oltre, Ruby! Completamente ad oggetti, conciso, espressivo, semplice, dinamico, multipiattaforma, multivirtualmachine, multiuso e Open Source. Altre caratteristiche interessanti: Duck Typing e Blocchi (Vedi Wikipedia) Un unico linguaggio ad alto livello per: scripting, applicazioni desktop e web. È stato creato in Giappone da まつもとゆきひろ (Yukihiro Matsumoto - Matz) nel 1993 e dopo qualche anno si è diffuso nel resto del mondo. Scripting Dir.open('.').each {|file| p file.upcase.split('.')[0]} # Oppure for file in Dir.open('.') print file.upcase.split('.')[0] , "\n" end puts `cat /proc/cpuinfo`.grep(/[0-9]\.[0-9]/) # => cpu MHz : 1109.909 # => bogomips : 2222.17 Applicazioni desktop require 'gtk2' # Classi class Persona attr_accessor :cognome # costruttore def initialize(nome, cognome) @nome = nome @cognome = cognome end # per chi vuol essere ridondante def nome; @nome; end def nome= (nome) @nome = nome end # fine end io = Persona.new('Pippo', 'Baudo') io.nome = 'Joe' io.cognome = 'Vanetti' # GUI label = Gtk::Label.new "Hello World #{io.nome}, sono le ore #{Time.now}" window = Gtk::Window.new << label window.signal_connect('destroy') { Gtk::main_quit} window.show_all Gtk.main Applicazioni web (vedi Rails) Ruby on Rails è un Domain Specific Language (DSL), estende Ruby, applica dei Design Pattern come Model View Controller(MVC) e Convention over Configuration. Il framework Ruby on Rails ha avuto talmente tanto successo da aver ispirato framework analoghi in Php, Perl, .NET,.. Qualcuno lo ritiene un linguaggio indipendente, per la sua flessibilità e per le sue “magie”, ma tutto questo succede grazie a Ruby! Ruby on Rails (MVC) Model Gestisce le relazioni tra le tabelle del database Mappa una query su un oggetto (Object-relational mapping, ORM) Valida la correttezza dei dati Non c'é bisogno di specificare il nome della tabella di riferimento(*) (*) Se si usano le convenzioni di Rails Controller Carica i model per le view Gestisce le diverse tipologie di accesso Varie ed eventuali View È l'equivalente della “pagina Php” Non può essere chiamata direttamente Può essere anche Xml, json, rss,.. Si occupa di presentare i dati, i form e gli errori Risorse Applicazione TODO d'esempio http://grigio.org/files/todo.tar.gz Italiano http://ruby-it.org/ http://www.therubymine.com/ http://ruby.html.it http://grigio.org/un_assaggio_ruby_e_rails English http://api.rubyonrails.org/ http://www.ruby-lang.org http://rubyonrails.org http://railscasts.com/