SlideShare uma empresa Scribd logo
1 de 105
RUBY
and Rails


            BrisbaneRails.com
Agenda
Background          Ruby 101

Why Ruby            Interactive Demo

Ruby Community      Rails

Environments        Fundamentals

Gems                Build sample app




                                       BrisbaneRails.com
Nigel Rausch




@nr99

http://au.linkedin.com/in/nigelrausch

nigelr@brisbanerails.com

                                        BrisbaneRails.com
PHP Years




            BrisbaneRails.com
PHP Years


1997 - 2003




                     BrisbaneRails.com
PHP Years


1997 - 2003

Developed own framework




                          BrisbaneRails.com
PHP Years


1997 - 2003

Developed own framework

ISP Management ( > $2.5M )




                             BrisbaneRails.com
PHP Years


1997 - 2003

Developed own framework

ISP Management ( > $2.5M )

Semi Retired in 2003



                             BrisbaneRails.com
Got Bored




            BrisbaneRails.com
Got Bored


Back to code in 2005




                       BrisbaneRails.com
Got Bored


Back to code in 2005

PHP didn’t do it for me




                          BrisbaneRails.com
Got Bored


Back to code in 2005

PHP didn’t do it for me

Ruby on Rails (what weird name)




                                  BrisbaneRails.com
Got Bored


Back to code in 2005

PHP didn’t do it for me

Ruby on Rails (what weird name)

Considered PHP equivalents



                                  BrisbaneRails.com
Ruby on Rails


Started

  Rails 1

Considered PHP frameworks




                            BrisbaneRails.com
Why Ruby




           BrisbaneRails.com
Why Ruby




           BrisbaneRails.com
Why Ruby




           BrisbaneRails.com
More Why                        Ruby

echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view',
$post['Post']['id']));




                                                     BrisbaneRails.com
More Why                           Ruby

echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view',
$post['Post']['id']));


link_to post.title, :controller => “posts”,
                    :action => “view”, :id => post.id




                                                        BrisbaneRails.com
More Why                           Ruby

echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view',
$post['Post']['id']));


link_to post.title, :controller => “posts”,
                    :action => “view”, :id => post.id

link_to post.title, post_path(post)




                                                        BrisbaneRails.com
More Why                           Ruby

echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view',
$post['Post']['id']));


link_to post.title, :controller => “posts”,
                    :action => “view”, :id => post.id

link_to post.title, post_path(post)

link_to post.title, post




                                                        BrisbaneRails.com
Why Rails

Ruby is descriptive clean language

Latest concepts

Migrations




                                     BrisbaneRails.com
What’s Rails

Rails is built on Ruby

Rails is a framework

Rails adds lots of DSLs and extra methods to
Ruby

Rails uses some of the advanced features of
Ruby to hide the complicated stuff


                                        BrisbaneRails.com
Community

Ruby and Rails community is strong &
supportive!

Approx. 20 conferences a year

  US, Ireland, Japan, Singapore, ......

Very Active IRC

Very active development


                                          BrisbaneRails.com
Brisbane Ruby & Rails
       Meetup


www.meetup.com/brisbane-ruby-rails/




                                      BrisbaneRails.com
RailsCamp

Bi-Annual event in Australia

  Now in NZ, Europe and US

Starts Friday afternoon

  What happens at Railscamp stays.......

End Monday morning


                                           BrisbaneRails.com
RAILSCAMPs
  100+ Ruby Devs




                   BrisbaneRails.com
BrisbaneRails.com
Next RailsCamp is
   June, 15th



                    BrisbaneRails.com
Local Activities




ActionHack

1st Saturday

http://www.meetup.com/BrisJelly
                                  BrisbaneRails.com
Work Opportunities


Ruby on Rails developers are in high demand

  $60K - $120+K (more overseas)

  $600 - $1200/day freelance

  Melbourne & Sydney highest demand



                                        BrisbaneRails.com
Perception of Ruby Community




                          BrisbaneRails.com
Ruby Perception



Cult status

Sacrifice goats in the search for clean code




                                         BrisbaneRails.com
Ruby Perception (Actual)

  Very supportive community

  Very opinionated community

  Very sharing (gems/code/blogs)

  Very quality conscious

    Majority devs do TDD/BDD


                                   BrisbaneRails.com
Environments
Mac

  Installed

Windows

  New installers

Linux

  Easy

                        BrisbaneRails.com
Rubies Implementations
 Ruby MRI

 REE

 JRuby

 Rubinius

 IronRuby

 MacRuby

                     BrisbaneRails.com
RVM


Ruby Version Manager

Allows multiple implementations

Allows multiple versions of implementations

