กำลังเตรียมตัวไปงาน BarCamp Bangkok Winter 2008

image

งาน BarCamp Bangkok Winter 2008

จัดในวันที่ 26 มกราคม 2551 โดยจัดที่ร้านอาหาร Indus แถวสุขุมวิท บรรยากาศดีเยี่ยม งานเริ่มตั้งแต่ 10 โมงเช้าจนถึง 6 โมงเย็น แล้วมีปาร์ตี้ข้าวเย็นกันต่อตอนช่วงค่ำ

ตอนนี้กำลังปั่นตัว slide ที่จะเอาไปพูดในงาน 2 ตัว (ในรอบเดียว)

  1. MySQL Tuning นี่คงเอาเนื้อหาเดียวกับที่เคยได้โพสใน entry เก่าไปแล้ว แต่เพิ่มเติมและใส่ประสบการณ์ตรงของตัวเองลงไป
  2. PHP Framework ผมคงไม่พูดถึงตัวอื่นมาก เอาแค่ intro พอนิด ๆ แต่เอา PHP Hoffman Framework (HMF) ไปแสดงก่อน

ซึ่งตัว PHP Framework ของผมเนี่ย ตอนนี้ก็ปั่นตัว implementation code อยู่ ไม่รู้จะทันหรือเปล่า แค่ทำ Routing URL กับพวก Standard Code ต่าง ๆ ใหม่หมดก็เล่นซะหลายวัน รวมถึง Directory structure ก็เพิ่งจะลงตัวไป น่าจะเข้ารูปเข้ารอยในไม่ช้านี้ หลาย ๆ ภายใน Framework ยังไม่นิ่งพอจะเป็น Alpha version ได้ด้วยซ้ำ แถมหลายอย่างที่อยู่ใน 0.1a (ตัวใหม่ผมเรียกมันว่า Rv2 หรือ revolution version 2) ไม่ได้โอนถ่ายมาใส่อีกด้วย เพราะซ้ำซ้อน กับ Zend Components ที่จะเอามาใช้อยู่หลายตัวอย่าง ACL ที่ทำเองใน 0.1a พอมาตัวใหม่นี้ ใช้ Zend_Acl ของ Zend Framework แทน และหลาย ๆ ตัวที่โยกมาใช้ Zend แทนหลายตัวเลย รวมถึงตัว Model ที่ใช้ความสามารถของ Doctrine และ Zend_Db แทนที่ตัว Components ของผมเอง แต่ว่าตัวที่ผมใช้อยู่ก่อนหน้านั้นก็ยังคงมีอยู่ เหมือนเดิม เพียงแต่ไม่ได้เปิดใช้เท่านั้นเอง ส่วน Controller นี่เขียนเองหมดเลย Flow ตัว Controller ต่าง ๆ จัดการเองหมด รวมถึง Standard Structure และ Code ต่าง ๆ ส่วนของ View ก็ใช้ Smarty เข้ามาแทนของเก่าของผมเองทั้งหมดเลย

ตอนนี้ที่ตัดสินใจไว้ทั้ง 3 components หลัก ๆ ก็คือ

LogicModel ใช้ความสามารถต่าง ๆ จาก Doctrine และ Zend_Db และพวก tools ด้าน Business Logic ทั้งหมด
FlowController อันนี้เขียนเองทั้งหมดเพราะหาตัวที่มันโดนใจไม่ได้ ฮา …
RenderView ใช้ความสามารถต่าง ๆ ของ Smarty มาช่วยในส่วนนี้

เพราะเท่าที่หาข้อมูลและ defend กับตัวเองแล้วหลาย ๆ อย่างน่าจะใช้สิ่งที่มีอยู่และนำมาปรับให้เข้ากับแนวทางของ Framwork ของเราเองหลาย ๆ ตัวน่าจะทำให้มันง่าย ๆ เข้าไว้ด้วย Framework บางตัวทำเรื่องง่าย ๆ ให้เป็นเรื่องยากไปซะงั้น บางตัวทำงานไม่ยืดหยุ่นอะไรแบบนั้นอีก เลยทำเองซะ แล้วให้คนอื่นมา defend กับเราว่าควรปรับอะไรอีกบาง

