กลับมา Blog Blog แล้วครับ

หายไปนานกว่า 2 อาทิตย์กว่าได้ จริง ๆ ช่วงที่ผ่านมา เที่ยวไปทั่ว แต่มาช่วง 2-3 วันนี้เพิ่งได้อยู่กับที่ซะที

โดยส่วนตัวเพิ่งซื้อ Notebook ตัวใหม่มาไม่นาน ใช้มาได้สัก 1 เดือนครึ่งแล้ว ถ้าใครเข้าไปอ่านใน MySpace ที่เมนูด้านบนก็จะเห็นว่าตอนนี้เปลี่ยนเครื่องแล้ว ตอนนี้ใช้ ThinkPad Z61t อยู่ โดยรวมถือว่า ok เลย ให้ชื่อมันเป็น HoffmanV2 (อย่างกับไอ้มดแดง ฮ่า …. ) อยากได้ Thinkpad จอ Wide มานานแล้ว เพราะว่าใช้ IDE หลายตัวที่มี Tools ที่กินเนื้อที่ด้านข้่างจอมาก ตัวนี้ได้ 14.1 Wide มีขนาด Resolution ที่ 1,440 x 900 ถือว่าดีมาก

ตัวถังด้านนอกเป็น ABS Plastic และด้านในเป็นโครง Magnesium alloy เพิ่มความแข็งแรงดีมากเลย คือเครื่องมันบางอยู่แล้ว พับจอแล้วหนาประมาณ 1 นิ้วได้ แล้วเป็นฝา Titanium ด้วย น้ำหนักก็ 2.1kg เท่านั้น ก็เบากว่าตัวเก่าครึ่งโลได้ อ่อ เรื่องฝา Titanium เนี่ยถ้าใครมีอาการลอกจากการที่ตัวเคลือบกันลื่นหรือบางคนเรียกว่าตัวกันลอยลอก ซื้อถามช่างแล้วน่าจะเกิดจากการ QC มาไม่ดีของ Cover ที่ใช้สารเคลือบที่ไม่ทนต่อสารเคมีต่าง ๆ  ก็สามารถนำไปเปลี่ยนได้ที่ ศ. IBM ตรงรถไฟฟ้าสถานีอารีย์ได้เลยครับ  ไม่เสียค่าใช้จ่ายในการเปลี่ยน (แต่เสียค่าเดินทาง) ตอนนี้รับเปลี่ยนอยู่ครับ เพราะว่าตัวที่ติดมากับเครื่องบางเครื่องจะมีปัญหานี้อยู่ ตอนนี้ผมใช้ตัวฝาตัวใหม่ที่แก้ปัญหาเรื่องฝา Titanium ลอกแล้วถือว่า ok เลยครับผม

ส่วนอื่น ๆ ก็ยังคงความเป็น ThinkPad เหมือนเดิม อีกอย่างคือได้แบตแบบ 7 Cell มาซึ่งมันยื่น ๆ ออกจากตัวเครื่อง คือถ้าเอาไว้ใช้งานแบบนาน ๆ ก็ ok นะ ใช้ได้ประมาณ 3 ชั่วโมงครึ่ง แต่อยากได้แบบ 4 Cell มากกว่าตอนนี้เพราะว่ามันพอดีกับเครื่องถือง่ายกว่า แต่ว่าตอนนี้หาซื้อไม่ได้ เพราะว่าแบตตอนนี้ถือเป็นวัตถุระเบิดไปแล้ว -_-‘  การนำเข้าเลยลำบากครับ แบตรุ่นใหม่ ๆ ที่นำเข้าเลยติดด่านนำเข้า ช่วงนี้เลยนำเข้าไม่ได้ ใครแบตเสียหรือส่งเคลมเรื่องแบตก็ตรวจสอบกันหน่อยนะครับ ว่ามีของหรือเปล่า

ส่วนเรื่องการประมวลผล Core 2 Duo 1.6GHz นี่เร็วกว่า Pentuim M 1.3GHz ตัวเก่า ประมาณ 4-5 เท่าได้เลย ทดสอบด้วยการแปลงไฟล์ภาพยนต์จากแผ่น DVD หลาย ๆ เรื่องที่ตัวเองมีตัวเก่าใช้เวลา 5-6 ชั่วโมง แต่ตัวใหม่นี่ เฉลี่ยที่ 1 ชั่วโมงนิดๆ เท่านั้น แถมตอนแปลงไฟล์ภาพยนต์ก็ยังทำงานอย่างอื่นไปได้อย่างราบรื่น เพราะตัวโปรแกรมแปลงไฟล์นั้นมันรองรับแบบ MultiThread ตอนแปลงไฟล์มันเลยใช้ Core CPU ทั้งสอง Core ที่โหลดประมาณ 50 – 70% ตลอด เลยมีพอในการใช้งานได้เรื่อย ๆ (ถือเป็นข้อดีของ CPU แบบ Dual Core) ก็แน่หล่ะ สองหัวดีกว่าหัวเดียว ฮ่า … อีกอย่างคือเพิ่ม RAM มาเป็น 1.5GB แล้ว แต่จริง ๆ ไปงาน Commart อยากได้อีกแถมเป็น 2GB แต่รอก่อนแล้วกัน ช่วงนี้เงินไม่ค่อยมีเอาไว้มีแล้วค่อยซื้อแล้วกัน ถึงแม้ว่าช่วงนี้ RAM จะถูกจัด ๆ ก็ตามทีก็เหอะ ตอนนี้ก็มีความสุขดีกับ HoffmanV2 ;)