Easy swap around and gem management



                                          BrisbaneRails.com
Server
BEFORE

  fast-cgi with reverse proxies



NOW

  Passenger (mod rails)

  heroku.com

                                  BrisbaneRails.com
Real World Web Apps
American Yellow Pages

Twitter

Hulu

Slideshare

github

Redbubble

IPHONE APIS

                        BrisbaneRails.com
Tools


Capistrano

Cucumber

Rspec

AutoTest



                     BrisbaneRails.com
Gems

RubyGems is a package manager for the
Ruby programming language that provides a
standard format for distributing Ruby
programs and libraries (in a self-contained
format called a "gem"), a tool designed to
easily manage the installation of gems, and a
server for distributing them.



                                         BrisbaneRails.com
BrisbaneRails.com
BrisbaneRails.com
BrisbaneRails.com
IRB



      BrisbaneRails.com
Ruby 101



           BrisbaneRails.com
Interpreted                         Ruby

 No compilation

 Interactive Mode
                    > ruby app.rb


                    > irb




                                    BrisbaneRails.com
No Type Casting                               Ruby

 No Type declarations

                        value = 1
                        puts value     -> 1

                        value = “hello”
                        puts value      -> “hello”




                                              BrisbaneRails.com
Everything is an object             Ruby



     puts 99.class        -> Fixnum
     puts “hello”.class   -> String
     puts nil.class       -> NilClass




                                    BrisbaneRails.com
Skip parenthesis                    Ruby

 Most of the time

 Easier to read     puts “hello”
 DSL friendly       puts(“hello”)




                                    BrisbaneRails.com
Variables                            Ruby

 Constant

 Local      VAR     =   “constant”
 Instance   var     =   “local”
            @var    =   “instance”
 Class      @@var   =   “class”
            $var    =   “smelly”
 Global




                                     BrisbaneRails.com
Naming Conventions                              Ruby

 underscore separated - variables and methods

   full_name

 All Caps - constants

   SERVER_ID

 CamelCase for classes

   ActiveRecord


                                                BrisbaneRails.com
Basic Data Types    Ruby

 Numbers

 Strings

 Arrays

 Hashes

 Symbols

 true, false, nil


                    BrisbaneRails.com
Numbers                               Ruby

 Integer

 Float            5 / 3   -> 1
 Autoconversion   5.0 / 3 -> 1.66666....
                  5 / 3.0 -> 1.66666....




                                     BrisbaneRails.com
Arrays                                 Ruby

 0 indexed arrays

               var = [ 1, 2, 3]

               var[1]       -> 2
               var << 4     -> [ 1, 2, 3, 4]


               nested = [ [1, 2], 3]


                                       BrisbaneRails.com
Hashes                                 Ruby

 Ordered named arrays

var = {:name => “Fred”, “age” => 21}

puts var[:name]         -> “Fred”
puts var[“name”]        -> nil
puts var[“age”]         -> 21

Ruby 1.9.x
{ name: “Fred”, age: 21 }

                                       BrisbaneRails.com
Symbols                                Ruby

 Identifier

 Not assignable   {:password => “secret”}
 Mainly used in
 hashes           :password = 42 (invalid)

                  var = :password

                  puts var   -> :password


                                      BrisbaneRails.com
true, false, nil               Ruby



             good    = true
             bad     = false
             unknown = nil




                               BrisbaneRails.com
falsies                               Ruby

 nil and false

 everything else is true

                     var = 0

 0 => true           if var
                       puts “hello”
 “0” => true
                     end
 “” => true          -> “hello”


                                      BrisbaneRails.com
Assignment                     Ruby



             value = “hello”
             a = 10
             a += 1        => 11

             b ||= 10      => 10
             b ||= 500     => 10




                               BrisbaneRails.com
Conditions                                Ruby

 If statement
                   if name == “Fred”
 Unless (invert)     put “Hello, Fred”
                   end

                   var = false
                   if var
                     puts “never seen”
                   end

                   unless var
                     puts “always seen”
                   end                    BrisbaneRails.com
Conditions                                  Ruby

 Single line conditions

                      var = true

                      puts “shown” if var

                      puts “hide” unless var

                      puts “I win” if score > 11


                                            BrisbaneRails.com
Methods                              Ruby

def say_hello
  puts “hello”
end

say_hello        -> “hello”

def my_name_is name
  “my name is “ + name
end

puts my_name_is “Fred” -> “my name is Fred”

                                    BrisbaneRails.com
Classes                                 Ruby

Class MyThing
  def initialize name
    @name = name
  end
  attr_accessor :name, :age
  def something
    name + “ is “ + age + “years old”
  end