หลาย ๆ อย่าง หลาย ๆ idea มาจากหลาย ๆ Framework มาปรับใช้เข้าด้วยกันบางอย่าง idea ดีมาก ๆ น่าจะทำให้มันทำงานได้ง่าย ขึ้นพอสมควร

แล้วเจอกันที BarCamp ครับ

PHPHoffman Framework Diagram

จาก entry ที่แล้ว ก็นั่งคิด ๆ ว่าตัว Framework จะมีส่วนหลัก ๆ อะไรบ้าง ตอนนี้ก็ได้ข้อสรุปในการสร้างออกมาแล้ว นั่งคิด และปรับว่าจะเอายังไงอยู่หลายวันอยู่ เพราะบางอย่างมันก็รักพี่เสียดายน้อง แต่หลัก ๆ คือใช้ PHP5.2 และใช้ Extension ต่าง ๆ ของ PHP หลายตัวซึ่งการที่ใช้ Extension ของ PHP เยอะ ด้วยเหตุที่เอา Zend Framework เข้ามาอยู่ใน Core ระบบ ทำให้ข้อกำหนดหลายอย่างต้องหนักไปทาง Zend หลายเ่รื่อง แต่ผลที่ได้รับคือตัว code ต่าง ๆ นั้นมีระเบียบและตามรูปแบบเพิ่มขึ้นเยอะ สวนตัว Extension Components ได้แนวคิดจาก Firefox ที่อยากได้อะไรเิพิ่มก็เอามาใส่นั้นแหละ นอกเหนือจากที่ตัว Zend และ Component หลัก แต่จะยังคงแนวคิดที่ว่าจำเป็นต้องใช้อะไรก็จะโหลดระหว่างตอนทำงานแค่นั้น ทำให้ตัว Controller ต้องไล่ทำใหม่ทำให้ ทุก ๆ action นั้นมีรายละเอียดในการตั้งค่าเพิ่มขึ้น แต่จะเห็นว่า Permission Control นั้นหายไป เพราะคิดไว้ว่าจะเป็นส่วนของ Routing แทน ตอนนี้ขอดูความเหมาะสมก่อน ส่วนที่ผู้เขียนนั้นต้องใส่ใจจะมีอยู่ในส่วนนอกของ Core ทั้งหมด

เหตุที่ใช้ Component ของ Zend Framework ก็จากเหตุผลเก่าจาก entry ที่แล้ว และเพราะมีระเบียบแบบแผนการพัฒนาในชุมชนที่แข็งมาก

ตอนนี้พยายามเคลียร์ ๆ งานที่จำประจำ แล้วลงมาทำส่วน Framework ให้มันออกมาเป็น public เสียที คนบ่นอยากใช้กันแย่แล้ว T_T

อ่อ ผมได้แนวคิดส่วน View จาก Sixhead Template ของคุณปีโป้ หลายส่วน ซึ่งตอนนี้เอาไว้ public plan ที่ 2 แล้วกันเพราะได้ดูแนวคิดแล้ว ช่วยทีมออกแบบกราฟฟิกได้เยอะ

อ่อ ตัว private version ที่เป็น alpha รุ่นแรก ถูกเขียนเป็น Shop Cart อยู่ที่ http://shop.thaiadmin.org แต่ผมมองว่ารุ่นนั้นก็ปล่อยได้แล้วแหละ แต่ว่ามองอีกมุม ยังยากอยู่อีก -_-‘ อยากให้มันง่ายกว่านี้ในการใช้งานเพิ่มขึ้น

แค่คิดก็นั่งลง coding มันแล้ว …….

