Syntax Format และ Auto-Complete ของ Ruby on Rails บน Editplus

จริง ๆ ทำได้มาหลายวันแล้ว และน่าจะได้เวลาเอามาปล่อยเสียที ที่ทำเพราะเห็นว่าในเว็บหลักของ Editplus เองนั้นมีให้โหลดอยู่ แต่พอโหลดมาแล้ว เซงจิต เพราะ Ruby Syntax Format และ Auto-Complete ของ Editplus ที่  Tomasz Machalski เขียนนั้น ครบคลุมเพียงเล็กน้อยเท่านั้น เลยเอามาปรับปรุงใหม่เยอะพอสมควร และทำขึ้นเพื่อไว้สำหรับรองรับ Ruby on Rails ด้วย โดยไฟล์จะมี 2 ส่วน 2 แบบ คือไฟล์ stx ซึ่งเป็นไฟล์ Syntax ที่มี 2 แบบคือ Syntax แท้ ๆ ของ Ruby และ Rails Frameworks ที่มักใช้ในการทำงาน และ Rails HTML (rhtml) ที่เอาไว้แก้ไขไฟล์ rhtml เมื่อเราจะเขียน Ruby on Rails ส่วนต่อมาคือ acp ซึ่งเป็นไฟล์ Auto-Complete โดยมีไฟล์ 1 ไฟล์ที่เอาไว้สำหรับพิมพ์เพียงนิดหน่อยแล้วเคาะวรรค ก็เป็นชุดคำสั่งที่เราต้องการได้เช่น

  • พิมพ์ class แล้วเคาะวรรคก็จะมี end ต่อท้ายให้เลย
  • พิมพ์ bt แล้วเคาะวรรคก็จะมี  belongs_to :object , :class_name => "ClassName", :foreign_key => "object_id" ออกมาให้แทน
  • เป็นต้น

ซึ่งช่วยให้เราสะดวกมากขึ้นในการเขียนภาษา Ruby  และ Framework อย่าง Rails

ซึ่งเท่าที่ทำมาก็ทำเท่าที่ตัวเองใช้และคาดว่าน่าจะมีส่วนที่ต้องเพิ่มเติมในอนาคต โดยตัวไฟล์ที่ปล่อยนี้อยู่ที่ revision ที่ 5 และคาดว่าจะมีการปรับเปลี่ยนอีกพอสมควร

ส่วนการติดตั้งนั้นก็ลองหาวิธีกันเอาเองนะ ไม่น่ายากเกินไปสำหรับคนที่เล่น Editplus มาพอสมควร อย่างน้อย ๆ คนใช้พวก Editplus ก็คงเป็นพวก Programmer ที่มีทักษะในการใช้งานโปรแกรมอยู่พอสมควรอยู่แล้ว

Ruby file


Rails HTML

ดาวน์โหลดได้ที่นี่

การทำ Read more ใน entry หรือ post สำหรับ blog หรือลักษณะคล้าย ๆ กัน (Ruby และ PHP)

พอดีว่าลองเขียน blog ใน RoR แล้ว ลองทำ Read more ใน entry ดู คนที่เขียน Blog อยู่คงรู้ว่าการเพิ่ม Read more ใน entry นั้น ทำได้โดยใส่ comment ชื่อ more หรือ <!– more –> ซึ่งเราจะมาดู concept มันก่อนดีกว่า โดยตัวอย่างผมจะอ้างอิงกับภาษา Ruby และ PHP (เอาด้วย เพราะเป็นภาษาที่ถนัดที่สุด และเป็นภาษาหากิน ฮ่า …… )

