Ruby in General

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
เรื่องทั่วๆ ไปเกี่ยวกับภาษา Ruby

CNRuby-2

โจทย์ข้อสองตามมา

ให้แปลง Numeric เป็น String ที่มี comma คั้นแต่ละ 3 digits หน้าจุดทศนิยม
ตัวอย่างเช่น
ให้ 19999999999.55 แปลงเป็น “19,999,999,999.55”
ให้ 19999995.99 แปลงเป็น “19,999,995.99”

โค้ดสำหรับ benchmark

require 'benchmark'
 
ITERATION = 500
 
def measure(fls,&block)
  ITERATION.times { block.call }
end
 
fls = []
400.times do 
  fls << sprintf("%0.2f",rand() * (10**11)).to_f
end
 
br = Benchmark.bmbm do |b|
  b.report("Running #{ITERATION} iterations") do
    measure(fls) {
      fls.each do |t|
       # ใส่โค้ดเพื่อทดสอบตรงนี้        
      end
    }
  end
end

ก่อนที่ผมจะนำ ROR opensource มาศึกษา ผมควรรู้อะไรก่อนบ้างครับ

ผมก็เริ่มศึกษา ROR มาสักระยะแล้ว ก็ได้เคยลอง ๆ ทำตามเวปของnectech ทำให้ได้รู้แต่ว่า โค้ดแต่ละส่วน ทำหน้าที่อย่างไร การโปรเซสของแต่ละเซคชั่นมีทิศทางไปทางไหน ฐานข้อมูลควรออกแบบอย่างไร

แต่ตอนนี้ ผมอยากก้าวข้ามไปอีกขั้น (ไม่รู้ว่าก้าวยาวไปไหม) โดยการศึกษา ROR opensource ของทางฝรั่ง จึงทำให้เกิดปัญหาว่า ผมควรรู้อะไรบ้างก่อนที่จะนำโปรเจคของเขามาศึกษา หรือมาพัฒนาต่อ เพราะจากความรู้ที่เคยศึกษามานั้นคิดว่ามันยังไม่ตรงจุดซักเท่าไหร่

รบกวนขอผู้มาชี้แนะด้วยนะครับ (ไม่รู้ว่าผมถามคำถาม วกไปวนมาหรือไม่)

คนรัก Ruby หาอะไรเล่นกันดีกว่า

อยากหาอะไรให้ Ruby Forum เล่นกันสนุกๆ (เห็นช่วงนี้เงียบมาก) ถ้าใครได้เริ่มเขียน Ruby มาบ้าง จะรู้ว่าเวลาทำอะไรแต่ละอย่าง มันมีวิธีแก้หลายวิธีเหลือเกิน (There’s more than one way to do it) บางทีก็เสียเวลากว่าจะตัดสินใจว่าควรจะใช้วิธีไหนดี ซึ่งบางคนก็เน้นว่าเขียนแบบนี้แหละรันเร็วสุด บางคนก็สนใจว่าเขียนแบบนี้สวยสุด บางคนก็บอกว่าใช้งานได้พอแล้ว :) (แนวใครแนวมัน)

เลยอยากมี Series โจทย์ไว้เล่นกันแต่ละอาทิตย์ ใครจะตั้งโจทย์ก็ได้(แล้วใครจะตั้งโจทย์? คุยกันอีกที) เรียกว่า CNRuby Series (Codenone Ruby Series) ละกัน

แต่ขอเป็นโจทย์ง่ายๆ (เน้นว่าง่ายๆ) แต่มีอะไรให้เล่น วิธีแก้(code) ออกมาไม่ควรเกิน 20 บรรทัด ไม่เอาแบบโจทย์โอลิมปิก codegolf..etc. เห็นแล้วเหนื่อย และหลายคนในนี้คงไม่ว่างทำ จุดประสงค์ก็เพื่อ อยากให้เห็นว่าปัญหาเล็กๆง่ายๆ มันก็มีวิธีแก้หลายแบบ มีข้อดีข้อเสียในแต่ละวิธีนั้นอย่างไรบ้าง Ruby โปรแกรมเมอร์แต่ละท่านเขียนกันอย่างไร อยากให้ทุกคนได้ร่วมตอบง่ายๆ ไม่ต้องเสียเวลาทำนาน

