ปัญหางานทั่วไปที่เจอในงานพัฒนาเว็บ (1)

หลังจากทำงานกับที่ Duocore.tv มาก็เจอปัญหาในการโค้ดมากมาย โดยผมนำมาเขียนเตือนตัวเองไว้ แล้วก็เป็นประโยชน์สำคัญท่านอื่นๆที่อาจจะเคยเจอปัญหานี้ หรืออนาคตอาจจะเจอ

1. Web Service กับ JSON หรือ AJAX Cross Domain

โดยปกติแล้วเราจะใช้ Javascript ดึงข้อมูลจากฝั่ง Server Side Script ภายใต้โดเมนเดียวกันแล้วมันได้ ผลแต่ถ้าเราจะทำ Ajax Cross Domain ด้วย JSON นั้นเราต้องรู้จักสิ่งที่เรียกว่า JSONP ซึ่งเคยเขียนในสองสามบทความที่แล้วกับวิธีทำ ซึ่งปัญหานี้ ถ้าเราไม่กะเปิด Service ให้คนอื่นใช้คงไม่เจอ แล้วเมื่อก่อนก็นึกว่ามันง่ายกว่านี้ แต่จริงๆมันต้องแก้ด้วย JSONP นี้เอง แต่ถ้าเป็นพวก XML แล้วนั้นจะไม่ต้องใช้ JSONP มาแก้ปัญหา

บทสรุปของวิธีแก้ปัญหา : ใช้ JSONP ในการส่งข้อมูลแบบ JSON ข้าม Domain หรือใช้ข้อมูลแบบ XML เพื่อไม่ต้องยุ่งกับ JSONP

2.  Asynchronous และ Synchronous

ในการเขียน Javascript หรือ jQuery และ AJAX คงเป็นเรื่องที่ขาดไม่ได้สำหรับเว็บ 2.0 ดังนั้นเราหลีกเลี้ยงที่จะไม่เจอปัญหานี้ในบางครั้งไม่ได้ ในกรณีของผมคือเจอกรณีที่เราต้องการให้ข้อมูลโหลดมาเสร็จก่อน แล้วค่อยที่จะทำคำสั่งต่อไปเรื่อยๆ ซึ่งผมก็เจอข้อจำกัดบางอย่างของ JSONP ของ jQuery นั้นก็คือมันไม่สามารถทำเป็น Synchronous ได้ ดังนั้นในกรณีที่เราต้องการให้มีการรอข้อมูลก่อน แล้วค่อยทำงานอย่างอื่นต่อจึงทำไม่ได้นั้นเอง

บทสรุปของวิธีแก้ปัญหา : ส่งข้อมูลด้วย XML หรือทำให้การท่อง DOM เป็นแบบ Static ที่สุด ไม่งั้นอาจจะเจอกรณีที่ข้อมูลส่งมาช้ากว่าคำสั่งที่สั่งให้เปลี่ยน DOM แบบ Dynamic

3. XML-RPC

เรื่องของ XML-RPC อาจเป็นเรื่องน่างง ว่าเป็นปัญหาได้อย่างไร ผมต้องใช้เจ้า function ที่ชื่อว่า xmlrpc_encode_request เป็น function ที่เอาไว้ส่ง xml rpc แต่มันดันต้องใช้ extension ของ php อย่าง xmlrpc ซึ่งต้องเปิดใช้งานก่อน ซึ่งใน Windows หรือเครื่องเราก็ไม่มีปัญหาอะไรต้องตกใจ แต่พอขึ้นโฮสที่เป็น Linux XMLRPC ตัวนี้ไม่สามารถเปิดใช้งานได้ง่ายๆ เพราะโฮสส่วนใหญ่ไม่ได้ compile เจ้า xmlrpc ตัวนี้ไว้ เลยดังนั้นการเปิดใช้งานมันจึงเป็นเรื่องที่น่าปวดหัว

วิธีแก้ปัญหา : แจ้งเจ้าของโฮสให้เปิดให้ แต่ถ้าเจ้าของโฮสเปิดไม่เป็น เห็นทีต้องใช้ library ตัวอื่นแล้วแทนแล้วเช่น XML-RPC ของ CodeIgniter

4. ข้อผิดพลาดในการเขียนโค้ด inline css

ระหว่างการทำงานภาษาที่ต้องเขียนก็มีมากมายทั้ง CSS , JavaScript , HTML , PHP , jQuery ซึ่งบางทีมันก็น่าปวดหัวจนมึนไปและข้อผิดพลาดอาจเกิดขึ้นได้ตลอดเวลา รวมถึงความที่เป็นมนุษย์มักคิดเข้าข้างตัวเอง หรือมองข้ามสิ่งเล็กๆน้อยไป กรณีที่ผมเจอก็คือเขียน inline css ผิดนั้นเอง เช่น style=”width:480; height:270;” ซึ่งดูผ่านๆก็น่าจะใช้ได้ แล้วการ render ในบาง browser สามารถ render ได้ แต่ไม่ได้ในบาง browser แล้วยังได้ในบางกรณี และไม่ได้ในหลายกรณีซึ่งทำให้เกิดความสับสนกับคนเีขียนได้อย่างมาก