Concept ก็คือ ข้อมูลของเรานั้น เป็น String และ String คือ Array ของ Charactor (ตัวอักษรมาเรียงต่อกัน) การตัดสาย String ออกมานั้นก็เหมือนกับการ Slice Array ออกมา หรือบางคนอาจจะเรียกกว่าการ Sub-String ก็ไม่ผิดนัก สิ่งที่เราต้องรู้ก่อนเสมอคือตำแหน่งของ comment more ว่าอยู่ที่ index ในของ Array ของ Charactor (หรือสาย String) แล้วทำการ Sub-String ญ. ตำแหน่งเริ่มต้น ( index ที่ 0 ) ไปจนถึงตำแหน่งที่ comment more อยู่


Ruby

# เรากำหนด body เป็นตัวแปรที่เก็บ String ยาว ๆ หนึ่งสาย
# แล้วเราทำการหา <!– more –> ใน body ว่ามีหรือไม่
# โดยใน method "index" แล้วใส่ค่าที่ต้องการหาลงไป นั้นคือ "<!– more –>"
# สิ่งที่ได้ออกมานั้นต้อง convert เป็น integer นิดนึง
# เพื่อให้มันเปรียบเทียบได้ด้วย to_i

index_more = body.index("<!– more –>").to_i
if index_more == 0 then
    # ถ้าไม่มี "<!– more –>" ก็ส่งสาย String ออกมาทั้งหมด
    puts body
else
    # ถ้ามี "<!– more –>" ก็ Sub-String เสีย
    # ณ. ตั้งแต่ตำแหน่งที่ 0 ถึงตำแหน่งที่ "<!– more –>" อยู่

    puts body[0, index_more]
end


PHP

// เรากำหนด $body เป็นตัวแปรที่เก็บ String ยาว ๆ หนึ่งสาย
// แล้วเราทำการหา <!– more –> ใน $body ว่ามีหรือไม่
// โดยใช้ function "strpos" แล้วตัวแปรที่เก็บ String
// และใส่ค่าที่ต้องการหาลงไปใน นั้นคือ "<!– more –>" ลงไป

$index_more = strpos($body, "<!– more –>");
if($index_more == 0){
    // ถ้าไม่มี "<!– more –>" ก็ส่งสาย String ออกมาทั้งหมด
    echo $body;
}
else {
    // ถ้ามี "<!– more –>" ก็ Sub-String เสีย
    // ณ. ตั้งแต่ตำแหน่งที่ 0 ถึงตำแหน่งที่ "<!– more –>" อยู่
    // โดยการ Sub-String ก็ใช้ function "substr"

    echo substr($body, 0,$index_more);
}

กำลังบ้า Ruby on Rails ภาค MVC

เพิ่งแก้ Blog จากการใช้ Category มาเป็น Tag แทนด้วยเหตุผลที่ว่ามันทำให้การค้นหาและจัดหมู่นั้นทำได้ง่ายกว่ามาก ซึ่งช่วงนี้กำลังหาสิ่งใหม่ ๆ เข้าตัว เริ่มด้วยการศึกษาหลักการ Design Pattern ต่าง ๆ ของ GoF และ Model-view-controller (MVC) ที่เป็น Design Pattern อีกแบบหนึ่งที่ได้รับความนิยมมาก โดยตัวที่เอาประกอบการศึกษาก็คือ Ruby on Rails (RoR) ซึ่งเป็นการใช้ภาษา Ruby มาเป็นภาษาในการพัฒนาและทำเป็น Framework ที่ชื่อว่า Rails นั้นเอง โดยรวมยังไปไม่ถึงไหน แต่ที่แน่ ๆ การพัฒนาทำได้รวดเร็วและง่ายมาก ๆ แต่สิ่งหนึ่งที่ต้องเข้าใจคือ MVC เสียก่อน เพราะไม่งั้นพัฒนาไปแล้ว งง แน่ ๆ