end

a = MyThing.new “Fred”
puts a.name
a.age = 42
puts a.something   -> “Fred is 42 years old”
                                        BrisbaneRails.com
Iterator and blocks                    Ruby

5.times do
  puts “Nice for-loop, eh?”
end

5.times { puts “One-liner block form” }

(1..3).each do |n|
  puts “Say hello to number #{n}!”
end

[1,2,3].map { |n| n * 2 }     -> [2, 4, 6]

                                      BrisbaneRails.com
Iterators                             Ruby

items = [“good”, “great”, “superb”]




                                      BrisbaneRails.com
Iterators                             Ruby

items = [“good”, “great”, “superb”]

for item in items
  puts item
end




                                      BrisbaneRails.com
Iterators                             Ruby

items = [“good”, “great”, “superb”]

for item in items
  puts item
end

items.each do |item|
  puts item
end




                                      BrisbaneRails.com
Iterators                             Ruby

items = [“good”, “great”, “superb”]

for item in items
  puts item
end

items.each do |item|
  puts item
end

items.each { |item| puts item }

                                      BrisbaneRails.com
Iterator - Map                        Ruby

items = [“good”, “great”, “superb”]

build = []
items.each do |item|
  build << item.upcase
end


build = items.map do |item|
  item.upcase
end

                                      BrisbaneRails.com
Iterator       - select               Ruby

items = [“good”, “great”, “superb”]

items.select do |item|
  item.include? “e”
end

-> [“great”, “superb”]




                                      BrisbaneRails.com
Blocks                           Ruby

def say_something
  yield
  yield
  yield
end

say_something { puts "Hello" }

Hello
Hello
Hello

                                 BrisbaneRails.com
Testing                               Ruby

require 'test/unit'

def my_name_is name
  “my name is “ + name
end

class TestIt < Test::Unit::TestCase
  def test_it
    assert_equal "my name is Fred",
              my_name_is “Fred"
  end
end
                                      BrisbaneRails.com
Testing - RSpec                      Ruby

require 'rspec'

def greeting name
  “my name is “ + name
end

describe Greeting
  it “should return message with name” do
    greeting.should == "my name is Fred”
  end
end

                                    BrisbaneRails.com
Demo and Break




                 BrisbaneRails.com
Ruby on Rails




                BrisbaneRails.com
Ruby on Rails




                BrisbaneRails.com
Ruby on Rails
Convention over configuration




                               BrisbaneRails.com
Ruby on Rails
Convention over configuration

DRY - Don’t Repeat Yourself




                               BrisbaneRails.com
Ruby on Rails
Convention over configuration

DRY - Don’t Repeat Yourself

MVC - Model View Controller




                               BrisbaneRails.com
Ruby on Rails
Convention over configuration

DRY - Don’t Repeat Yourself

MVC - Model View Controller

ORM - Object Relation Mapping




                                BrisbaneRails.com
Ruby on Rails
Convention over configuration

DRY - Don’t Repeat Yourself

MVC - Model View Controller

ORM - Object Relation Mapping

Migrations



                                BrisbaneRails.com
Ruby on Rails
Convention over configuration

DRY - Don’t Repeat Yourself

MVC - Model View Controller

ORM - Object Relation Mapping

Migrations

Restful

                                BrisbaneRails.com
Convention over
     Configuration

Consistent Structure

Naming conventions

  Controller names -> Model names

  Model names -> table names



                                    BrisbaneRails.com
Don’t Repeat Yourself
        DRY

One copy of a method

Re-usable methods

partial forms




                       BrisbaneRails.com
Model View Controller
        MVC
1979 concept

Controller manages
action

Model connects to DB

Views separated from
logic

Router

                       BrisbaneRails.com
Controller                                                    Rails

class CompaniesController < ApplicationController
  def index
    @companies = Company.all
  end

  def show
    @company = Company.find(params[:id])
  end

  def new
    @company = Company.new
  end

  def create
    @company = Company.new(params[:company])
    if @company.save
      redirect_to @company, :notice => "Successfully created company."
    else
      render :action => 'new'
    end
  end
                                                             BrisbaneRails.com
View - Index                                             Rails

<table>
  <tr>
    <th>Name</th>
    <th>Website</th>
  </tr>
  <% for company in @companies %>
    <tr>
       <td><%= company.name %></td>
       <td><%= company.website %></td>
       <td><%= link_to "Show", company %></td>
       <td><%= link_to "Edit", edit_company_path(company) %></td>
       <td><%= link_to "Destroy", company, :confirm => 'Are you .
    </tr>
  <% end %>
</table>

<p><%= link_to "New Company", new_company_path %></p>


                                                        BrisbaneRails.com