[Update] – เหตุผลต่อมาในการใช้ PHP5 เพราะตัว MySQL Improved Extension นั้นทำงานได้ดีกว่ากับ MySQL ใน version ใหม่ ๆ ด้วย คือมีแล้วไม่ได้ใช้มันเสียดาย -_-‘

Redesign PHPHoffman Framework Architecture

เป็นปัญหาหนักอกอย่างรุนแรงที่จำเป็นต้อง redesign ตั้งแต่ยังไม่ออก beta การ redesign ในระดับ core นี่มันสุด ๆ จริง ๆ เพราะว่าอย่างที่หลาย ๆ entry ที่ผ่านมาเนี่ยกะว่าก็คงรู้ว่าผมกำลังทำ Framework ที่ออกไปทาง Conponent Base แทน และผสมตัว Automate เฉพาะที่จำเป็น ทำให้ไอ้ที่ทำ ๆ ตอนแรก ๆ ในแบบ Automate ทั้งหมดตั้งแต่แรก มันต้อง drop ไปหมดเลย เพราะเริ่มคิดว่า การทำเล็ก ๆ แล้วเอา plug-in มาใส่น่าจะตอบโจทย์มากกว่า เพราะอย่างแรกมันเป็นเรื่องของการโหลดตัวระบบที่มาก หรือน้อยขึ้นอยู่กับ component ที่ใช้ ไม่ใช่จะใช้แค่นี้แต่ดันเอาไส้ในออกมาเสียหมด มันเปลื้องเกินความจำเป็น แถมลอง monitor ตัว framework ที่เขียนในปัจจุบันนี่มันก็ใช้ memmory ไปพอสมควร แต่คิดว่ามันน่าจะน้อยกว่านี้ได้อีก แถมนี่จะเกือบปีแล้วยังไม่ได้ออก beta เลย แถมมีแต่คนถามว่าเมื่อไหร่จะให้โหลด ต้องบอกว่าตัวที่เป็น production ของ Framework ตัวนี้ก็อยู่ที่ shop.thaiadmin.org ครับ ส่วนตัวใหม่นี่จะเปลี่ยนภายในทั้งหมด พวก app ที่เขียน ๆ อยู่อาจต้อง recode ใหม่ด้วย แต่มันจำเป็นจริง ๆ แต่จะพยายาม backward ให้มากที่สุด

อ่อ ลืมบอกไปว่า PHPHoffman ตัวนี้ตามข้อกำหนดของ GoPHP5 ครับ ใครใช้ PHP 4 อดนะครับ (แล้ว Host ที่ใช้อยู่นี่จะเอาไงหล่ะเนี่ย -_-")

กลับมา 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 ด้วย ไม่รู้จะรอดหรือเปล่าเนี่ย แต่ตอนนี้เอาประมาณนี้ก่อนแล้วกันนะ ;)

[update 2] PHP Framework -> PHPHoffmanFramework

ตอนนี้ระบบเริ่มนิ่งแล้วหลังจากผ่าน Revision ที่ 53 มา โดยได้ทำการเพิ่ม Add-on Text Editor ของ FCKEditor ลงใน Add-on พื้นฐานข้อมูลระบบแล้ว รวมถึงได้ทำการแยกส่วนของการ Config ของ apps และ core ออกจากกัน แต่ยังแค่ส่วนหนึ่งคาดว่าอีกสักพักจะแยกออกมาทั้งหมด โดยผู้พัฒนาจะไม่จำเป็นต้องเข้าไปยุ่งกับ Config ใน core อีกต่อไป ให้ทำการ Config ใน apps อย่างเดียว และได้เพิ่ม directory ชื่อ userdata เพื่อใช้ในการ upload ไฟล์และต้องการเพิ่มไฟล์ต่าง ๆ ที่นอกเหนือจากระบบหลัก และใน Revision นี้ได้ทำการ upgrade PEAR Date Package เป็น version ใหม่แล้ว รวมถึงแก้ไข bug ในส่วนของลำดับการเรียกใช้ไฟล์ JavaScript ใน Add-on ด้วย