แล้วช่วงสิ้นเดือนที่แล้วก็ไปเชียงใหม่ไปเที่ยวแล้วไปเคลียร์ปัญหานิดหน่อยแค่ 2 วันแล้วก็กลับไปพิษณุโลกต่อไป ไปเคลียร์งานนิดหน่อย แล้วก็กลับนครสวรรค์ แล้วก็ไปๆ กลับๆ พิษณุโลก เพราะต้องไปเอาใบรับรองการจบการศึกษาและ Transcript สรุปเกรดจบก็ได้ 2.86 ถือว่า ok แต่ก็นะ นั่งปรับปรุง Resume ให้กระชับขึ้น เพราะต้องเอาไว้ใช้งานในอนาคตแน่นอน เฮ้อ …… สนุกสนานครับ

ช่วงนี้ปรับพื้นด้าน Database ใหม่หลายส่วนที่ยังอ่อนอยู่ เพราะได้งานในตำแหน่ง DBA (Database Administrator) มา จริง ๆ รับตำแหน่งส่วน Software Developer Consult อีก ก็น่าจะพอสมควรกับงานที่ได้รับมา เริ่มงานก็วันที่ 1 เดือนหน้า ตอนนี้ของฝึกฝีมือก่อน ;)

มีคนถามมาเยอะเมื่อไหร่ PHP Framework จะได้เริ่ม Release เสียที ต้่องบอกเลยว่าทำการ ปรับโครงสร้างใหม่หมดเลย พอดีว่าจากตอนแรกจะเอาให้มันคล้าย ๆ กับ RoR มาที่สุด แต่ไปๆ มาๆ ไม่เอาดีกว่า ทำให้เหมือนมันก็ทำได้ แล้วทำไปทำไม CakePHP มันก็เหมือนกัน เลยมองว่าไปซ้อนทับตลาดกัน ตอนนี้เลยปรับเปลี่ยนเล็กน้อย โดยเพิ่มแนวคิดแบบ Zend Framework และแนวคิดแบบ .Net Framework เข้ามาผสมด้วยคือตัว Framework ทั้งสองแบบมันเป็น Component-based ส่วน RoR และ CakePHP มันเป็น Automate + MVC-based ใครเคยเขียนพวก .NET Framework อย่าง VB.NET หรือ C#.NET คงนึกภาพออก ประมาณว่าคุณอยากใช้อะไรก็เอา Component มาใส่ ตัว Tools มันหาให้ แต่คุณเลือกเองว่าจะใช้อะไร มันไม่ automated ให้ทั้งหมด แล้วมาปรับแต่งตามงานที่ต้องการแทน แล้วก็โครงสร้างระบบก็ต้อง Design เอง หลายคนที่มีการวางแผนในการพัฒนาระบบที่ดี และต้องการอิสระจะชอบแบบนี้ แต่ว่าถ้าใครออกแบบและวางแผนไม่ดี ซอฟต์แวร์ที่สร้างมันห่วยลงไปในทันที เค้าเลยมีการสร้าง Pattern และ Framework มาครอบมันอีกทีให้มันมีตัวชี้นำว่าควรจะทำอะไร เพื่อทำให้ซอฟต์แวร์ของเรามีรูปแบบ และโครงสร้างที่ชัดเจนและไม่เละ ซึ่งถ้าใครอยากทำอะไรที่ง่าย ๆ และมีแนวทางมาให้บ้างในการพัฒนาซอฟต์แวร์ก็จะชอบ Framework ที่มี Pattern มาให้แล้ว ก็อย่าง RoR หรือ CakePHP ที่เป็น MVC Pattern ซึ่งตัวโครงสร้างและระบบที่ใส่มาให้นั้นก็เพียงพอในงานพื้นฐานและระดับกลาง ส่วนถ้าต้องการขั้นสูงก็ต้องเขียนเพิ่มและ plug เข้าไปในระบบ ที่เรียกว่าการทำ plugin หรือ addon เพิ่ม แต่ส่วนใหญ่มักจะไม่ค่อยได้ใช้เท่าไหร่ ตอนนี้เลยปรับโครงสร้างใหม่ให้รับแนวคิดทั้งสองส่วนเข้ามาด้วยกัน พยายามให้สามารถรองรับกับ Zend Framework Conponent ด้วย น่าจะทำให้สามารถนำ Component ดีๆ จาก Zend มาใส่ได้ พยายามจะให้มัน enable ตัว Component ง่าย ๆ อาจจะใช้ XML เป็นตัว config เพราะคิดต่อไปอีกว่าพอมันเป็น XML แล้ว กะจะทำตัว Desktop App สำหรับดึงตัว XML มา config บน Windows UI ได้เลย คงเหมาะกับคนที่ไม่ชอบไปมึนงง กับ tag XML เท่าไหร่ แหม ช่วงนี้ idea พุ่งจริง ๆ เรา ฮ่า ….. แล้วที่ทำตอนนี้เลยคือตัว DB Adapter ใน PHP ที่จะทำเป็น ORM (Object Relational Mapping) แบบเดียวกับ ActiveRecord ใน RoR ตอนนี้มีหลายตัวใน PHP ที่น่าใช้ แต่ส่วนใหญ่รองรับ PHP5 ทั้งนั้น เลยกะว่าจะ Port มาลง PHP4 ด้วย ไม่รู้จะรอดหรือเปล่าเนี่ย แต่ตอนนี้เอาประมาณนี้ก่อนแล้วกันนะ ;)

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

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

กำลังบ้า 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 มากที่สุด แถมด้วยระบบตรวจสอบข้อมูลในฟอร์มแบบซึ่งสามารถปรับแต่งแก้ไขได้ง่ายมาก ๆ

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