แก้ไข “call_user_func_array() expects parameter 1 to be a valid callback, non-static method XXX:init() should not be called statically” ใน plugin “Jetpack for WordPress”

จากปัญหา

The following errors were reported: call_user_func_array() expects parameter 1 to be a valid callback, non-static method xxx::init() should not be called statically

ใน plugin “Jetpack for WordPress” ซึ่งเกิดจากการเขียนโค้ดไม่ตรงกับ Strict standards ใน PHP ที่อยู่ๆ ก็มีการเขียนไป call ตัว static method ใน method ที่ไม่ใช่ static ทำให้เกิดข้อผิดพลาดดังกล่าว

ปัญหานี้จะเกิดกับ Class ของ module ใน plugins “Jetpack for WordPress” ทั้งหมด 4 ตัว (ณ ตอนนี้ที่ไล่หาดู) โดยมี Class ดังต่อไปนี้

  • Jetpack_Notifications
  • Jetpack_Post_By_Email
  • Jetpack_Subscriptions
  • Jetpack_Likes

การแก้ไขก็ง่ายๆ ไม่มีอะไรซับซ้อน (ถ้าเข้าใจ)

โดยเพิ่ม “public static” ไปหน้า function &init() ให้เป็น public static function &init() ในไฟล์ subscriptions.php, post-by-email.php, notes.php และ likes.php ซึ่งอยู่ใน wp-content/plugins/jetpack/modules

เพียงแค่นี้ก็จบปัญหาครับ

เมื่อซื้อบัตรดู Manchester United จาก ThaiTicktetMajor แต่ระบบไม่รีเซตจำนวนโควต้าบัตรให้เมื่อมีข้อผิดพลาด

ระบบ ThaiTicktetMajor มีข้อผิดพลาดหรือไม่ได้คิดถึงอยู่อย่างในเรื่องของการกำหนดโควต้ากลับมาที่ค่า 0 ในตอนซื้อบัตรแล้วยกเลิกหรือมีข้อผิดพลาด

ขยายความก็คือ ถ้าบัตรการแสดงนั้นๆ มีการกำหนดโควต้าจำนวนบัตรที่ซื้อแล้วทำรายการซื้อบัตรของกิจกรรมนั้นไป แต่ถ้าเกิดเหตุการณ์ทำรายการไม่สำเร็จหรือคลิ๊กลงเลือกที่นั่งนั้นเฉยๆ แล้วยกเลิกกลับมาเลือกที่นั่งใหม่ ระบบจะยังนับว่าได้ซื้อบัตรไปตามโควต้าที่เหลืออยู่ และถ้าจะซื้อบัตรจริงๆ จะเหลือแค่ส่วนที่ยังไม่ได้กรอกจำนวนเท่านั้น

ไอ้เราตอนซื้อบัตรดู Manchester United vs Singha All Star Singha ก็งงว่าทำไมทำรายการไม่ได้ฟร่ะ เล่นซะสมัคร 3 Account กว่าจะทำรายการได้

คือตอนแรกเลือก 2,500 แล้วมันมีเหลือ 2-3 ที่มั้ง แล้วเลือกไปแล้ว ยกเลิกมาเพราะไม่พอ จะเอา 5 ใบ แต่ระบบมันไม่รีเซตค่ากลับมาค่า 0 ให้ ทำให้ซื้อ 1,500 ที่จะซื้อ 5 ใบไม่ได้ พอสมัครใหม่จะซื้อ 1,500 ที่จะเอา 5 ใบ ระบบ Payment ดันขึ้น Failed เลยกลับมาซื้อใหม่ ก็ไม่รีเซตค่ากลับมา 0 ให้เลยต้องสมัครใหม่อีกรอบ รอบนี้ซื้อผ่านเลย

นั่งงมอยู่เป้นชั่วโมง ><”

มีอะไรใหม่บ้างใน Drupal 8

จากบทความDrupal 8 is Coming เขียนโดย Alex Rayu