Winner จะมีสองแบบคือ 1.Style Award- เขียนสวยสุด (ช่วยกันเลือก?) 2.Performance Award-เขียนออกมาแล้วรันเร็วสุด (คนตั้งโจทย์มี benchmark code ให้) (ไม่มีรางวัล :) )

เริ่มต้นด้วย

CNRuby-1

โจทย์: กำหนัดตัวแปร str เป็น String นับจำนวนคำซ้ำที่อยู่ใน String นั้น และเก็บผลลัพท์ในโครงสร้างแบบ Hash

ตัวอย่างเช่น สมมติ ให้

str = "Ruby is a dynamic, open source programming language with a focus on simplicity and productivity."

ให้แปลงเป็น

 {"productivity"=>1, "and"=>1, "a"=>2, "focus"=>1, "language"=>1, 
           "simplicity"=>1, "programming"=>1, "ruby"=>1, "on"=>1, 
             "source"=>1, "dynamic"=>1, "with"=>1, "open"=>1, "is"=>1}

โค้ดไว้สำหรับทดสอบ speed

require 'benchmark'
 
ITERATION = 500
 
def measure(&block)
  ITERATION.times { block.call }
end
 
str = ""
5000.times do 
  str << (('a'..'z').to_a[rand(26)] + ('a'..'z').to_a[rand(26)] + ('a'..'z').to_a[rand(26)]+ ('a'..'z').to_a[rand(26)])[0..rand(3)] + ' ' 
end
 
br = Benchmark.bmbm do |b|
  b.report("Running #{ITERATION} iterations on string length #{str.length}") do
    measure {
      # ใส่โค้ดเพื่อทดสอบตรงนี้
    }
  end
end

จะมีคนเล่นด้วยรึเปล่าเนี่ย

ป.ล. ผล benchmark รันบน OSX, Intel Core 2 Duo, 2.4 GHz, RAM 4 GB, Bus 800 MHz

ประกาศผล :P

[Speed Winner]

def count_word2(str)
  hash = Hash.new(0)
  str.each(' ') do |word|
    hash[word] += 1
  end
  hash
end

from pphetra

[Style Winner]

def count_word(str)
  hash = Hash.new(0)
  str.split.each do |word|
    hash[word] = hash[word] +  1
  end
  hash
end

from pphetra

Regular expression in ruby

พยายามอ่านเรื่อง regular expression จาก http://www.thaijobmarket.com/regularex.html แต่ไม่ประสบความสำเร็จครับ เลยต้องรบกวนผู้รู้

ผมมี string อยู่ตัวหนึ่ง

s = “\192.192.1.107\FileRadioSp\032002\002-20020307004.mp3”

ต้องการใช้ regular expression ตัดให้เหลือแค่

“\192.192.1.107\FileRadioSp\032002”

โดยมีหลักการว่า ตัด string ที่อยู่หลัง \ ตัวสุดท้ายออกให้หมด รวมทั้งตัว \ เองด้วย

ผมพยายามทำโดยใช้คำสั่ง

o = s.gsub(/[*]$/,”) <- แต่ไม่สำเร็จแน่ๆ

ps. มีใครอยากเปิดสอน regular expression หรือเปล่าครับ :’( อยากเรียนมาก

Free Rails Course

จะมีการสอน RoR ฟรีครับรยละเอียด ประมาณวันที่ 5-6 กรกฎาคม ครับหัวข้อ การทำ Software ประเภท Social Network ด้วย (j)RoR ครับเนื้อหาจะเหมือนหนังสือชื่อ RailsSpace ครับ เตรียมไป clear คิวกันให้ดีครับ

ตอนนี้ยังขาด TA ครับ ติดตามต่อได้ที่นี่ครับ http://www.narisa.com/forums/index.php?showtopic=23552

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น