วิธีแก้ปัญหา : จงเชื่อในมาตรฐานและการตรวจสอบของคอมพิวเตอร์ในกรณีนี้ก็คงเป็น HTML Validator เป็นต้น

5. แก้บัค,อัพเกรด,เปลี่ยนความต้องการ

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

วิธีแก้ปัญหา : เขียน Test Cases หรือ Test Script ช่วยทำให้ค้นพบบัคได้เร็วขึ้น แล้วก็คุยความต้องการให้ถูกต้อง ถ้าเป็นไปได้ออกแบบให้เป็น Dynamic และง่ายต่อการแก้ไข

ครั้งนี้เอาไป 5 อย่างก่อนที่เจอมาแล้วจำได้ เดียวไว้อนาคตผมพบเจออะไรอีก เดียวจะนำมาแชร์ให้คนอื่นอ่านกันครับผม การแชร์ความสำเร็จเป็นสิ่งที่ดี แต่การแชร์ความผิดพลาดจะทำให้คนที่มาอ่านสามารถเตรียมพร้อมกับปัญหาที่จะเกิดขึ้นหรือแก้ไขในอนาคตได้ วันนี้ลาไปก่อนสวัสดีครับ

CodeIgniter ไม่ใช่ Framework ที่ดี !

หลังจากผมเป็นคนแนะนำผ่าน Blog นี้ว่า CodeIgniter นั้นดีหนักหนา และเหมาะสมที่จะเรียนรู้ แต่ไหงวันนี้มากลับคำพูดตัวเองแบบนี้ละ ที่จริงไม่ใช่อะไรหรอกครับผมตั้งหัวข้อชวนคิดว่าจริงๆแล้ว CodeIgniter มันดีจริงหรืิอ ? ถ้าผมหยิบประเด็นมาพูดจริงๆ มีหลายเรื่องที่ CodeIgniter ยังไม่ถือว่าดีหนัก และมีอีกหลายเรื่องที่ CodeIgniter ทำได้ดีมาก เอาละครับวันนี้ผมก็มาเผา CodeIgniter พอประมาณกันหน่อยดีกว่า (ขนาดเปิดเว็บ CodeIgniter.in.th แล้วไหงมาเผาซะงั้น แล้วใครจะใช้เนี้ย)

  • การเขียนโค้ดยังขาด ความรวดเร็วในการเขียนถ้าเทียบกับ CakePHP หรือข้ามรุ่นอย่าง Ruby on Rails
  • ไม่มีการทำ “ข้อตกลงในการเขียน” (Convention over configuration) ทำให้ Developer ทำงานได้ตามใจชอบซึ่งมันมีดีและไม่ดีอยู่เหมือนกัน
  • CodeIgniter ไม่ใช่ Full-stack framework ทำให้ดูขาดๆต้องหาส่วนมาเติมเต็มไม่มากก็น้อย ไม่ว่าจะเป็น ORM , AJAX หรืออื่นเช่น Auth and ACL
  • ไม่มีตัว Generator ที่ช่วยทำหลายๆอย่างให้แกเราอย่าง CakePHP หรือ Ruby on Rails
  • ตัวช่วยหลายๆตัวยังดีไม่พออย่างเช่น Active Record ถึงแม้ว่าจะดีแต่ก็ยังไม่ง่ายที่จะเอาไว้เรียกใช้ (ต้องทำเอง)