View - Index .haml                                       Rails

%table
  %tr
    %th Name
    %th Website
  - for company in @companies
    %tr
       %td= company.name
       %td= company.website
       %td= link_to "Show", company
       %td= link_to "Edit", edit_company_path(company)
       %td= link_to "Destroy", company, :confirm => 'Are you ...

%p = link_to "New Company", new_company_path




                                                        BrisbaneRails.com
View - Form                          Rails

<%= form_for @company do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :website %><br />
    <%= f.text_field :website %>
  </p>
  <p><%= f.submit %></p>
<% end %>
                                    BrisbaneRails.com
Model                                 Rails

class Company < ActiveRecord::Base
  attr_accessible :name, :website

  has_many :contacts

end




                                     BrisbaneRails.com
What’s ORM

Object-Relational mapping is a programming
technique for converting data between
incompatible type systems in databases and
object-oriented programming languages



Source: wikipedia


                                       BrisbaneRails.com
Quick Example #1

select *
from companies
where id = 12



item = Company.find(12)



                         BrisbaneRails.com
Quick Example #2

select *
from companies
where name = “Logical”



item = Company.find_by_name(“Logical”)
OR

Item = Company.where(:name=>”Logical”)

                                         BrisbaneRails.com
Quick Example #3
update companies
set name = “Logical Plus”
where id = 12



item=Company.find(12)
item.name = “Logical Plus”
item.save
OR

Company.find(12).update_attributes(:name=>”Logical
Plus”)

                                                    BrisbaneRails.com
Quick Example #4
insert into companies (name, postcode)
values (“Logical”, 4121)



item=Company.new
item.name = “Logical”
item.postcode = 4121
item.save
OR

Company.create(:name=>”Logical”, :postcode=>4121)

                                              BrisbaneRails.com
Model
  class Company < ActiveRecord::Base
    has_many :contacts
    has_many :invoices
  end

  class Contact < ActiveRecord::Base
    belongs_to :company
    has_many :invoices
  end

  class Invoice < ActiveRecord::Base
    has_many :invoice_items
    belongs_to :company
    belongs_to :contact
  end

  class InvoiceItem < ActiveRecord::Base
    belongs_to :invoice
  end
                             BrisbaneRails.com
Migrations


create and modify table and fields from
within code base

Easy deployment

Reversible




                                         BrisbaneRails.com
Restful

Representational State Transfer

Concept of Resources

7 Resources

index, show, edit, update, new, create,
destroy

HTTP verbs (get, put, post, delete)


                                          BrisbaneRails.com
Rails Routes
   companies_path GET    /companies(.:format)          :action=>"index”

     company_path GET    /companies/:id(.:format)      :action=>"show"

 new_company_path GET    /companies/new(.:format)      :action=>"new"

                  POST   /companies(.:format)          :action=>"create"

edit_company_path GET    /companies/:id/edit(.:format) :action=>"edit"

                  PUT    /companies/:id(.:format)      :action=>"update"

                  DELETE /companies/:id(.:format)      :action=>"destroy"




                                                               BrisbaneRails.com
Preparation



              BrisbaneRails.com
Confirm Environment


ruby -v

gem -v

rails -v




                     BrisbaneRails.com
Rails Generation

rails new my_app_name

cd my_app_name



rails generate ......

rails console


                        BrisbaneRails.com
Let’s go build something!



                       BrisbaneRails.com
Nigel Rausch

     Thank you

@nr99

http://au.linkedin.com/in/nigelrausch

nigelr@brisbanerails.com

                                        BrisbaneRails.com

Mais conteúdo relacionado

Semelhante a Griffith uni

Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on RailsKarel Minarik
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivationjistr
 
Ruby and Rails for womens
Ruby and Rails for womensRuby and Rails for womens
Ruby and Rails for womenss4nx
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Railsousli07
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP DevelopersRobert Dempsey
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Henry S
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyNick Sieger
 
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
 
Ruby - a tester's best friend
Ruby - a tester's best friendRuby - a tester's best friend
Ruby - a tester's best friendPeter Lind
 
Introducing ruby on rails
Introducing ruby on railsIntroducing ruby on rails
Introducing ruby on railsPriceen
 
Get Going With RVM and Rails 3
Get Going With RVM and Rails 3Get Going With RVM and Rails 3
Get Going With RVM and Rails 3Karmen Blake
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsManoj Kumar
 
A bridge between php and ruby
A bridge between php and ruby A bridge between php and ruby
A bridge between php and ruby do_aki
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...Matt Gauger
 
