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 ชั่วโมงแต่จริง ๆ นานกว่านั้นเพราะต้องนั่งช่วยเพื่อนทำด้วย ในขณะที่ทำเสร็จเพื่อน ๆ ยังงมกับโค้ดที่ไม่เป็นระเบียบอยู่ แต่ของผมนั้นสามารถเปลี่ยนแปลงได้อย่างมีสัดส่วน ซึ่งตอนนี้สามารถใช้งานได้สมบูรณ์ดีครับ

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

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

ทำไมทำ PHP Framework เองหล่ะ ? คำถามโดนใจ และอยากตอบยาว ๆ

พอดีว่าเมื่อวาน เพื่อนฟิวส์ถามว่า

"ทำไมทำ PHP Framework เองหล่ะ"

วันนี้เลยมาตอบแบบยาว ๆ เสียหน่อย

คือในตอนแรกเริ่มเดิมทีเนี่ย ผมก็เขียน Class ต่าง ๆ ใช้งานเองอยู่มากมาย ทั้ง Class สำหรับ Query ฐานข้อมูล MySQL หรือ Class วันที่อย่าง thai_datetime ที่รองรับวันที่ภาษาไทย และปี พ.ศ. โดยรวมก็รู้สึกว่าทำงานกับพวกนี้สะดวกขึ้นมาก โยน Object ไปๆ มาๆ ง่ายและง่ายเสร็จเร็ว

แต่พอมาระยะหลัง ๆ งานที่ได้รับมันเป็นงานที่เกี่ยวกับข้อมูลจำนวนมาก ๆ การทำแบบนั้นสิ้นเปลื้องทรัพยากรอย่างมาก และบางครั้งเกิดความซ้ำซ้อน และโค้ดโปรแกรมรกอย่างเห็นได้ชัด รวมไปถึงการที่ผมเริ่มเขียน PHP แบบรวมไฟล์เดียว คือ process ทุกอย่างจะทำงานภายใต้ index ไฟล์ ทำให้การลาก if-else ของหน้าต่าง ๆ มันยาว และยุ่งยาก เลยนั่งคิดว่าจะทำยังไงดี

คราวนี้คิดออกว่าเราทำไม ไม่ทำการอ้างอิงหน้าแบบ Class ไป Method เสียเลยหล่ะ (ในตอนต่อไปขอเรียก Class ว่า Model) คือเมื่อ เขียนโปรแกรมต้องการข้อมูลเกี่ยวกับอะไรก็เรียก Model และตามด้วย Method ที่ต้องการ

ตัวอย่างเช่น

ต้องการอ่านข่าว id ที่ 1234 ระบบก็ไปเรียก Model "News" และ Method "Show" โดยส่ง id "1234" เข้าไปใน Method แล้วเมื่อได้ข้อมูลแล้วก็แสดงผลออกมา

ตอนแรกก็กะทำแค่นั้น แต่ไป ๆ มา ๆ มันเข้าเค้า MVC เว้ย เลยศึกษา RoR อยู่พักนึง เลยเข้าใจเลยว่าไอ้ที่จะทำเนี่ยมันคล้าย ๆ กัน เลยจัดการดัดแปลงแนวคิดใหม่ จากการที่จะเรียก Model ตรง ๆ เป็น ไปเรียก Method ของ Controller (Controller-Method) แทน แล้ว Controller-Method จะไปเรียกใช้ Model และ Method ที่เกี่ยวข้องทั้ง ๆ มาใช้งาน ซึ่งคราวนี้ Model มีอิสระต่อการเรียกใช้ข้อมูลของฐานข้อมูลมากขึ้น สามารถปรับแต่งและแก้ไขคำสั่ง SQL ได้ตามต้องการ โดยการจัดการข้อมูลในฐานข้อมูลต้องสอดคล้องกับความหมายของ Model นั้น ๆ เมื่อ Controller-Method สั่งให้ Model ทำงานเสร็จแล้ว Model จะทำการบันทึกสถานะที่จำเป็นในการแสดงผลใส่ลง Observer-Data (ตัวตรวจจับข้อมูลที่ต้องการ) ไปยัง View ให้ View จัดการแสดงผลข้อมูลตามที่ Controller-Method สั่งมาอีกที แล้วเจ้า View เนี่ยจะเอาข้อมูลใน Observer-Data มาใช้งานตามแต่ View จะใช้

ตัวอย่างเดิมแต่เปลี่ยนแนวคิดใหม่

ต้องการอ่านข่าว id ที่ 1234 ระบบก็ไปเรียก Controller "News" และ Controller-Method "Show" เสร็จแล้ว Controller-Method มีการทำงานอะไร ต่าง ๆ มากมาย เช่นมีการใช้ Model พื้นฐานอย่าง News และอาจจะมี Model "ความดิดเห็น" และ "ข่าวที่เกี่ยวข้อง" อื่น ๆ อีก เพื่อเอาไปแสดงผล โดยส่ง id "1234" เข้าไปใน Controller-Method ด้วย เพื่อเอาข่าวที่ 1234 ออกมา เมื่อได้ข้อมูลครบแล้ว ก็เข้าไปใส่ใน Observer-Data ซึ่งเมื่อได้ข้อมูลแล้วก็แสดงผลออกมาโดยเอาไปจัดการรูปแบบต่าง ๆ ให้สวยงานในส่วนของ View ชื่อ "ShowNews" โดยส่วนของ View จะถูกครอบอีกชั้นด้วย Theme หลักของระบบอีกที

ซึ่งระบบจะประมาณนี้ แต่สุดท้ายก็มีการแยกส่วนหลัก ๆ เป็น Core, Add-on, Warrper Class, Page และ Apps ซึ่งอาจจะมีอะไรมากกว่านี้อีกหน่อย แต่คงไม่ต่างจากข้างบนมากนัก

