introduction to rubyjaoo.dk/.../slides/petercooper-introductiontoruby.pdfintroduction to ruby peter...

97
INTRODUCTION TO RUBY PETER COOPER If you get bored... www.petercooper.co.uk www.rubyinside.com www.ruby-lang.org

Upload: others

Post on 01-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 2: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 3: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Paul Graham

Page 4: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 5: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE DOWNSIDES

Page 6: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE DOWNSIDES

SLOW

Page 7: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE DOWNSIDES

UNPOPULAR

Page 8: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

JavaC

Visual BasicPHPC++Perl

PythonC#

DelphiRuby

JavaScriptD

PL/SQLSAS

COBOL

Page 9: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 10: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Matz

Page 11: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Matz

Page 12: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Installing Ruby

Page 13: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Installing Ruby

Page 14: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

IRB == Interactive RuBy

Page 15: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

tryruby.hobix.com

Page 16: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

IRB == Interactive RuBy

Page 17: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Expressions

Page 18: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Objects and Methods

Page 19: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Method List

>> “this is a test”.methods

=> ["%", "select", "[]=", "inspect", "<<", "each_byte", "method", "clone", "gsub", "casecmp", "public_methods", "to_str", "partition", "tr_s", "empty?", "instance_variable_defined?", "tr!", "gem", "freeze", "equal?", "rstrip", "*", "match", "grep", "chomp!", "+", "next!", "swapcase", "ljust", "to_i", "swapcase!", "respond_to?", "methods", "upto", "between?", "reject", "sum", "hex", "dup", "insert", "reverse!", "chop", "instance_variables", "delete", "dump", "__id__", "tr_s!", "concat", "member?", "object_id", "succ", "find", "eql?", "require", "each_with_index", "strip!", "id", "rjust", "to_f", "send", "singleton_methods", "index", "collect", "oct", "all?", "slice", "taint", "length", "entries", "chomp", "instance_variable_get", "frozen?", "upcase", "sub!", "squeeze", "include?", "instance_of?", "__send__", "upcase!", "crypt", "delete!", "detect", "to_a", "unpack", "zip", "lstrip!", "type", "center", "<", "instance_eval", "protected_methods", "map", "<=>", "rindex", "display", "any?", "==", ">", "split", "===", "strip", "size", "sort", "instance_variable_set", "gsub!", "count", "succ!", "downcase", "min", "extend", "kind_of?", "squeeze!", "downcase!", "intern", ">=", "next", "find_all", "to_s", "<=", "each_line", "each", "rstrip!", "class", "slice!", "hash", "sub", "private_methods", "tainted?", "replace", "inject", "=~", "tr", "reverse", "untaint", "nil?", "sort_by", "lstrip", "to_sym", "capitalize", "max", "chop!", "is_a?", "capitalize!", "scan", "[]"]

Page 20: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Hashes and Symbols

fred = { :name => “Fred”, :age => 76, :occupation => :janitor }

fred[:name]=> “Fred”

fred[:age]=> 76

Page 21: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Hashes and Symbols

fred = { :name => “Fred”, :age => 76, :occupation => :janitor }

fred[:name]=> “Fred”

fred[:age]=> 76

people = [ { :name => “Fred”, :age => 76 }, { :name => “Maggie”, :age => 22 }, { :name => “Laura”, :age => 24 } ]

people.size=> 3

people[1]=> { :name => “Maggie”, :age => 22 }

Page 22: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

names = %w(Fred Bert Laura Gus Waldo)

names.each { |name| puts name }

Page 23: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

names = %w(Fred Bert Laura Gus Waldo)

names.each { |name| puts name }

FredBertLauraGusWaldo

Page 24: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

names = %w(Fred Bert Laura Gus Waldo)

names.each do |name| puts nameend

Page 25: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

1.upto(8) do |i| puts iend

Page 26: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

1.upto(8) do |i| puts iend

12345678

Page 27: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

[1, 2, 3, 4, 5].map do |number| number * 2end

=> [2, 4, 6, 8, 10]

Page 28: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Iterators

[1, 2, 3, 4, 5].map do |number| number * 2end

=> [2, 4, 6, 8, 10]

[1, 2, 3, 4, 5].map do |number| number.to_s * 2end

=> [“11”, “22”, “33”, “44”, “55”]

Page 29: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Classes

class Personend

me = Person.newme.class=> Person

you = Person.newyou.class=> Person

Page 30: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Classes

class Person attr_accessor :name, :ageend

me = Person.newme.name = “Peter”me.age = 26

fred = Person.newfred.name = “Fred”fred.age = 77

fred.age + me.age=> 103

Page 31: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

class Person def year_born=(year) @age = Time.now.year - year end

def age return @age endend

me = Person.newme.year_born = 1981me.age=> 27

Classes

Page 32: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Classes

class Person def year_born=(year) @age = Time.now.year - year end

def age @age endend

me = Person.newme.year_born = 1981me.age=> 27

Page 33: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Classes

class Person attr_reader :age