ผมขอสรุปสั้นๆ ว่า Drupal 8 ปรับเปลี่ยนอะไรบ้าง

  • Core CMS จะใช้การพัฒนาบน Symfony framework
  • Theme engine ใช้ Twig PHP template engine
  • รองรับ Mobile ตั้งแต่การติดตั้งเลย (HTML 5 and CSS 3) โดยไม่ต้องลง mobile mobule
  • รองรับไฟล์ media ต่างๆ โดยไม่ต้องลง media mobule
  • มีระบบ Internationalization ที่ดีกว่าเดิม ทำให้สนับสนุน multilingual ได้ดีขึ้น
  • ย้ายการตั้งค่าต่างๆ ไปใช้ CMI

ส่วนอื่นๆ คงตามได้จาก Drupal 8 Updates and How to Help ต่อไปครับ

PHP 5.3 เจ้าตายแล้ว และได้เวลา PHP 5.4 เสียที

จาก WordPress Stats จะเป็นว่า PHP 5.2 ยังมีคนใช้อยู่อีกเยอะมาก ซึ่งถูกนำมาใช้งานร่วมกับ WordPress และขณะเดียวกับ w3techs.com ก็รายงานว่า PHP 5.3 เพิ่งจะตีขนาบจนแซง PHP 5.2 ได้ในช่วงต้นปีที่ผ่านมานี้ (PHP version 5.3 is now the most used version, just ahead of 5.2)

แต่สิ่งที่อยากบอกต่อมาก็คือ PHP 5.3 นั้นได้ปล่อยตัว released ในเดือนมิถุนายน 2009 และกว่าจะได้รับความนิยมก็เกือบจะสิ้นสุดการสนับสนุนของ PHP 5.2 พอดีในเดือนธันวาคม 2010 (end-of-life cycle) ซึ่งถือว่าทำได้ค่อนข้างโอเค แต่ในตอนนี้ PHP 5.3 ได้สิ้นสุดการสนับสนุนในเดือนมีนาคม 2013 ที่ผ่านมาไปแล้ว และหลังจากสิ้นสุดการสนับสนุนของ PHP 5.3 นั้น ตัว PHP 5.4 ในตอนนี้มีสถิติคนนำไปใช้ใน production จากการเก็บสถิติของ w3techs.com นั้นมีอยู่ประมาณ 3-4% เท่านั้น และนั้นอาจทำให้เว็บไซต์มากมายอยู่บนความเสี่ยงเรื่องความปลอดภัยจากการไม่ได้รับการสนับสนุนเรื่อง security patch ของตัวภาษา PHP จาก PHP.net อีกต่อไป

2013-04-08_032329

http://w3techs.com/technologies/details/pl-php/5/all – ข้อมูล 8/4/2013

ทางแก้ไขที่ดีที่สุดคือนำโค้ดต่างๆ ที่พัฒนามาปรับแก้ไขให้ตรงตาม Migrating from PHP 5.3.x to PHP 5.4.x ของ PHP 5.4 และ upgrade production ไปใช้ PHP 5.4 ต่อไป

โลกจะพัฒนาเพราะการแข่งขันไม่ใช่การชนะแบบเบ็ดเสร็จ

ผมเคยเขียนเรื่อง WebKit != W3C ไปเมื่อหลายเดือนก่อน หลังจาก Opera หันมาใช้ WebKit ไปก่อนหน้านี้

แต่เมื่อไม่กี่วันก่อน Google ได้ fork ตัว WebKit ออกมาเป็น Blink ต่างหาก และจะถูกใส่กลับเข้ามาใน Chrome ในอนาคตอันใกล้นี้ (คาดว่าไม่เกิน 10 อาทิตย์ต่อจากนี้) โดยเหตุผลทั้งในเรื่องของความง่ายต่อการควบคุมและใส่คุณสมบัติใหม่ๆ โดยไม่ต้องรอ Apple ซึ่งเป็นเจ้าของ WebKit โดยตรงเห็นชอบทั้งหมด แม้ว่า open source community จะมีขั้นตอนและฝ่ายที่เกี่ยวข้องเยอะ แต่หลักๆ คงเป็นเจ้าของหลักหรือทีมหลักซึ่งในที่นี้คือ Apple นั้นเอง ซึ่งหลายคนไม่ทราบว่า WebKit เป็น layout engine ที่ open source โดย Apple ซึ่งจริงๆ มันเป็น layout engine ของ Safari อยู่ก่อนแล้ว