Model-view-controller (MVC) เป็นการแยกการพัฒนา Software ออกมาเป็น 3 ส่วนหลัก ๆ  (หรือบางคนเรียกกว่า 3 Layer) ซึ่งได้แก่ Model, View และ Controller

  • Model เป็นการตัดสินใจ (Domain logic) ในการเข้าถึงและใช้งานข้อมูล (Raw data) ซึ่งเป็นไปตามกฎที่ตั้งไว้ (Business Rule) 
  • View เป็นส่วนของการนำข้อมูลที่ได้จาก Model มาแสดงผลให้ผู้ใช้ได้ทราบข้อมูลผ่านทางส่วนติดต่อกับผู้ใช้งาน (User Interface,UI)
  • Controller เป็นส่วนที่ตอบรับและโต้ตอบการทำงานของผู้ใช้ (Event และ Responds) โดยจะเป็นตัวกระตุ้นให้ Model และ View ทำงานไปในทิศทางเดียวกัน

ขั้นตอนการทำงานของ MVC แบบคราว ๆ

เหตุการณ์สมมติ "นักเรียนต้องการส่งคำตอบในการทำข้อสอบให้กับครูผู้สอน" การทำงานแบบ MVC จะมีลักษณะดังนี้

  1. เมื่อนักเรียนกดปุ่ม Submit เพื่อส่งข้อสอบ ซึ่งอยู่ที่ View จะส่งคำร้องนี้ไปยัง Controller (1) จะทำการรับการโต้ตอบจากปุ่ม Submit และสร้าง handler หรือ callback ขึ้นมา เพื่อใช้ติดต่อระหว่าง Layer
  2. Controller ทำการเลือก Model ที่ตรงกับข้อมูลของผู้ใช้ที่ส่งข้อมูลเข้ามา (2) แล้ว Model ทำการตรวจสอบความถูกต้องของข้อมูลตามกฎที่ตั้งไว้ (Business Rules) ถ้ามีข้อผิดพลาดจะส่งคำร้องไปยัง View (5) ให้ทำการสร้างหน้าแจ้งข้อผิดพลาดออกมาและจบการทำงานทันที แต่ถ้าไม่มีข้อผิดพลาดจะใส่ข้อมูลนั้นลงฐานข้อมูล โดยที่ Model จะเป็นคนจัดการข้อมูลในฐานข้อมูลเองทั้งหมด (3) แล้ว Controller จะบอกให้ View (4) จะทำการสร้างส่วนติดต่อกับผู้ใช้ใหม่ขึ้นมาโดยไปดึงผลคะแนนที่ได้มาจาก Model (5) ออกมาแสดงที่ส่วนติดต่อผู้ใช้งาน (User Interface,UI)
  3. และการทำงานจะเป็นแบบไหนไปเรื่อย ๆ จนกว่าโปรแกรมจะจบการทำงาน

จากตัวอย่างด้านบนคงจะพอเห็นภาพแล้วว่าการติดต่อระหว่าง Model, View และ Controller แล้ว เมื่อเราสามารถแยกการทำงานของโปรแกรมของเราได้ในรูปแบบนี้ จะทำให้การดูแลและแก้ไขระบบเป็นไปด้วยความรวดเร็ว และลดความซับซ้อนในการสร้างลงไปมาเลยทีเดียว

ซึ่งในการเขียน RoR นั้นก็ใช้หลักการแบบนี้เช่นกัน และตัว Framework เองนั้นออกแบบมาให้มีความสามาถในการสร้างงานที่สูงมาก (High Productivity) กล่าวคือเราไม่จำเป็นต้องออกแบบฟอร์มเองทั้งหมด แต่ตัว Framework จะออกแบบมาให้แล้ว และเรามาปรับแต่งฟอร์มทีหลัง โดยตัวฟอร์มจะมีความสอดคล้องกับข้อมูลที่ออกแบบใน Database มากที่สุด แถมด้วยระบบตรวจสอบข้อมูลในฟอร์มแบบซึ่งสามารถปรับแต่งแก้ไขได้ง่ายมาก ๆ

สำหรับตอนนี้ก็คงต้องกลับไปนั่งเล่นกับมันก่อน เดี่ยวมาเล่าต่อครับ ;)