def year_born=(year) @age = Time.now.year - year endend

me = Person.newme.year_born = 1981me.age=> 27

Page 34: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

STOP

Page 35: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 36: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 37: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 38: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 39: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 40: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 41: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 42: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 43: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 44: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 45: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

require 'rubygems'require 'png'

def f(x, y) ( (x ^ y) & ((y - 350) >> 3) ) ** 2end

canvas = PNG::Canvas.new(500, 500)

0.upto(499) do |y| 0.upto(499) do |x| if ((f(x, y) >> 12) & 1) == 1 canvas[x, 499 - y] = PNG::Color::Black else canvas[x, 499 - y] = PNG::Color::White end endend

png = PNG.new(canvas)png.save 'pattern.png'

Page 46: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY
Page 47: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

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

Page 48: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 49: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Events

Page 50: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Events

Page 51: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

User Groups

Page 52: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

User Groups

Page 53: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 54: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 55: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Dave Thomas

Page 56: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 57: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 58: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 59: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 60: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 61: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 62: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Books

Page 63: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Training

Page 64: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Training

Page 65: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Web 2.0

Online Chat

Screencasts

Blogs

Page 66: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

rubyinside.com

Page 67: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

rubycorner.com

Page 68: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

peepcode.com

Page 69: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

The People

Page 70: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 71: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

RUBY GEMS

Page 72: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

gem install rails

Page 73: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Installing a Gem

Page 74: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Using a Gem

require 'rubygems'require 'chronic'

Time.now #=> Tue Apr 01 11:30:00 CET 2008

Chronic.parse('tomorrow') #=> Wed Apr 02 12:00:00 +0100 2008 Chronic.parse('last monday') #=> Mon Mar 31 12:00:00 +0100 2008 Chronic.parse('next monday at 5pm') #=> Mon Apr 7 17:00:00 +0100 2008

Page 75: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Hpricot

doc = Hpricot(

open("http://redhanded.hobix.com/index.html")

)

puts doc.search("p").size

( doc / "#sidebar" ).remove

puts doc

http://code.whytheluckystiff.net/hpricot

1

2

3

4

Page 76: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Gruffhttp://nubyonrails.com/pages/gruff

require 'gruff'

g = Gruff::Line.newg.title = "My Fruity Graph"

g.data("Apples", [1, 2, 3, 4, 4, 3])g.data("Oranges", [4, 8, 7, 9, 8, 9])g.data("Peaches", [9, 9, 10, 8, 7, 9])

g.labels = {0 => '2003', 2 => '2005', 4 => '2007'}

g.write('my_fruity_graph.png')

Page 77: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY
Page 78: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Classifier

require 'classifier'

filter = Classifier::Bayes.new(:spam, :ham)

filter.train :spam, 'Free viagra!'filter.train :spam, 'Free credit card offer!'filter.train :spam, 'Enhance your anatomy' filter.train :ham, 'URGENT. Your server is down.'filter.train :ham, 'Your Amazon.com Order'filter.train :ham, 'E-mail from mom'

filter.classify('Your Play.com Order') # => 'Ham'filter.classify('Free love tonight') # => 'Spam'

http://classifier.rubyforge.org/

1

2

3

4

5

Page 80: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Libraries

Word stemmingImage manipulation3D graphics2D graphicsPhysicsBioinformaticsE-mail generationBayes classificationSQL generationText language detectionLanguage parsingWeb application frameworksOS integrationHTTP serversOther network daemons

Credit card validationPayment gateway integrationCAPTCHAsRSS feed processingCaching and memoizationGraphingWeb crawlingGem generationGUI widget library bridgesReport generationUnicode handlingCore Ruby improvementsText manipulationContent indexingSearch

http://rubyforge.org/

Page 81: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 82: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Rakhttp://rak.rubyforge.org/

Page 83: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Suphttp://sup.rubyforge.org/

Page 84: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

SwitchPipehttp://switchpipe.org/

Page 85: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

FreeRIDEhttp://freeride.rubyforge.org/

Page 86: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Mondrian IDEhttp://www.mondrian-ide.com/

Page 87: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

RubyCocoa

Page 88: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

GitNubhttp://github.com/Caged/gitnub/wikis/home

Page 89: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Captain Rubyexample with the Gosu library

Page 90: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Captain Rubyexample with the Gosu library

Page 91: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Chipmunk Physics

Page 92: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Ogre

Page 93: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS

Page 94: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

Rubinius

Iron Ruby

JRuby

MRI

Page 95: INTRODUCTION TO RUBYjaoo.dk/.../slides/PeterCooper-IntroductionToRuby.pdfINTRODUCTION TO RUBY PETER COOPER If you get bored... THE ANECDOTE THE DOWNSIDES THE LANGUAGE THE COMMUNITY

THE ANECDOTETHE DOWNSIDESTHE LANGUAGETHE COMMUNITYTHE LIBRARIESTHE APPLICATIONSTHE IMPLEMENTATIONSTHE QUESTIONS