ระบบโดยรวมเป็นไปตามที่กำหนดไว้ทั้งหมด น่าจะออก Beta ได้ตามเวลาที่กำหนด (ถ้าไม่เกิด idea ใหม่ ๆ ที่มีผลกับ Core หลักของระบบชนิดเปลี่ยนยกแผง)

ซึ่งเมื่อตอนเย็นที่วันที่ผ่านมา พอดีว่านั่งเรียนแล็ปวิชา Computer Language แล้วในวิชานี้เรียนภาษาโปรแกรมมิ่งอยู่ 2 ตัวคือ Java Web Application Platform และ PHP โดยช่วงหลังมิดเทอมเป็นเรื่องของ PHP

อาจารย์ได้ให้ทำงานใน LAB โดยสร้าง DB มา 3 ตาราง ซึ่งได้กำหนดมาแล้วว่าเป็นข้อมูลเกียวกับภาพยนต์ โดยตารางหนึ่งและสองเป็น ประเภทภาพยนต์และชื่อนักแสดงและผู้กำกับ ตามลำดับ ส่วนตารางที่สามเป็นข้อมูลภาพบนต์ โดยกำหนดว่าเก็บชื่อ, ปีที่ฉ่าย, ประเภท, นักแสดงนำ และผู้กำกับ โดยมีการดึกข้อมูลนักแสดงนำและผู้กำกับจากตารางนักแสดงและผู้กำกับ โดยในตารางนี้มีฟิลที่กำหนดว่าใครคือนักแสดงและผู้กำกับ หรือเป็นทั้งสองอย่างอยู่ ส่วนประเภทนี่เอามาขากประเภทภาพยนต์ โดยให้ทำระบบจัดการข้อมูลของทั้ง 3 ตารางทั้งใส่ข้อมูล, แก้ไข และลบข้อมูล

นี่คือโจทย์ที่ผมได้รับและจากการอยากทำสอบ PHP Framework ที่ผมสร้างขึ้น เลยได้ลองทำระบบดู จากการทดลองนั้นผมใช้เวลาในการสร้างส่วนติดต่อผู้ใช้งานทั้งหมดซึ่งเป็น Theme หลักของระบบที่มีอยู่แล้ว ในเวลา 1 นาที ในการ Export จาก SVN ผมก็ได้ Theme ที่ตกแต่งเป็น Layout ที่สนับสนุนบน IE และ Firefox ต่อมาก็ใช้เวลาในการสร้างรายงานข้อมูลของทั้ง 3 ตารางอีก 10 นาที ตามด้วยฟอร์มของทั้ง 3 ตารางในการใส่ข้อมูล และแก้ไขอีก 25 นาที โดยได้มีระบบตรวจสอบความถูกต้องด้วย JavaScript เพิ่มลงไปให้เรียบร้อย ต่อมาก็มาจัดการส่วน SQL ก็ใช้เวลาอีก 25 นาที ในการทำ SQL เพื่อใส่ข้อมูล, แก้ไข และลบข้อมูล รวม ๆ แล้ว ใช้เวลาประมาณ 1 ชั่วโมงแต่จริง ๆ นานกว่านั้นเพราะต้องนั่งช่วยเพื่อนทำด้วย ในขณะที่ทำเสร็จเพื่อน ๆ ยังงมกับโค้ดที่ไม่เป็นระเบียบอยู่ แต่ของผมนั้นสามารถเปลี่ยนแปลงได้อย่างมีสัดส่วน ซึ่งตอนนี้สามารถใช้งานได้สมบูรณ์ดีครับ

ด้านล่างคือรูปที่จัดการตารางรายการภาพยนต์ครับ

เอาแค่นี้แล้วกันครับ ส่วนอื่น ๆ ไว้มีเวลาจะเอามาโพสต่อนะครับ ง่วงแล้วไปนอนหล่ะครับ