Powered By Blogger

04 July 2007

ruby ,trim , strip , sketchup script , rails กับภาษาไทย

วันนี้ มาพูดถึง Ruby On Rails ( RoR ) กันต่อ
จดไว้กันลืม ด้วยครับ

ruby ไม่มีคำสั่ง trim แต่มี คำสั่ง ที่เหมือนกัน คือ strip
เช่น
" foo ".strip # returns "foo"
[first_name, last_name].each { s s.strip! } # ทำทั้ง array
หรือใช้ strip! เพื่อปรับปรุงทันที
เช่น
mydata = " test this is a book "
mydata.strip!
puts mydata # จะได้ "test this is a book"



ibrary สามารถ ใช้ได้ กับ Rails ได้ โดยแยกเป็น แฟ้มๆ
แล้วแทรกไว้ ใน controller หรือ view ได้ เช่น
ใน *.rhtml แทรกโค้ด ต่อไ ปนี้ไว้ เพื่อ add library


โดย ใน lib1.rb มีคลาสอยู่ จะทำให้เรียกใช้งานได้
lib1.rb เก็บไว้ใน path ที่หาได้ โดย Dir.pwd ( หา Current Directory )
แต่ปัญหา ของ rail ก็มีอยู่ที่ *.rb ไม่ support thai ( เท่าที่ผมลองดู ใช้แล้วแจ้ง error , utf ก็error ) เลย
งาน ที่ต้องใช้แสดงผลภาษาไทย เลยไม่เหมาะจะอยู่ใน library นี้
ยังรอดอยู่บ้างตรงที่ *.rhtml support ไทย ดังนั้น code ต่างๆของฟังก์ชัน
ที่ใช้ภาษาไทย เช่น วันที่ อาจเก็บไว้ที่ *.rhtml ของวิว แทน

ตัวอย่างโค้ดเก็บวันที่ เช่น



<%     def monthname_th(m)       nm =  ['มค.','กพ.','มีค.','เมษ','พค.','มิย.' , 'กค.' , 'สค.','กย.' ,'ตค.', 'พย' , 'ธค' ]       nm[m-1]   end %>

เป็นโค้ดแสดงเดือนไทยจาก วันที่ เมื่อ m เป็นตัวแปรชนิด date

และก็เพิ่งรู้ว่า sketchup (free)

สามารถ รัน Ruby Script ได้

ลองดูแล้วก็ทำได้จริงๆ ใช้ Generate line แบบง่ายๆได้ แสดง Html Form ได้

แสดง webpage window ได้ และอื่นๆ อีกมาก

ลอง ทดสอบ generate line ของสมาการ พาราโบลา 2 มิติง่ายๆ ดู พอได้แต่ไม่ชำนาญ

ทำโดย สร้าง file *.rb สมมุดิ ชื่อ Info.rb

สร้าง class ภายใน และเรียกใช้ class ดังนี้











class Info
def getCurDir
Dir.pwd
end
def msgbox(s )
UI.messagebox( s )
end
def draw_line_test()
model = Sketchup.active_model
pt1 = [0, 0, 0]
pt2 = [10, 10, 10]
model.entities.add_line(pt1, pt2)
pt2 = [0, 10, 10]
model.entities.add_line(pt1, pt2)
pt2 = [10, 0, 10]
model.entities.add_line(pt1, pt2)
end
def draw_line_test2()
model = Sketchup.active_model
z0 = 0
zn = 0
(-20).step(20,0.5){ x
z1= y = x * x / 10
z2 = y = (x+1) * (x+1) / 10
if x == -20
z0 = z1
elsif x == 20
zn = z2
end
pt1 = [x, 0 , z1]
pt2 = [x+1, 0 , z2]
model.entities.add_line(pt1, pt2)
}
end
end # class

#### start create class and call function
i = Info.new
i.draw_line_test
i.draw_line_test2
i.drawtext_test
i = nil






เซฟไว้ที่ c:\Info.rb
แล้ว เรียกใช้ ผ่าน RubyConsole ของ Sketchup
โดย ใช้คำสั่ง load
load 'c:\Info.rb'

ข้อควรระวัง คือ ต้องเป็น โคด แบบเดี่ยว ' ไม่ใช่ แบบ " ไม่เช่นนั้น อาจต้องใช้ string

แบบ "c:\\Info.rb" แทน แต่ยังไม่ได้ทดลอง

หลังจาก กดEnter ให้รัน จะได้ รูป ทรงแบบง่ายๆ ใน sketchup pro



เขียนไว้กันตัวเอง ลืมด้วยครับ
ช่วงนี้ ศึกษาหลายภาษา




No comments: