หน้าเว็บ

วันจันทร์ที่ 12 มกราคม พ.ศ. 2558

Ruby Weekly จดหมายข่าว รายสัปดาห์

Ruby Weekly เป็นข่าวรายสัปดาห์ทาง email ซึ่งผมเป็นสมาชิกอยู่ซักพักใหญ่ๆ ละ มีข่าวสารอัพเดต, Tip, Blogpost เรื่องเกี่ยวกับ Ruby และยังรวมถึงตำแหน่งงานว่างสำหรับ Ruby developer ด้วย

ผมว่ามันเป็นจดหมายข่าวที่ดีทีเดียวเลย

เพื่อนๆ สามารถเข้าไป subscribe ได้ฟรีตาม link นี้ครับ

นอกจาก Ruby Weekly แลัว ยังมีจดหมายข่าวของสาย web app อื่นๆ ให้ subscribe ด้วยเช่น HTML5, javascript รับประกันคถณภาพโดยคุณ Peter Cooper คนดัง สะใจกันไปเลย

วันอังคารที่ 28 ตุลาคม พ.ศ. 2557

โชว์ข้อมูลดีบักสำหรับ Rails

เราสามารถเรียกดูข้อมูลในตัวแปรต่างๆ ที่ใช้อยู่ใน Rails ได้โดยใช้เมธอดพิเศษของ Rails ซึ่งมีอยู่ 3 เมธอด ได้แก่


1. เมธอด debug
2. เมธอด to_yaml
3. เมธอด inspect

ทั้งสามแบบใช้งานคล้ายๆ กัน โดยเราสามารถเรียกใช้เมธอดนี้แล้วใส่ตัวแปรที่เราอยากตรวจสอบลงไปเป็น argument โดย debug และ to_yaml จะให้ผลลัพธ์คล้ายๆ กันจะต่างกันตรงที่ข้อมูลของตัวแปรที่เราตรวจสอบด้วย to_yaml จะอยู่ใน format ของ yaml เลย ในขณะที่ debug จะเป็นข้อความที่จัดเรียงให้อ่านง่ายกว่า ส่วน inspect นั้น ให้ผลลัพธ์เหมือนกับที่เราใช้ inspect ใน Ruby เลย

วิธีการนำไปใช้ก็ง่ายมาก คือเราสามารถเรียกเมธอดทั้ง 3 ตัวนี้ได้จาก view (ไฟล์ .html.erb) แล้วให้มันแสดงผลออกมาทางหน้าเพจเลย

<!DOCTYPE html>
<html>
<head>
  <title>Depot</title>
  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>
<%= debug(params) %>
</body>
</html>



จากโค้ดตัวอย่าง เราเรียกเมธอด debug จากหน้า layout (ไฟล์ app/views/application.html.erb) โดยตัวแปรที่เราต้องการตรวจสอบในที่นี้คือ param
ผลลัพธ์ที่ได้จะเป็นข้อความดีบัก ซึ่งมีหน้าตาประมาณนี้



ลองใช้ดูละกันครับ

วันพฤหัสบดีที่ 9 ตุลาคม พ.ศ. 2557

Method lookup และ super

ทุ
กครั้งที่ message ถูกส่งไปยังผู้รับ (receiver) Ruby จะทำการตรวจสอบทันทีว่าภายในคลาสต้นสังกัดของอ็อบเจกต์ที่เป็นผู้รับ message นั้นมีเมธอดที่มีชื่อเดียวกันกับชื่อของ message ที่ถูกส่งเข้ามาหรือไม่
กระบวนการค้นหาเมธอดที่มีชื่อเดียวกับ message นั้น หากค้นหากันภายในคลาสของผู้รับแล้วไม่เจอเมธอดที่มีชื่อเดียวกับ message Ruby จะทำการค้นหาต่อไปยัง โมดูลที่คลาสนั้นผนวก (include) เข้ามา รวมถึงคลาสแม่ทุกๆ คลาสที่สืบทอดต่อกันมา เรื่อยไปขึ้นไปจนถึงคลาส BasicObject ซึ่งเป็นคลาสแม่ลำดับบนสุดของทุกๆ คลาส กันเลยทีเดียว 
เรื่องของลำดับขั้นในการค้นหาเมธอดของอ็อบเจกต์เมื่อตัวมันได้รับ message นั้นถือว่ามีความสำคัญไม่น้อย เพราะนอกจากจะช่วยให้เราแยกแยะการทำงานของอ็อบเจกต์และเมธอดได้แล้ว ยังช่วยให้เราเข้าใจถึงการ override ของ Ruby อีกด้วย