Learn Ruby 2011 - Session 1
Learn Ruby 2011 - Session 1Learn Ruby 2011 - Session 1
Learn Ruby 2011 - Session 1James Thompson
 
O que tem de novo no Ruby 2.0?
O que tem de novo no Ruby 2.0?O que tem de novo no Ruby 2.0?
O que tem de novo no Ruby 2.0?Fabio Akita
 
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar BatsovRuby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar BatsovMichael Kimathi
 

Semelhante a Griffith uni (20)

Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on Rails
 
Bhavesh ro r
Bhavesh ro rBhavesh ro r
Bhavesh ro r
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
 
Ruby and Rails for womens
Ruby and Rails for womensRuby and Rails for womens
Ruby and Rails for womens
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP Developers
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRuby
 
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
 
Ruby - a tester's best friend
Ruby - a tester's best friendRuby - a tester's best friend
Ruby - a tester's best friend
 
Introducing ruby on rails
Introducing ruby on railsIntroducing ruby on rails
Introducing ruby on rails
 
Get Going With RVM and Rails 3
Get Going With RVM and Rails 3Get Going With RVM and Rails 3
Get Going With RVM and Rails 3
 
Setup ruby
Setup rubySetup ruby
Setup ruby
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
A bridge between php and ruby
A bridge between php and ruby A bridge between php and ruby
A bridge between php and ruby
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
 
Learn Ruby 2011 - Session 1
Learn Ruby 2011 - Session 1Learn Ruby 2011 - Session 1
Learn Ruby 2011 - Session 1
 
Mojolicious and REST
Mojolicious and RESTMojolicious and REST
Mojolicious and REST
 
O que tem de novo no Ruby 2.0?
O que tem de novo no Ruby 2.0?O que tem de novo no Ruby 2.0?
O que tem de novo no Ruby 2.0?
 
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar BatsovRuby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
 

Último

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 

Último (20)

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 

