Slide 1

Slide 1 text

Let’s Learn Ruby - Basic

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Ruby Tuesday https://www.facebook.com/groups/142197385837507/ photo by othree

Slide 4

Slide 4 text

RubyConf Taiwan http://rubyconf.tw/ photo by othree

Slide 5

Slide 5 text

Rails Girls Taipei https://www.facebook.com/railsgirlstw

Slide 6

Slide 6 text

WebConf Taiwan 2014

Slide 7

Slide 7 text

750+ attendees

Slide 8

Slide 8 text

all tickets sold out in 4 mins

Slide 9

Slide 9 text

Let’s Learn Ruby What I want?

Slide 10

Slide 10 text

Let’s Learn Ruby Problem Solving

Slide 11

Slide 11 text

Let’s Learn Ruby Active Ecosystem

Slide 12

Slide 12 text

Let’s Learn Ruby Scenario

Slide 13

Slide 13 text

Let’s Learn Ruby open source projects on Github

Slide 14

Slide 14 text

Let’s Learn Ruby History

Slide 15

Slide 15 text

Let’s Learn Ruby まつもと ゆきひろ (Matz)

Slide 16

Slide 16 text

Let’s Learn Ruby

Slide 17

Slide 17 text

Let’s Learn Ruby first released at 1995

Slide 18

Slide 18 text

Let’s Learn Ruby 2.0 released at 2013

Slide 19

Slide 19 text

Let’s Learn Ruby 2.1 released at 2013.12

Slide 20

Slide 20 text

Let’s Learn Ruby Why Ruby? free, open source, easy to learn

Slide 21

Slide 21 text

Let’s Learn Ruby Ruby != Rails

Slide 22

Slide 22 text

Let’s Learn Ruby Happy, and Fun

Slide 23

Slide 23 text

Let’s Learn Ruby Rubies CRuby(MRI), REE, mRuby, MacRuby, JRuby, IronRuby, Rubinius..etc

Slide 24

Slide 24 text

Let’s Learn Ruby Version 1.8, 1.9, 2.0, 2.1

Slide 25

Slide 25 text

Let’s Learn Ruby Ruby 1.8 has no future

Slide 26

Slide 26 text

Let’s Learn Ruby RVM Ruby Version Manager https://rvm.io/

Slide 27

Slide 27 text

Let’s Learn Ruby Editors Vim, Emacs, Sublime Text... etc

Slide 28

Slide 28 text

Let’s Learn Ruby coding style https://github.com/styleguide/ruby

Slide 29

Slide 29 text

Let’s Learn Ruby But Ruby is Slow..?

Slide 30

Slide 30 text

Let’s Learn Ruby What can Ruby do?

Slide 31

Slide 31 text

Let’s Learn Ruby Rake Make, but Ruby version. Rack http://rake.rubyforge.org/

Slide 32

Slide 32 text

Let’s Learn Ruby Rack it’s a specification (and implementation) of a minimal abstract Ruby API that models HTTP. such as Sinatra, Ruby on Rails Rack http://rack.rubyforge.org/ Sinatra http://www.sinatrarb.com Ruby on Rails http://rubyonrails.org/

Slide 33

Slide 33 text

Let’s Learn Ruby developing MacOS and iOS app

Slide 34

Slide 34 text

Let’s Learn Ruby drawing, image processing, music..

Slide 35

Slide 35 text

Let’s Learn Ruby Install Ruby now!

Slide 36

Slide 36 text

Let’s Learn Ruby http://tryruby.org

Slide 37

Slide 37 text

Let’s Learn Ruby Interactive Ruby, irb

Slide 38

Slide 38 text

Let’s Learn Ruby Gem

Slide 39

Slide 39 text

Let’s Learn Ruby gem install PACKAGE_NAME

Slide 40

Slide 40 text

Let’s Learn Ruby gem env

Slide 41

Slide 41 text

Let’s Learn Ruby gem list

Slide 42

Slide 42 text

Let’s Learn Ruby Variables and Constants

Slide 43

Slide 43 text

Let’s Learn Ruby local variable variable

Slide 44

Slide 44 text

Let’s Learn Ruby global variable $variable

Slide 45

Slide 45 text

Let’s Learn Ruby instance variable @variable

Slide 46

Slide 46 text

Let’s Learn Ruby class variable @@variable

Slide 47

Slide 47 text

Let’s Learn Ruby virtual variable true, false, self, nil

Slide 48

