over 2 years ago

Ruby-02

new = initialize 兩個是一樣的

class Car

def initialize(name, color)
@name = name
@color = color
end

5:00
getter/setter是一組的
attr_accessor =>就是getter和setter
attr_writer =>就是setter
attr_reader =>就是getter

09:40
多層的module/class/常數

16:00
限制:Instance method
public/private/protected

protected是給繼承用的
在Class Cat裡面設定protected的method
然後 Class Dog < Cat
之後,Dog才能用proteced的那個method,Cat本身不能用

24:00
限制:Class method
a. public_class_method :class_method_name
b. private_class_method :class_method_name

Class的self.method如果只寫private會沒用 (instance的才有用)

要強制寫成
private_class_method :hooo
這樣才不會被叫到

26:30
operator methods 數學運算式

31:00
alias_method:new_name, :old_name

37:00
method_missing

47:00
ENV
ARGV 跟 gets

56:00
FILE

1:02:50
演算法的Hash
md5
sha1
hmac
rainbow table 與 salt

require 'digest'
Digest::MD5.hexdigest("hello world")
Digest::SHA1.hexdigest("hello world")
Digest::SHA256.hexdigest("hello world")
Digest::SHA512.hexdigest("hello world")

devise用的是HMAC,不過不算是hash
是一堆演算法聚集起來的一種方式
把很多雜湊兜一兜

1:11:00
File
yaml
csv
nokogiri

1:37:00
Regexp
rubular
regexcrossword

1:46:00
怎麼使用Regexp
match = "A123456789".match(/[A-Za-z])(0|1)(\d{8})/)

1:48:00
encode
encoding

1:51:00
ri
rdoc

1:54:00
sinatra:ruby 裡面最簡單的html server
eventmachine - em-websocket

2:00:00
Deploy

  1. gem install passenger
  2. passenger然後按tab兩次,可以看到什麼可以用
  3. 有兩個的gem可以用 passenger-install-nginx-module / passenger-install-apache2-module
  4. rvmsudo passenger-install-nginx-module
  5. touch tmp/restart.txt

2:04:00
Cache的手法
rails cache
http://guides.rubyonrails.org/v3.2.17/caching_with_rails.html

Page Caching:把整頁的html都存成一個檔案,會遇到很嚴重的dirty data的問題(A看到B看過的網頁)

Fragment Caching:某一部份的網頁會被cache住
缺點:

2:09:00
Memcached
dalli
在production的環境下建議一定要用dalli,可以減少cookie的使用量

gem dali
https://github.com/petergoldstein/dalli

會把session丟過來Memcached
可以減少header的量

2:12:00
Redis:
http://redis.io/
key by value的結構,是在記憶體內,所以速度會很快
很重要
多重server之間的溝通跟一些cache的動作

2:18:00
用兩個視窗來表演同步的redis
Redis Pub/Sub... How Does it Work?
https://robots.thoughtbot.com/redis-pub-sub-how-does-it-work
pub/sub
$redis.subscribe('rubyonrails', 'ruby-lang') do |on|
on.message do |channel, msg|
data = JSON.parse(msg)
puts "##{channel} - [#{data['user']}]: #{data['msg']}"
end
end
訂了兩個channel

$redis.subscribe('hoo', 'yoo') do |on|
on.message do |channel, msg|
data = JSON.parse(msg)
puts "c: #{channel}, say: #{msg}"
end
end

左邊打 $redis.publish('hoo', 'hihi')
右邊會把上出現 c: hoo, say: hihi

server跟server間的推播

樹狀結構
master server接很多slave

一個clietn發出一個聊天訊息到slave server,
slave 把訊息丟給master
server,master做了處理之後,發給所有的slave,
所有slave在廣播給所有的使用者

為什麼要過slave:因為一台server撐不了太多的connection,所以會建議多開幾台slave

← RailsFun tw 新手教學 day6 HD RailsFun.tw 新手教學 day2.5 HD (購物車) →