สมมติว่าเรากำหนดให้คลาส A, คลาส B และ โมดูล M มีความสัมพันธ์กันตามโค้ดต่อไปนี้

module M
  def print
    puts “this is print method”
  end
end

class A
  include M

วันศุกร์ที่ 12 กันยายน พ.ศ. 2557

เทคนิคการแปลงข้อมูลโดยใช้ Type Conversion

R
uby มีความสามารถที่เรียกว่า built-in conversion ที่ช่วยให้เมธอดสามารถ เปลี่ยน (convert) อ็อบเจกต์ที่ป้อนเข้ามา ให้เป็นค่าของข้อมูลพื้นฐานอย่างเช่น ตัวเลข สตริงหรืออาร์เรย์ ตามที่เมธอดนั้นคาดหวังได้<br /> คำอธิบายข้างต้นอาจทำให้ไม่เห็นภาพ ลองดูตัวอย่างตามนี้ ครับ<br /> สมมติว่าเรามี อาร์เรย์ grade ซึ่งประกอบด้วยชื่อระดับราคาและความหรูหราของโรงแรม ตั้งแต่ โมเต็ล จนถึง โรงแรมระดับลักเซอร์รี่ เราต้องการแสดงข้อความที่ระบุชื่อของโรงแรมจากอ็อบเจกต์ hotel และพร้อมบอกระดับชั้น ตามจำนวนของดาว ซึ่งแทนด้วย rating ที่เป็น attribute ของ hotel โดย rating จะเป็นตัวเลข มีค่าตั้งแต่ 0 ถึง 5 เราสามารถสร้างอ็อบเจกต์ hotel ง่ายๆ ได้โดยใช้ Struct ดังนี้

Hotel = Struct.new(:name, :rating, :address)
h1 = Hotel.new("Sweet Inn", 1, "Bangkok")
h2 = Hotel.new("Centrara Grand", 5, "Phuket")

กำหนดให้ระดับมาตรฐานและบริการ (ความไฮโซ) ของ hotel อยู่ในอาร์เรย์ที่ชื่อ grade

grade = ["Motel", "Bed and breakfasts", "Contel", "Boutique", "Resort", "Luxury"]

เราสามารถแสดงข้อความที่ต้องการได้ดังนี้

วันพฤหัสบดีที่ 21 สิงหาคม พ.ศ. 2557

เก็บตกเทคนิคการใช้ irb

ก็บตกเทคนิคการใช้ irb ที่น่าจะเป็นประโยชน์ครับ

เปลี่ยน irb prompt ให้สั้นลง
irb prompt แบบเดิมหน้าตาแบบนี้
C:\>irb
irb(main):001:0>

ถ้าต้องการย่อ prompt ให้สั้นลง อ่านสบายขึ้น ให้ใส่อ็อบชั่น --simple-prompt เวลาเรียก irb ดังนี้
C:\>irb --simple-prompt
>>

อ้างอิงค่า return จากบรรทัดก่อนหน้า
เราสามารถอ้างอิงค่าสุดท้ายที่ return จากการรันโค้ดก่อนหน้าได้จาก "_" ดังตัวอย่างต่อไปนี้

>> "Manchester United F.C".gsub(/United/, "City")
=> "Manchester City F.C"
>> better_team = _
=> "Manchester City F.C"
>>