Slide 48 text

Let’s Learn Ruby variable assignment a = 1 x, y, z = 1, 2, 3

Slide 49

Slide 49 text

Let’s Learn Ruby Constant begins with a capital letter, and it can be changed

Slide 50

Slide 50 text

Let’s Learn Ruby Reserved word and Keyword

Slide 51

Slide 51 text

Let’s Learn Ruby Reserved word and Keyword

Slide 52

Slide 52 text

Let’s Learn Ruby Logic and Flow Control

Slide 53

Slide 53 text

Let’s Learn Ruby only false and nil are false

Slide 54

Slide 54 text

Let’s Learn Ruby true v.s TrueClass false v.s FalseClass nil v.s NilClass

Slide 55

Slide 55 text

Let’s Learn Ruby if..elsif..end

Slide 56

Slide 56 text

Let’s Learn Ruby unless = not if

Slide 57

Slide 57 text

Let’s Learn Ruby if modifier

Slide 58

Slide 58 text

Let’s Learn Ruby case .. when..

Slide 59

Slide 59 text

Let’s Learn Ruby BEGIN{} and END{}

Slide 60

Slide 60 text

Let’s Learn Ruby a = true ? 'a' : 'b'

Slide 61

Slide 61 text

Let’s Learn Ruby a ||= 'a'

Slide 62

Slide 62 text

Let’s Learn Ruby Comment # single line

Slide 63

Slide 63 text

Let’s Learn Ruby Comment =begin .. =end

Slide 64

Slide 64 text

Let’s Learn Ruby Loop and Iteration

Slide 65

Slide 65 text

Let’s Learn Ruby for.. in..

Slide 66

Slide 66 text

Let’s Learn Ruby while .. end

Slide 67

Slide 67 text

Let’s Learn Ruby until .. end

Slide 68

Slide 68 text

Let’s Learn Ruby until = not while

Slide 69

Slide 69 text

Let’s Learn Ruby times

Slide 70

Slide 70 text

Let’s Learn Ruby upto, downto

Slide 71

Slide 71 text

Let’s Learn Ruby each, each_with_index

Slide 72

Slide 72 text

Let’s Learn Ruby Integer http://www.ruby-doc.org/core-2.1.0/Integer.html

Slide 73

Slide 73 text

Let’s Learn Ruby Fixnum and Bignum

Slide 74

Slide 74 text

Let’s Learn Ruby 10 / 3

Slide 75

Slide 75 text

Let’s Learn Ruby String http://ruby-doc.org/core-2.1.0/String.html

Slide 76

Slide 76 text

Let’s Learn Ruby single and double quotes

Slide 77

Slide 77 text

Let’s Learn Ruby %q v.s %Q

Slide 78

Slide 78 text

Let’s Learn Ruby "%s" % "eddie"

Slide 79

Slide 79 text

Let’s Learn Ruby string interpolation

Slide 80

Slide 80 text

Let’s Learn Ruby Exercise please calculate how many “characters” and “words” of a section of a random article with Ruby.

Slide 81

Slide 81 text

Let’s Learn Ruby Exercise please convert string “abcdefg” to “gfedcba” without using String#reverse method.

Slide 82

Slide 82 text

Let’s Learn Ruby Array http://ruby-doc.org/core-2.1.0/Array.html

Slide 83

Slide 83 text

Let’s Learn Ruby Array.new v.s []

Slide 84

Slide 84 text

Let’s Learn Ruby %w

Slide 85

Slide 85 text

Let’s Learn Ruby Exercise please sort a given array [1, 3, 4, 1, 7, nil, 7], and remove nil and duplicate number.

Slide 86

Slide 86 text

Let’s Learn Ruby Exercise please covert a given array [1, 2, 3, 4, 5] to [1, 3, 5, 7, 9] with Array#map method.

Slide 87

Slide 87 text

Let’s Learn Ruby Exercise please draw 5 unique random number between 1 to 52.

Slide 88

Slide 88 text

Let’s Learn Ruby Hash http://ruby-doc.org/core-2.1.0/Hash.html

Slide 89

Slide 89 text

Let’s Learn Ruby Hash.new v.s {}

Slide 90

Slide 90 text

Let’s Learn Ruby a = { :name => 'eddie' } a = { name: 'eddie' }

Slide 91

Slide 91 text

Let’s Learn Ruby Range http://ruby-doc.org/core-2.1.0/Range.html

Slide 92

Slide 92 text

