Top Banner
Ruby on Rails Chew Choon Keat <sharedcopy.com> 9th April 2008 @ Singapore Management University Sharing Session for Singapore PHP User Group
76

Ruby on Rails - Sharing Session for Singapore PHP User Group

Jul 17, 2015

Download

Technology

Choon Keat Chew
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby on Rails

Chew Choon Keat <sharedcopy.com>9th April 2008 @ Singapore Management University

Sharing Session for Singapore PHP User Group

Page 2: Ruby on Rails - Sharing Session for Singapore PHP User Group

Background

• Chew Choon Keat @ blog.choonkeat.com

• Various startups & IT shops doing webapps

• Somehow almost always relates to mobile stuff, e.g. SMS, MMS, WAP,...

• J2EE shop

• 2004: Hello Rails

• RssFwd.com project

• SharedCopy.com

Page 3: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby on Rails• Ruby Web Framework based on MVC

“optimized for programmer happiness and sustainable productivity”

Page 4: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby on Railsamazon.com

BBCCapGemini

BPNCiscoC|Net

EA (Electronic Arts)IBM

JP MorganNASAOakleyOracleSiemens

ThoughtWorksYahoo!

http://blog.obiefernandez.com/content/2008/03/big-name-compan.html

Page 5: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby Web Framework based on MVC

• A Programming Language

• Does it matter?

• What language do you use when talking to your [____________] ?

• Ever read a EULA before?

Page 6: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Domain Specific Language

• Big words. Somebody else need it.

• Jargons e.g. “Google it!”

• Writing programs down to the language?

• Build the language up?

• Article belongs_to :author

• Author has_many :articles

Ruby Web Framework based on MVC

Page 7: Ruby on Rails - Sharing Session for Singapore PHP User Group

• You could

• echo “HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nContent-Length: 100\r\n\r\n<html>...”

• Or use a framework

• render “index.html”

• Common vs Exceptions

Ruby Web Framework based on MVC

http://flickr.com/photos/kervinchong/6074454/

http://flickr.com/photos/qousqous/4682900/

Page 8: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Model

• View

• Controller

Ruby Web Framework based on MVC

http://flickr.com/photos/kodama/8050629/

http://flickr.com/photos/brutalworks/136746095/

Page 9: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Structure that helps you to build GUI apps

Ruby Web Framework based on MVC

http://flickr.com/photos/lincolnian/120277776/

http://flickr.com/photos/pulpolux/1579275746/

http://flickr.com/photos/justusthane/1252907196/

Page 10: Ruby on Rails - Sharing Session for Singapore PHP User Group

http://localhost:3000/articles

app/models/article.rbM

app/views/articles/index.html.erbV

app/controllers/articles_controller.rbC

Result

Page 11: Ruby on Rails - Sharing Session for Singapore PHP User Group

http://localhost:3000/articles

app/models/article.rbM

app/views/articles/index.html.erbV

app/controllers/articles_controller.rbCGet “Articles” to fetch data from DB

Result

Page 12: Ruby on Rails - Sharing Session for Singapore PHP User Group

http://localhost:3000/articles

app/models/article.rbM

app/views/articles/index.html.erbV

app/controllers/articles_controller.rbCPass @articles data to render

Result

Page 13: Ruby on Rails - Sharing Session for Singapore PHP User Group

http://localhost:3000/articles

app/models/article.rbM

app/views/articles/index.html.erbV

app/controllers/articles_controller.rbC

Result

Rendered HTML goes back to browser

Page 14: Ruby on Rails - Sharing Session for Singapore PHP User Group

Formshttp://localhost:3000/articles/new

Page 15: Ruby on Rails - Sharing Session for Singapore PHP User Group

Formsapp/views/articles/new.html.erb http://localhost:3000/articles/new

Page 16: Ruby on Rails - Sharing Session for Singapore PHP User Group

Forms

Submitted values is accessible via “params”