Griffith uni

  • 1. RUBY and Rails BrisbaneRails.com
  • 2. Agenda Background Ruby 101 Why Ruby Interactive Demo Ruby Community Rails Environments Fundamentals Gems Build sample app BrisbaneRails.com
  • 4. PHP Years BrisbaneRails.com
  • 5. PHP Years 1997 - 2003 BrisbaneRails.com
  • 6. PHP Years 1997 - 2003 Developed own framework BrisbaneRails.com
  • 7. PHP Years 1997 - 2003 Developed own framework ISP Management ( > $2.5M ) BrisbaneRails.com
  • 8. PHP Years 1997 - 2003 Developed own framework ISP Management ( > $2.5M ) Semi Retired in 2003 BrisbaneRails.com
  • 9. Got Bored BrisbaneRails.com
  • 10. Got Bored Back to code in 2005 BrisbaneRails.com
  • 11. Got Bored Back to code in 2005 PHP didn’t do it for me BrisbaneRails.com
  • 12. Got Bored Back to code in 2005 PHP didn’t do it for me Ruby on Rails (what weird name) BrisbaneRails.com
  • 13. Got Bored Back to code in 2005 PHP didn’t do it for me Ruby on Rails (what weird name) Considered PHP equivalents BrisbaneRails.com
  • 14. Ruby on Rails Started Rails 1 Considered PHP frameworks BrisbaneRails.com
  • 15. Why Ruby BrisbaneRails.com
  • 16. Why Ruby BrisbaneRails.com
  • 17. Why Ruby BrisbaneRails.com
  • 18. More Why Ruby echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); BrisbaneRails.com
  • 19. More Why Ruby echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); link_to post.title, :controller => “posts”, :action => “view”, :id => post.id BrisbaneRails.com
  • 20. More Why Ruby echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); link_to post.title, :controller => “posts”, :action => “view”, :id => post.id link_to post.title, post_path(post) BrisbaneRails.com
  • 21. More Why Ruby echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); link_to post.title, :controller => “posts”, :action => “view”, :id => post.id link_to post.title, post_path(post) link_to post.title, post BrisbaneRails.com
  • 22. Why Rails Ruby is descriptive clean language Latest concepts Migrations BrisbaneRails.com
  • 23. What’s Rails Rails is built on Ruby Rails is a framework Rails adds lots of DSLs and extra methods to Ruby Rails uses some of the advanced features of Ruby to hide the complicated stuff BrisbaneRails.com
  • 24. Community Ruby and Rails community is strong & supportive! Approx. 20 conferences a year US, Ireland, Japan, Singapore, ...... Very Active IRC Very active development BrisbaneRails.com
  • 25. Brisbane Ruby & Rails Meetup www.meetup.com/brisbane-ruby-rails/ BrisbaneRails.com
  • 26. RailsCamp Bi-Annual event in Australia Now in NZ, Europe and US Starts Friday afternoon What happens at Railscamp stays....... End Monday morning BrisbaneRails.com
  • 27. RAILSCAMPs 100+ Ruby Devs BrisbaneRails.com
  • 29. Next RailsCamp is June, 15th BrisbaneRails.com
  • 31. Work Opportunities Ruby on Rails developers are in high demand $60K - $120+K (more overseas) $600 - $1200/day freelance Melbourne & Sydney highest demand BrisbaneRails.com
  • 32. Perception of Ruby Community BrisbaneRails.com
  • 33. Ruby Perception Cult status Sacrifice goats in the search for clean code BrisbaneRails.com
  • 34. Ruby Perception (Actual) Very supportive community Very opinionated community Very sharing (gems/code/blogs) Very quality conscious Majority devs do TDD/BDD BrisbaneRails.com
  • 35. Environments Mac Installed Windows New installers Linux Easy BrisbaneRails.com
  • 36. Rubies Implementations Ruby MRI REE JRuby Rubinius IronRuby MacRuby BrisbaneRails.com
  • 37. RVM Ruby Version Manager Allows multiple implementations Allows multiple versions of implementations Easy swap around and gem management BrisbaneRails.com
  • 38. Server BEFORE fast-cgi with reverse proxies NOW Passenger (mod rails) heroku.com BrisbaneRails.com
  • 39. Real World Web Apps American Yellow Pages Twitter Hulu Slideshare github Redbubble IPHONE APIS BrisbaneRails.com
  • 41. Gems RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries (in a self-contained format called a "gem"), a tool designed to easily manage the installation of gems, and a server for distributing them. BrisbaneRails.com
  • 45. IRB BrisbaneRails.com
  • 46. Ruby 101 BrisbaneRails.com
  • 47. Interpreted Ruby No compilation Interactive Mode > ruby app.rb > irb BrisbaneRails.com
  • 48. No Type Casting Ruby No Type declarations value = 1 puts value -> 1 value = “hello” puts value -> “hello” BrisbaneRails.com
  • 49. Everything is an object Ruby puts 99.class -> Fixnum puts “hello”.class -> String puts nil.class -> NilClass BrisbaneRails.com
  • 50. Skip parenthesis Ruby Most of the time Easier to read puts “hello” DSL friendly puts(“hello”) BrisbaneRails.com
  • 51. Variables Ruby Constant Local VAR = “constant” Instance var = “local” @var = “instance” Class @@var = “class” $var = “smelly” Global BrisbaneRails.com
  • 52. Naming Conventions Ruby underscore separated - variables and methods full_name All Caps - constants SERVER_ID CamelCase for classes ActiveRecord BrisbaneRails.com
  • 53. Basic Data Types Ruby Numbers Strings Arrays Hashes Symbols true, false, nil BrisbaneRails.com
  • 54. Numbers Ruby Integer Float 5 / 3 -> 1 Autoconversion 5.0 / 3 -> 1.66666.... 5 / 3.0 -> 1.66666.... BrisbaneRails.com
  • 55. Arrays Ruby 0 indexed arrays var = [ 1, 2, 3] var[1] -> 2 var << 4 -> [ 1, 2, 3, 4] nested = [ [1, 2], 3] BrisbaneRails.com
  • 56. Hashes Ruby Ordered named arrays var = {:name => “Fred”, “age” => 21} puts var[:name] -> “Fred” puts var[“name”] -> nil puts var[“age”] -> 21 Ruby 1.9.x { name: “Fred”, age: 21 } BrisbaneRails.com
  • 57. Symbols Ruby Identifier Not assignable {:password => “secret”} Mainly used in hashes :password = 42 (invalid) var = :password puts var -> :password BrisbaneRails.com
  • 58. true, false, nil Ruby good = true bad = false unknown = nil BrisbaneRails.com
  • 59. falsies Ruby nil and false everything else is true var = 0 0 => true if var puts “hello” “0” => true end “” => true -> “hello” BrisbaneRails.com
  • 60. Assignment Ruby value = “hello” a = 10 a += 1 => 11 b ||= 10 => 10 b ||= 500 => 10 BrisbaneRails.com
  • 61. Conditions Ruby If statement if name == “Fred” Unless (invert) put “Hello, Fred” end var = false if var puts “never seen” end unless var puts “always seen” end BrisbaneRails.com
  • 62. Conditions Ruby Single line conditions var = true puts “shown” if var puts “hide” unless var puts “I win” if score > 11 BrisbaneRails.com
  • 63. Methods Ruby def say_hello puts “hello” end say_hello -> “hello” def my_name_is name “my name is “ + name end puts my_name_is “Fred” -> “my name is Fred” BrisbaneRails.com
  • 64. Classes Ruby Class MyThing def initialize name @name = name end attr_accessor :name, :age def something name + “ is “ + age + “years old” end end a = MyThing.new “Fred” puts a.name a.age = 42 puts a.something -> “Fred is 42 years old” BrisbaneRails.com
  • 65. Iterator and blocks Ruby 5.times do puts “Nice for-loop, eh?” end 5.times { puts “One-liner block form” } (1..3).each do |n| puts “Say hello to number #{n}!” end [1,2,3].map { |n| n * 2 } -> [2, 4, 6] BrisbaneRails.com
  • 66. Iterators Ruby items = [“good”, “great”, “superb”] BrisbaneRails.com
  • 67. Iterators Ruby items = [“good”, “great”, “superb”] for item in items puts item end BrisbaneRails.com
  • 68. Iterators Ruby items = [“good”, “great”, “superb”] for item in items puts item end items.each do |item| puts item end BrisbaneRails.com
  • 69. Iterators Ruby items = [“good”, “great”, “superb”] for item in items puts item end items.each do |item| puts item end items.each { |item| puts item } BrisbaneRails.com
  • 70. Iterator - Map Ruby items = [“good”, “great”, “superb”] build = [] items.each do |item| build << item.upcase end build = items.map do |item| item.upcase end BrisbaneRails.com
  • 71. Iterator - select Ruby items = [“good”, “great”, “superb”] items.select do |item| item.include? “e” end -> [“great”, “superb”] BrisbaneRails.com
  • 72. Blocks Ruby def say_something yield yield yield end say_something { puts "Hello" } Hello Hello Hello BrisbaneRails.com
  • 73. Testing Ruby require 'test/unit' def my_name_is name “my name is “ + name end class TestIt < Test::Unit::TestCase def test_it assert_equal "my name is Fred", my_name_is “Fred" end end BrisbaneRails.com
  • 74. Testing - RSpec Ruby require 'rspec' def greeting name “my name is “ + name end describe Greeting it “should return message with name” do greeting.should == "my name is Fred” end end BrisbaneRails.com
  • 75. Demo and Break BrisbaneRails.com
  • 76. Ruby on Rails BrisbaneRails.com
  • 77. Ruby on Rails BrisbaneRails.com
  • 78. Ruby on Rails Convention over configuration BrisbaneRails.com
  • 79. Ruby on Rails Convention over configuration DRY - Don’t Repeat Yourself BrisbaneRails.com
  • 80. Ruby on Rails Convention over configuration DRY - Don’t Repeat Yourself MVC - Model View Controller BrisbaneRails.com
  • 81. Ruby on Rails Convention over configuration DRY - Don’t Repeat Yourself MVC - Model View Controller ORM - Object Relation Mapping BrisbaneRails.com
  • 82. Ruby on Rails Convention over configuration DRY - Don’t Repeat Yourself MVC - Model View Controller ORM - Object Relation Mapping Migrations BrisbaneRails.com
  • 83. Ruby on Rails Convention over configuration DRY - Don’t Repeat Yourself MVC - Model View Controller ORM - Object Relation Mapping Migrations Restful BrisbaneRails.com
  • 84. Convention over Configuration Consistent Structure Naming conventions Controller names -> Model names Model names -> table names BrisbaneRails.com
  • 85. Don’t Repeat Yourself DRY One copy of a method Re-usable methods partial forms BrisbaneRails.com
  • 86. Model View Controller MVC 1979 concept Controller manages action Model connects to DB Views separated from logic Router BrisbaneRails.com
  • 87. Controller Rails class CompaniesController < ApplicationController def index @companies = Company.all end def show @company = Company.find(params[:id]) end def new @company = Company.new end def create @company = Company.new(params[:company]) if @company.save redirect_to @company, :notice => "Successfully created company." else render :action => 'new' end end BrisbaneRails.com
  • 88. View - Index Rails <table> <tr> <th>Name</th> <th>Website</th> </tr> <% for company in @companies %> <tr> <td><%= company.name %></td> <td><%= company.website %></td> <td><%= link_to "Show", company %></td> <td><%= link_to "Edit", edit_company_path(company) %></td> <td><%= link_to "Destroy", company, :confirm => 'Are you . </tr> <% end %> </table> <p><%= link_to "New Company", new_company_path %></p> BrisbaneRails.com
  • 89. View - Index .haml Rails %table %tr %th Name %th Website - for company in @companies %tr %td= company.name %td= company.website %td= link_to "Show", company %td= link_to "Edit", edit_company_path(company) %td= link_to "Destroy", company, :confirm => 'Are you ... %p = link_to "New Company", new_company_path BrisbaneRails.com
  • 90. View - Form Rails <%= form_for @company do |f| %> <%= f.error_messages %> <p> <%= f.label :name %><br /> <%= f.text_field :name %> </p> <p> <%= f.label :website %><br /> <%= f.text_field :website %> </p> <p><%= f.submit %></p> <% end %> BrisbaneRails.com
  • 91. Model Rails class Company < ActiveRecord::Base attr_accessible :name, :website has_many :contacts end BrisbaneRails.com
  • 92. What’s ORM Object-Relational mapping is a programming technique for converting data between incompatible type systems in databases and object-oriented programming languages Source: wikipedia BrisbaneRails.com
  • 93. Quick Example #1 select * from companies where id = 12 item = Company.find(12) BrisbaneRails.com
  • 94. Quick Example #2 select * from companies where name = “Logical” item = Company.find_by_name(“Logical”) OR Item = Company.where(:name=>”Logical”) BrisbaneRails.com
  • 95. Quick Example #3 update companies set name = “Logical Plus” where id = 12 item=Company.find(12) item.name = “Logical Plus” item.save OR Company.find(12).update_attributes(:name=>”Logical Plus”) BrisbaneRails.com
  • 96. Quick Example #4 insert into companies (name, postcode) values (“Logical”, 4121) item=Company.new item.name = “Logical” item.postcode = 4121 item.save OR Company.create(:name=>”Logical”, :postcode=>4121) BrisbaneRails.com
  • 97. Model class Company < ActiveRecord::Base has_many :contacts has_many :invoices end class Contact < ActiveRecord::Base belongs_to :company has_many :invoices end class Invoice < ActiveRecord::Base has_many :invoice_items belongs_to :company belongs_to :contact end class InvoiceItem < ActiveRecord::Base belongs_to :invoice end BrisbaneRails.com
  • 98. Migrations create and modify table and fields from within code base Easy deployment Reversible BrisbaneRails.com
  • 99. Restful Representational State Transfer Concept of Resources 7 Resources index, show, edit, update, new, create, destroy HTTP verbs (get, put, post, delete) BrisbaneRails.com
  • 100. Rails Routes companies_path GET /companies(.:format) :action=>"index” company_path GET /companies/:id(.:format) :action=>"show" new_company_path GET /companies/new(.:format) :action=>"new" POST /companies(.:format) :action=>"create" edit_company_path GET /companies/:id/edit(.:format) :action=>"edit" PUT /companies/:id(.:format) :action=>"update" DELETE /companies/:id(.:format) :action=>"destroy" BrisbaneRails.com
  • 101. Preparation BrisbaneRails.com
  • 102. Confirm Environment ruby -v gem -v rails -v BrisbaneRails.com
  • 103. Rails Generation rails new my_app_name cd my_app_name rails generate ...... rails console BrisbaneRails.com
  • 104. Let’s go build something! BrisbaneRails.com
  • 105. Nigel Rausch Thank you @nr99 http://au.linkedin.com/in/nigelrausch nigelr@brisbanerails.com BrisbaneRails.com

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. Basic, Assembly, C programmer\nThen the webdev came along\n\n- PHP\n - ISP Mgnt (millions)\n - Credit Card\n\n\n
  5. Basic, Assembly, C programmer\nThen the webdev came along\n\n- PHP\n - ISP Mgnt (millions)\n - Credit Card\n\n\n
  6. Basic, Assembly, C programmer\nThen the webdev came along\n\n- PHP\n - ISP Mgnt (millions)\n - Credit Card\n\n\n
  7. Basic, Assembly, C programmer\nThen the webdev came along\n\n- PHP\n - ISP Mgnt (millions)\n - Credit Card\n\n\n
  8. The feeling was gone.... So started looking at alternatives\n
  9. The feeling was gone.... So started looking at alternatives\n
  10. The feeling was gone.... So started looking at alternatives\n
  11. The feeling was gone.... So started looking at alternatives\n
  12. \n
  13. Less code the easier to read \nless errors\n
  14. Less code the easier to read \nless errors\n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. We currently doing Ruby from the ground up\n
  26. - multi-language coding \n - ruby/raisl\n - coffeescript\n - etc\n\n\n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. PHP was hard to deploy in the 90s before modphp\n
  39. IPHONE API&amp;#x2019;s\n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. Key matters\n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. All the same\n
  72. All the same\n
  73. All the same\n
  74. All the same\n
  75. All the same\n
  76. both cases build would contain the result\n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n