Let’s Learn Ruby (1..10) v.s (1...10)

Slide 93

Slide 93 text

Let’s Learn Ruby Exercise please calculate the sum from 1 to 100 with Range.

Slide 94

Slide 94 text

Let’s Learn Ruby Methods

Slide 95

Slide 95 text

Let’s Learn Ruby def method_name(param) ... end

Slide 96

Slide 96 text

Let’s Learn Ruby parentheses can be omitted

Slide 97

Slide 97 text

Let’s Learn Ruby ? and !

Slide 98

Slide 98 text

Let’s Learn Ruby return value

Slide 99

Slide 99 text

Let’s Learn Ruby Singleton Method

Slide 100

Slide 100 text

Let’s Learn Ruby class Cat def walk puts "I'm walking" end end ! cat = Cat.new def cat.fly puts "I can fly" end cat.fly

Slide 101

Slide 101 text

Let’s Learn Ruby Method Missing

Slide 102

Slide 102 text

Let’s Learn Ruby def method_missing(method_name) puts "method: #{method_name} is called!" end ! something_not_exists()

Slide 103

Slide 103 text

Let’s Learn Ruby Exception Handling begin .. rescue.. else.. ensure.. end

Slide 104

Slide 104 text

Let’s Learn Ruby def open_my_file(file_name) File.open file_name do |f| puts f.read end end begin open_my_file("block_demo.r") rescue => e puts e else puts "it's working good!" ensure puts "this must be executed, no matter what" end

Slide 105

Slide 105 text

Let’s Learn Ruby Block

Slide 106

Slide 106 text

Let’s Learn Ruby Proc

Slide 107

Slide 107 text

Let’s Learn Ruby my_square = Proc.new { | x | x ** 2 } ! # how to call a proc puts my_square.call(10) # 100 puts my_square[10] # 100 puts my_square.(10) # 100 puts my_square === 10 # 100

Slide 108

Slide 108 text

Let’s Learn Ruby lambda, ->

Slide 109

Slide 109 text

Let’s Learn Ruby my_lambda = lambda { | x | x ** 2 } ! # new style in 1.9 my_lambda = -> x { x ** 2 } ! # how to call a lambda? puts my_lambda.call(10) # 100 puts my_lambda[10] # 100 puts my_lambda.(10) # 100 puts my_lambda === 10 # 100

Slide 110

Slide 110 text

Let’s Learn Ruby Proc v.s lambda

Slide 111

Slide 111 text

Let’s Learn Ruby def proc_test puts "hello" my_proc = Proc.new { return 1 } my_proc.call puts "ruby" end def lambda_test puts "hello" my_lambda = lambda { return 1 } my_lambda.call puts "ruby" end

Slide 112

Slide 112 text

Let’s Learn Ruby {} v.s do..end http://blog.eddie.com.tw/2011/06/03/do-end-vs-braces/

Slide 113

Slide 113 text

Let’s Learn Ruby Yield

Slide 114

Slide 114 text

Let’s Learn Ruby Object-Oriented Programming

Slide 115

Slide 115 text

Let’s Learn Ruby everything in Ruby is an Object

Slide 116

Slide 116 text

Let’s Learn Ruby object = state+ behavior

Slide 117

Slide 117 text

Let’s Learn Ruby root class = Object root class would be BasicObject in Ruby 1.9

Slide 118

Slide 118 text

Let’s Learn Ruby class ClassName < ParentClass ... end

Slide 119

Slide 119 text

Let’s Learn Ruby Naming Convention

Slide 120

Slide 120 text

Let’s Learn Ruby initialize

Slide 121

Slide 121 text

Let’s Learn Ruby ClassName.new

Slide 122

Slide 122 text

Let’s Learn Ruby self = current object

Slide 123

Slide 123 text

Let’s Learn Ruby instance and class variable

Slide 124

Slide 124 text

Let’s Learn Ruby instance and class method

Slide 125

Slide 125 text

Let’s Learn Ruby Exercise please create a Dog class and Cat class, which are both inherited from Animal class, and implement “walk” and “eat” methods.

Slide 126

Slide 126 text

Let’s Learn Ruby public, protected and private method

Slide 127

Slide 127 text

Let’s Learn Ruby getter and setter

Slide 128

Slide 128 text

Let’s Learn Ruby attr_reader, attr_writer and attr_accessor

Slide 129

Slide 129 text

Let’s Learn Ruby Open Class