Page 17: Ruby on Rails - Sharing Session for Singapore PHP User Group

Forms

Submitted values is accessible via “params”

app/controllers/articles_controller.rb

Page 18: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Options

• All the options, all the time

• You may like to go... Left? Right?

• Left? Right?

• Right?

Configuration

http://flickr.com/photos/zzathras777/1477996488/

Page 19: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Accept that not all roads are equal

• Common case; 80/20 Rule

• Culture that values conventions

• Development process highway

• Understand somebody else’s project

• Maintenance - when does it start?

Convention

Page 20: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control your source code?

Page 21: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control your source code?

Who?

Page 22: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control your source code?

What?

Who?

Page 23: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control your source code?

What?

Who?

When?

Page 24: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control your source code?

What?

Who?

When?

Where?

Page 25: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control your source code?

Why?What?

Who?

When?

Where?

Page 26: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control database schema?

Page 27: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control database schema?

idemail

User

Page 28: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control database schema?

idemail

Useridfirst_namelast_nameemailcreated_at

User

ALTER TABLE user .... ;

Page 29: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control database schema?

idemail

Useridfirst_namelast_nameemailcreated_at

Useridnameemailcreated_atupdated_at

User

ALTER TABLE user .... ;ALTER TABLE user .... ;

Page 30: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control database schema?

idemail

Useridfirst_namelast_nameemailcreated_at

Useridnameemailcreated_atupdated_at

Useridfullnameemailcreated_atupdated_at

User

ALTER TABLE user .... ;ALTER TABLE user .... ;ALTER TABLE user .... ;

Page 31: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control database schema?

001_create_user002_add_names_columns

003_combine_name_columns004_rename_fullname

rake db:migrate:down

rake db:migrate

Page 32: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

Page 33: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

http://flickr.com/photos/ztephen/239387292/

myfacester.com v1laptop

mysqldump < schema.sql

Page 34: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

myfacester.com v2laptop

http://flickr.com/photos/ztephen/239387292/

backup.tar?

mysqldump < alter_table.sql

Page 35: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptop

http://flickr.com/photos/ztephen/239387292/

myfacester.com v2.1

/tmp/monday.tar.gz?

backup.tar?

mysqldump < alter_table2.1.sql

Page 36: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com v2.1

/tmp/monday.tar.gz?

backup.tar?

mysqldump < alter_table2.1.sql

What if there’s a problem?

Page 37: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

source version control, remember?

Page 38: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

cap deploy

svn.myfacester.com

http://flickr.com/photos/bods/485081783/

Page 39: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

rake db:migrateschema version control, remember?

Page 40: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

Page 41: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

cap deploy

svn.myfacester.com

http://flickr.com/photos/bods/485081783/

Page 42: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

rake db:migrate

Page 43: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

Page 44: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

cap deploy

svn.myfacester.com

http://flickr.com/photos/bods/485081783/

Page 45: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

rake db:migrate

Page 46: Ruby on Rails - Sharing Session for Singapore PHP User Group

Version Control

• Do you version control deployments?

laptopmyfacester.com

svn.myfacester.com

rake db:migrate:down

cap rollback

http://flickr.com/photos/bods/485081783/

Page 47: Ruby on Rails - Sharing Session for Singapore PHP User Group

• “Make it work, make it right, make it fast”

• scaffolding - get it working

• Learn as you go.

• add_column vs SQL

• form_for vs HTML

• ./script/server vs Capistrano

Learning the Framework

Page 48: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Object Oriented

• Message Passing

• Dynamically typed

• Duck typing

• Open classes

http://www.ruby-lang.org/

Page 49: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby System

http://flickr.com/photos/31637055@N00/449968042/

Programmer Craftsman

Page 50: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby System

ruby

http://flickr.com/photos/31637055@N00/449968042/

Programmer Craftsman

Page 51: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby System

ruby

http://flickr.com/photos/31637055@N00/449968042/

Programmer Craftsman

rubygems