จากสิ่งเหล่านี้ ทำให้ผมได้แนวคิดมากมาย และการทำแบบนี้มันทำให้รู้ว่า "กูก็ทำได้วะ" เอาแนวคิดที่เราเคยทำอะไรมามากมายใส่มันลงไป

อีกอย่างคือ Framework หลาย ๆ ตัวของเมืองนอกมักเขียนคำสั่ง SQL เพียว ๆ ไม่ค่อยได้ และมักจะทำให้เราเสร็จ ซึ่งผมไม่ชอบเท่าไหร่ เพราะมันควบคุมและย่อคำสั่ง SQL ลำบากมาก หรือทำไม่ได้เลย ซึ่งทำให้ประสิทธิภาพตกไป ใน Framework ผมเลยไม่มีการจัดการ SQL สำเร็จรูปมากมาย อาจมีคำสั่งพื้นๆ เช่นนับจำนวน Record ในตาราง หรือตัวช่วยแบ่งหน้า อะไรพวกนี้ นิดหน่อยซึ่งเป็นงานที่ทำซ้ำ ๆ และใช้กันเยอะอยู่แล้ว เอามาใส่เป็นแบบสำเร็จรูป ส่วนคำสั่ง insert, update, delete อาจจะทำส่วนง่าย ๆ ไว้ในกรณีที่ต้องการลบข้อมูลที่ใช้ primary key อ้างอิงเป็นหลัก แต่ถ้าใช้ตัวอื่น ๆ ด้วย ก็สามารถใช้ SQL Query ทั่วไปแทนได้เลย

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

การพัฒนา Framework ตัวนี้พยายามให้มันอยู่บนพื้นฐานของ Add-on มากกว่า Core คือไม่อยากใช้อะไรก็เอา add-on ออก พยายามไม่ให้ตัวที่เป็น Core ผูกติดกับ Add-on แต่ให้ Add-on มันมาผูกกับ Core เอง เพราะเวลาเอา Add-on ออกมันจะได้ไม่มีปัญหา ซึ่งมันต่างกับ Framework บางตัวที่มีอะไรให้ใช้มากมาย แต่บางครั้งมันมากเกินไปหนัก Framework แล้วมันเอาออกไม่ได้ ซึ่งมันทำให้ประสิทธิภาพตกไปเลย ซึ่งพยายามไม่ให้เกิดกับตัวนี้ (หวังไว้นะ)

อีกอย่างที่ำอยากทำคือทำให้ได้อย่าง RoR กะว่าจะทำ Bat File แล้วเขียนให้มันสร้าง Model, View และ Controller ด้วยคำสั่งเดียว -_-‘ แต่คงยากหว่ะ เอาแค่นี้ก่อนดีกว่า ฮ่า …..  ทำคนเดียวไม่ได้ทำหลายคน ค่อยเป็นค่อยไปแล้วกัน

[update] ความคืบหน้าของ PHP Framework

ตอนนี้ปรับแต่งและแก้ไขไปแล้วโดยตอนนี้อยู่ที่ version 0.1a (alpha test) revision ที่ 46 แล้ว ปรับแต่งระบบภายในหลายส่วน แต่หลัก ๆ คือแยกส่วนของ Page และภาษาสำหรับการแสดงผลของ Core ออกจาก Apps ซึ่งตอนแรกรวมกันอยู่

โดยเหตุผลหลักๆ มาจากว่า Core จะมี Page และภาษาสำหรับแสดงผลพื้นฐานของมันเอง เอาไว้ให้ Module, Warpper Class, Function, CSStyle และ Add-on มาอ้างอิง ซึ่งจะได้ง่ายต่อการใช้พัฒนา Core ในภายหลัง และสามารถเอาไปปรับแต่งให้รองรับกับภาษาอื่น ๆ ได้โดยแค่แปลี่ยนแปลง ที่ Core เท่านั้น และการแยกครั้งนี้ช่วยให้ลดความซ้ำซ้อนลงไปได้เยอะ

ส่วน Apps ที่เขียนขึ้นมา ก็เข้าไปใช้และปรับแต่งแยกจากกัน จะได้ไม่สับสน แล้วง่ายต่อการ Upgrade ตัว Framework ในอนาคตต่อไป ไม่งั้นตอน upgrade นี่มึนแน่ ๆ

คาดว่าถ้าการพัฒนาระบบที่ทำอยู่ไม่มีอะไรผิดพลาดและเกิด bug ขึ้นระหว่างการพัฒนาระบบที่ทดสอบอยู่จะประกาศตัว 0.1a revision 46 เป็น 0.1b ทันที แต่คาดว่าคงมีจุดรั่วหลายส่วนตัวเลข revision คาดจะทะลุ 50 แน่ ๆ ซึ่งตอนนี้ Architecture Diagram ไม่นิ่งอย่างแรง และเริ่มอ่านลำบาก เดี่ยวเขียนใหม่อีกรอบท่าจะดี

ส่วน Module และ Add-on บางส่วนอาจจำเป็นต้องปรับแต่งเพิ่มอีกนิดหน่อยให้มีความยิดหยุ่นต่อการปรับแปลี่ยนในครั้งนี้ครับ

ส่วนชื่อของ Framework ตัวนี้อย่างไม่เป็นทางการ แต่ของเป็น codename ไว้ก่อนคือ Hoffman ครับ (ชื่อ Notebook Thinkpad ตัวนี่แหละ -_-‘)

[Update 1, 13:28] ด้านล่างนี้คือโครงสร้างของ Directory ของ Framework นี้