เอาละครับว่ากันไปหอมปากหอมคอ เสร็จแล้วผมจะมาพูดในอีกมุมมองหนึ่งละกันครับ ว่าในการที่มันไม่มีอะไรเนี้ยและที่ทำให้มันสุดยอด ไม่ใช่แค่ดี 55+ (ด่าก่อนแล้วขายของ) แล้วมันดียังไงละ หลายคนอาจจะไม่เห็นด้วยกับสิ่งที่ผมกำลังจะบอก แต่ผมมองว่านี้คือจุดแข็งของ CodeIgniter อย่างแท้จริง และทุกคนก็อยากใช้มันเพราะสิ่งนี้

  • CodeIgniter มีระบบ Hooks ซึ่งยอมให้เราเปลี่ยนแปลง หรือทำบางอย่างซึ่งไม่ต้องยุ่งกะตัวระบบโดยตรง ทำให้พัฒนาต่อยอดได้ โดยยังไม่กระทบระบบ CodeIgniter
  • อิสระที่จะทำอะไรยังไงก็ได้ และง่ายต่อความเข้าใจ เพราะไม่มี “ข้อตกลงในการเขียน” ทำให้โค้ดส่วนใหญ่อยู่ในคู่มือและใช้ PHP ธรรมดา ไม่ต้องเรียนรู้และจำข้อตกลง
  • สามารถต่อเติม Library ต่างๆเข้าไปได้อย่างง่ายดาย และเข้าใจง่าย และไม่มีการบังคับโดยตรง มีเพียงการแยก folder เพื่อบ่งบอกมาให้แล้วแค่นั้น แต่ไม่บังคับ เช่น library กับ helper (จริงๆมันมีหลักในการเขียนอยู่ซึ่ง ใน Ruby on Rails จะใช้ Helper ใน view โหมดและ library ใช้ใน controller แต่ตอนหลัง ก็มีการทำให้สามารถใช้ helper ใน controller ได้ซึ่ง CodeIgniter ทำแบบนี้แต่แรก)
  • ความอิสระที่จะโหลด view ยังไงก็ได้ตามใจชอบ ซึ่งทำให้คนเขียน/คนมาอ่านต่อเข้าใจได้อย่างชัดเจน ซึ่งส่วนนี้ถ้าเกิดมีข้อตกลงมันจะดีคือเขียนน้อย แต่อาจจะงงถ้าศึกษามาไม่ดีพอ
  • เอกสารที่ดี ทำให้มือใหม่ศึำกษาได้รวดเร็ว และไม่จำเป็นต้องรู้สิ่งอื่นๆมากๆตามมา
  • ถึงแ้ม้ไม่มีระบบที่ติดมาอย่างมากมาย แต่เราสามารถติดมันเองได้ ซึ่งเสียเวลาก็จริง แต่ทำให้เรารู้แน่ชัดว่าระบบเราต้องการใช้อะไรบ้าง และให้เรามีสิทธิเลือกตัวที่จะมาใช้งาน

อะพอหอมปากหอมคอที่ทั้งด่้าและชม อย่างเต็มปากเต็มคำ แต่ที่สุดของ CodeIgniter ไม่ใช่การใช้ CodeIgniter ในความคิดผมมันคือการทำ Framework ของตัวเองโดย CodeIgniter !!! ซึ่งสิ่งนี้ผมว่าเจ้าตัวอื่นๆสู้ได้ยากเพราะไม่มีอิสระ ซึ่งเรียกว่า Framework พร้อมใช้นั้นเอง ในกรณีของ CodeIgniter จะเรียกพร้อมก็ได้ แต่จริงๆผมว่ามันยังแค่เกือบพร้อม เพราะยังขาดหลายอย่างซึ่งต้องต่อเติมเอง แต่ด้วยความมันเป็นแบบนี้ นี้และทำให้เราทำ Framework ของตัวเองได้อย่างสนุกสนานทั้งมี Hooks , ต่อเติม Library , ไหนจะยังสามารถรวม library เจ๋งๆอย่าง Zend และอื่นๆมาใช้งานได้อีก แล้วมีผลต่อองค์กรอย่างไรหรอครับ

คุณทราบไหมว่าปกติแล้วองค์กรส่วนใหญ่ชอบทำ Framework เป็นของตัวเอง ? หลายๆที่ทำงานที่ผมเคยได้ไปทำมานั้นมีการใช้ Framework เป็นของตัวเองทั้งนั้นซึ่งมีทั้งพัฒนาเองหรือไปต่อยอดจากตัวอื่นก็มีมาก (ผมทำมา 4 ที่ก่อนล่าสุดตอนนี้จะอยู่กับ Duocore พาร์ตไทม์นะครับ) แล้ว CodeIgniter ก็หยิบยื่นโอกาสง่ายที่จะสร้าง Framework ของตัวเองให้เป็นเรื่องง่าย ไม่แพ้ Zend รวมกับความเร็วที่มีอยู่และ library อันน้อยนิดทำให้ความเร็วก่อนจะโมอยู่ในผลลัพธ์ที่น่าพอใจมาก , ความเร็วในการเขียนโค้ดซึ่งใช้ได้ แต่ยังไม่เร็ว ทุกอย่างดูกลางๆไปหมดแล้วแต่คุณจะเลือกทางเดินของ Framework คุณว่าจะเดินไปทางไหน แล้วคุณจะลดอะไร?

ถ้าให้เปรียบเทียบง่ายๆถ้าใครเคยเล่นเกม Ragnarok ตอนเริ่มสร้างตัวละคร คุณต้องเลือกสักทางว่าจะ up STR แล้วต้องเสีย INT ทำนองเดียวกัน ถ้าจะสร้าง Framework ที่เน้นการเขียนโค้ดน้อยๆได้ผลลัพธ์เยอะๆ บางครั้งประสิทธิภาพมันก็อาจจะช้าก็เป็นได้ แต่สุดท้ายคุณมี “อิสระที่จะคิด จะทำได้” นี้และคือความสุดยอดของ CodeIgniter อิสระที่เพียงพอ และกรอบที่ให้พึงพาได้ วันนี้มาขายของพอแล้วอย่าลืมติดตามเรื่องราว CodeIgniter ได้จากชุมชนแห่งนี้ครับ

Codeigniter.in.th

Next Page »