Page 52: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby Systemrubyforge.org (gem_server)

ruby

http://flickr.com/photos/31637055@N00/449968042/

Programmer Craftsman

rubygems

Page 53: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby Systemrubyforge.org (gem_server)

rails

rfacebook

mongrelruby

rakeactionmaileractionpackactiverecordactiveresourceactivesupport

http://flickr.com/photos/31637055@N00/449968042/

Programmer Craftsman

rubygems

Page 54: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby Systemrubyforge.org (gem_server)

rails

rfacebook

mongrelruby

rakeactionmaileractionpackactiverecordactiveresourceactivesupport

Ruby app (*.rb)#!/bin/rubyrequire “mongrel”

http://flickr.com/photos/31637055@N00/449968042/

Programmer CraftsmanRuby app (*.rb)#!/bin/rubyrequire “rubygems”require “mongrel”

rubygems

Page 55: Ruby on Rails - Sharing Session for Singapore PHP User Group

Ruby Systemrubyforge.org (gem_server)

rubygems

rails

rfacebook

mongrelruby

rakeactionmaileractionpackactiverecordactiveresourceactivesupport

Ruby app (*.rb)#!/bin/rubyrequire “rubygems”require “mongrel”

http://flickr.com/photos/10380973@N02/2303539234/

http://flickr.com/photos/31637055@N00/449968042/

Programmer Craftsman

Happy User

Page 56: Ruby on Rails - Sharing Session for Singapore PHP User Group

Object Oriented

Page 57: Ruby on Rails - Sharing Session for Singapore PHP User Group

Object Oriented

Page 58: Ruby on Rails - Sharing Session for Singapore PHP User Group

Closures

Page 59: Ruby on Rails - Sharing Session for Singapore PHP User Group

Closures

Page 60: Ruby on Rails - Sharing Session for Singapore PHP User Group

Closures

Page 61: Ruby on Rails - Sharing Session for Singapore PHP User Group

Closures

Page 62: Ruby on Rails - Sharing Session for Singapore PHP User Group

http://martinfowler.com/bliki/Closure.html

Closures

Page 63: Ruby on Rails - Sharing Session for Singapore PHP User Group

Common Usage

Page 64: Ruby on Rails - Sharing Session for Singapore PHP User Group

Mixins

Page 65: Ruby on Rails - Sharing Session for Singapore PHP User Group

Mixins

Page 66: Ruby on Rails - Sharing Session for Singapore PHP User Group

Mixins

Page 67: Ruby on Rails - Sharing Session for Singapore PHP User Group

Mixins

Page 68: Ruby on Rails - Sharing Session for Singapore PHP User Group

Meta-Programming

• Write less dumb code

• What does your software already know?

Page 69: Ruby on Rails - Sharing Session for Singapore PHP User Group

Meta-Programming

• Write less dumb code

• What does your software already know?

Page 70: Ruby on Rails - Sharing Session for Singapore PHP User Group

Builder

Page 71: Ruby on Rails - Sharing Session for Singapore PHP User Group

Builder

Page 72: Ruby on Rails - Sharing Session for Singapore PHP User Group

Exercise

• Project contains image-processing code

• One day, you learn about “orientation”

• How do you update your app?

Edit > Find & Replace

img = Image.load(“photo.jpg”)img = my_new_load(“photo.jpg”)

Page 73: Ruby on Rails - Sharing Session for Singapore PHP User Group

Aliasing Methods

Page 74: Ruby on Rails - Sharing Session for Singapore PHP User Group

• Affords the confidence to march forward

• without falling down subsequently

• Less needy to overly protect design with more layers upfront

Personal Benefits

Page 75: Ruby on Rails - Sharing Session for Singapore PHP User Group

Links

• http://www.ruby-lang.org/en/

• http://rubyonrails.org/

• http://rubini.us/

• http://sharedcopy.com/

Page 76: Ruby on Rails - Sharing Session for Singapore PHP User Group

The End