Slide 130

Slide 130 text

Let’s Learn Ruby Module

Slide 131

Slide 131 text

Let’s Learn Ruby module ModuleName ... end

Slide 132

Slide 132 text

Let’s Learn Ruby module has no inheritance

Slide 133

Slide 133 text

Let’s Learn Ruby module has no instance

Slide 134

Slide 134 text

Let’s Learn Ruby Naming Convention

Slide 135

Slide 135 text

Let’s Learn Ruby require v.s load

Slide 136

Slide 136 text

Let’s Learn Ruby Priority?

Slide 137

Slide 137 text

Let’s Learn Ruby Exercise please create a Bird class, which is also inherited from Animal class, but include a Fly module.

Slide 138

Slide 138 text

Let’s Learn Ruby Mixin

Slide 139

Slide 139 text

Let’s Learn Ruby Ruby is single inheritance

Slide 140

Slide 140 text

Let’s Learn Ruby Duck Typing

Slide 141

Slide 141 text

Let’s Learn Ruby include v.s extend

Slide 142

Slide 142 text

Let’s Learn Ruby Bundle

Slide 143

Slide 143 text

Let’s Learn Ruby Gemfile

Slide 144

Slide 144 text

Let’s Learn Ruby http://rubygems.org/

Slide 145

Slide 145 text

Let’s Learn Ruby gem "nokogiri", :git => "git://github.com/ tenderlove/nokogiri.git" gem "secret_gem", :path => "~/my_secret_path"

Slide 146

Slide 146 text

Let’s Learn Ruby bundle install

Slide 147

Slide 147 text

Let’s Learn Ruby pack your own gem!

Slide 148

Slide 148 text

Let’s Learn Ruby 1. bundle gem NEW_NAME 2. gem build NEW_NAME.gemspec 3. gem push NEW_NAME.gem http://guides.rubygems.org/make-your-own-gem/

Slide 149

Slide 149 text

Let’s Learn Ruby Exercise please try to create a Gem spec with bundle command, modify, build and push to rubygems.org.

Slide 150

Slide 150 text

Let’s Learn Ruby Rake

Slide 151

Slide 151 text

Let’s Learn Ruby desc "mail sender" task :sendmail do puts "grap mailing list from database..." sleep 3 puts "mail sending..." sleep 3 puts "done!" end

Slide 152

Slide 152 text

Let’s Learn Ruby task :goto_toliet do puts "goto toliet" end ! task :open_the_door => :goto_toliet do puts "open door" end

Slide 153

Slide 153 text

Let’s Learn Ruby TDD

Slide 154

Slide 154 text

Let’s Learn Ruby require “minitest/autorun" ! class TestMyBMI < MiniTest::Unit::TestCase def test_my_calc_bmi_is_ok assert_equal calc_bmi(175, 80), 26.12 end end ! def calc_bmi(height, weight) bmi = ( weight / (height/100.0) ** 2 ).round(2) end

Slide 155

Slide 155 text

Let’s Learn Ruby require "minitest/autorun" describe "test my bmi calculator" do it "should calc the correct bmi" do calc_bmi(175, 80).must_equal 26.12 end end def calc_bmi(height, weight) bmi = ( weight / (height/100.0) ** 2 ).round(2) end

Slide 156

Slide 156 text

Let’s Learn Ruby Ruby Koans http://rubykoans.com/

Slide 157

Slide 157 text

Let’s Learn Ruby Ruby Object Model

Slide 158

Slide 158 text

Let’s Learn Ruby At last..

Slide 159

Slide 159 text

photo by redjar

Slide 160

Slide 160 text

Let’s Learn Ruby pick up one scripting language

Slide 161

Slide 161 text

photo by Quality & Style

Slide 162

Slide 162 text

Let’s Learn Ruby @eddiekao https://www.ruby-lang.org/zh_tw/

Slide 163

Slide 163 text

Let’s Learn Ruby Ruby is fun!

Slide 164

Slide 164 text

Let’s Learn Ruby The only limitation is your imagination.

Slide 165

Slide 165 text

⾼高⾒見⻯⿓龍 Contacts photo by Eddie Website Blog Plurk Facebook Google Plus Twitter Email Mobile http://www.eddie.com.tw http://blog.eddie.com.tw http://www.plurk.com/aquarianboy http://www.facebook.com/eddiekao http://www.eddie.com.tw/+ https://twitter.com/eddiekao [email protected] +886-928-617-687