จากเหตุการณ์ทีเกิดขึ้น ผมยังยืนยันว่าการพัฒนาเว็บควรยืนตาม W3C HTML5 เป็นสำคัญ แล้วจึงปรับตาม layout engine ในแต่ละตัวในภายหลัง ซึ่งการใช้ layout engine เป็นหลักสักตัวเป็นเรื่องดี แต่ไม่ใช่ข้ออ้างในการทำเว็บเพื่อสนับสนุนเพียง layout engine เดียว เพราะนั้นทำให้คุณปิดโอกาสในการเข้าถึงและใช้งานของกลุ่มผู้ใช้อีกกลุ่มได้ง่ายมากในโลกของอินเทอร์เน็ตที่มีความหลากหลายของ layout engine ที่มากกว่าเดิมอย่างมากในตอนนี้ ความหลากหลายที่ว่านี้ไม่ใช่แค่ Desktop/Notebook Computer แต่เป็น Mobile Device ต่างๆ ที่มีความหลายหลากด้วย ซึ่ง layout engine ยุคใหม่ในตอนนี้ทุกตัวทำตามมาตรฐาน W3C HTML5 เป็นหลักอยู่แล้ว (ซึ่งจะมากน้อยว่ากันอีกที)

ส่วนตัวแล้วนั้น ตอนนี้โลกอยู่ในยุคของสงคราม Web Browser ครั้งที่ 2 อย่างไม่ต้องสงสัยอีกครั้ง ซึ่งในตอนนี้เป็นโอกาสที่ดีที่เว็บต่างๆ จะอาศัยช่วงนี้พัฒนาและใช้ความสามารถที่หลากหลายเหล่านี้ให้เป็นประโยชน์ และผมเชื่อว่ากลุ่มนักพัฒนา layout engine ต่างๆ ในตอนนี้ไม่มีทางที่จะหยุดพัฒนาและทำให้ตัวเองมีความสามารถที่ล้าหลังคนอื่นได้นานมากนัก เพราะฉะนั้นยึดตามมาตรฐานเปิดจึงดีที่สุด (นี่ผมยังไม่ได้พูดถึง JavaScript Engine ที่แข่งกันอีกส่วนเช่นกัน)

โดยในตอนนี้ 3 ค่าย layout engine หลักของโลกคือ Trident engine – Internet Explorer, Gecko engine – Firefox และ WebKit – Safari, Opera, Chrome กำลังมีการเปลี่ยนแปลงในอนาคตอันใกล้นี้ โดยมี Blink ที่จะถูกใส่ลงมาใน Chrome, Servo ที่เป็นส่วนที่ถูกพัฒนาใส่ลงใน Firefox Mobile (ยังไม่แน่ว่าจะลง Firefox ตัวหลักหรือไม่) และ WebKit2 ซึ่งจะถูกใช้ใน Safari รุ่นต่อไป ซึ่งทั้งหมดนี้กำลังเพิ่มเติมเข้ามาอีกภายในปีนี้แน่นอน

จากที่เขียนมายืดยาวนั้น ยังคงยืนยันว่านักพัฒนาเว็บไม่ควรมักง่ายเพียงเพื่อความสะดวกสบายแบบแต่ก่อนครั้งยังใช้ IE6 และเราเรียกร้องกันเหลือเกินให้ใช้และทำตามมาตรฐาน W3C และตอนนี้มาตรฐานเปิด W3C HTML5 ก็เป็นสิ่งที่กำลังไปได้ดี (แม้จะช้าบ้าง มีการเมืองบ้าง แต่ผมถือว่ามันจะมั่นคงในอนาคต) ส่วนตัวผมไม่อยากให้ WebKit กลายเป็นกรณีเดียวกับ IE6 แห่งโลก Web สมัยเก่าก่อน (ผมไหว้หล่ะ) เพราะผมเชื่อว่ามันไม่ใช่ทางออกที่ดี และยังเชื่อว่า “โลกจะพัฒนาเพราะการแข่งขันไม่ใช่การชนะแบบเบ็ดเสร็จ”