Translate

วันพุธที่ 3 กันยายน พ.ศ. 2557

เป็นตุเป็นตะกับ Lucy the Movie 2014


ตั้งแต่ต้นเรื่องที่ได้ดู ก็อดคิดไม่ได้เลยว่า ผมต้องกลับมาเขียนรีวิวถึง ด้วยมุมมองของผู้ที่ชมแล้วคนหนึ่งแน่ๆ

ด้วยตัวอย่างหนังที่คัดกรองฉากพะบู๊ มาดึงดูด ไม่แปลกใจเลยว่าจะต้องเห็นอาการส่ายหน้าของคนที่ชมหนังเรื่องนี้บ้างอย่างแน่นอน เพราะความคาดหวังของผู้ชมบางส่วนนั้นคล้อยตามไปกับหน้าหนังเสียแล้ว

หลังตีตั๋วเข้าชม บางคนอาจจะหลับคร่อก บางคนอาจจะคิดว่าก็พอกล่อมแกล้ม (แอ็คชั่นก็ไม่ได้ขี้ริ้วอะไร เทคนิคดี CGสวย) แต่บางคนอาจจะนั่งดูด้วยอาการจดจ่อ เพราะได้เสพของชอบที่ถูกคอ...แบบผม

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

...คิดอยู่เสมอว่าเราเกิดมาทำไม? 
...คิดอยู่เสมอว่าอะไรคือสารัตถะแห่งชีวิต? 
...หรือคิดอยู่เสมอว่าไอ้การที่เราตั้งกฎเกณฑ์ อย่างเลขคณิตแบบ 1+1=2 นั้น มันสำคัญอะไรกับชีวิต ที่หมายถึง "ชีวิตจริงๆ" กะนักกะหนา

หนังเรื่องนี้โดนอย่างจังกับรสนิยมของผม มีหลายคนเปรียบเทียบกับหลักศาสนาพุทธบ้าง พระเจ้าบ้าง ก็นานาจิตตัง ตามประสบการณ์รับสารของแต่ละคน ...ไม่มีถูก ไม่มีผิด

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

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

ต้นเรื่องเปรียบเปรยคนกับสัตว์ว่ามัน "ไม่ต่างกัน" ไม่ว่าจะมีระบบนิเวศน์แบบคนๆ หรือแบบสัตว์ๆ

มาประมาณกลางเรื่อง เราจะพบกับหลักใหญ่ใจความของแนวคิดที่ถูกส่งต่อ เมื่อตัวเอกหลังควบคุมอำนาจ "พิเศษ" ได้พอสมควรแล้ว เธอก็ไขว่คว้าหาคำตอบ... 

คำตอบต่อคำถามเดียวกันกับทุกๆ คน ที่ไม่มีอำนาจพิเศษก็ยังเฝ้าถาม...

...แล้วยังไงต่อล่ะ? ...ต่อไปคืออะไร? ...เราขึ้นมาอยู่ในจุดๆ นี้ได้ เพื่ออะไรกัน?

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

...แล้วจากนั้นยังไงต่อล่ะ? 

คำตอบนี้ตัวหนังไม่รีรอที่จะตอบอย่างตรงไปตรงมา โดยเปรียบเทียบกับสิ่งพื้นฐานที่สุด แบบไม่มีกลไกทางเศรษฐกิจที่มนุษย์อุปโลกน์ขึ้นเข้ามายุ่ง

ก็เผยแพร่ ถ่ายทอด แบ่งปัน ส่งต่อสรรพสิ่งที่คุณมี ไปให้แก่ผู้อื่นไง! (ความรู้ เนื้อหนัง พันธุกรรม เซลล์ นิวเคลียส ชีวิต จิตวิญญาณ ทุกๆ อย่าง)

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

เกิดขึ้น ตั้งอยู่ และดับไป 

...มันก็เป็นเช่นนั้นเอง







วันเสาร์ที่ 23 สิงหาคม พ.ศ. 2557

ความสุข และเครื่องจับความสุข


(ภูฎาน ประเทศที่ใช้ GDH มาเป็นปรัชญาในการพัฒนาประเทศ)


...เราไม่สามารถแก้ปัญหา ด้วยจิตใจระดับเดียวกันกับจิตใจที่นำเราเข้าสู่ปัญหาได้...
เข็มทิศชีวิต 2 ของ คุณฐิตินาถ ณ พัทลุง เขียนว่า ไอน์สไตน์ กล่าวข้อความนี้ไว้

อาจจะไม่เกี่ยวกับบทความนี้สักเท่าไร จริงๆ บทความนี้เกิดขึ้นเพราะได้ฟังเรื่อง GDH หรือ ตัวชี้วัดความสุขมวลรวมประชาชาติ ตัวชี้วัดที่มาแรงแซงทางโค้ง GDP

ถ้า GDP เป็นฝ่ายอธรรม GDH ก็เป็นฝ่ายธรรมะอย่างไม่ต้องสงสัย มีการเชิญชวนให้เชื่อเช่นนั้น

GDH ใช้นามธรรมอย่าง "ความสุข" มาวัดแทนรูปธรรมอย่าง "เงินตรา" ของ GDP 
มีการระบุ กลั่นกรองนามธรรม ออกมาเป็นรูปธรรม ทำเป็นตัวชี้วัด แล้วประยุกต์มันออกมาเป็นแบบสอบถาม...

ผมไม่ได้เปิดประเด็น เพื่อวิพากษ์วิจารณ์ GDH (ไม่กล้า) แค่หยิบมาเป็นหัวเรื่องเพื่อโยงมาถึงสิ่งที่ตัวเองเชื่อเท่านั้นเอง เพราะผมเชื่อว่า คนที่นอนอยู่บนที่นอนนุ่มๆ บนคอนโดสุดหรูใจกลางเมือง ไม่ได้มีความสุข หรือมีความทุกข์ มากหรือน้อยไปกว่าคนที่นอนอยู่บนกองฟางคันๆ ข้างขี้ควายเหม็นๆ กลางทุ่งนาเลย

...มาดูนิยามของความสุข ของคนที่มีทุกข์คนนี้กัน




...ความสุข เหมือนอากาศ มองไม่เห็นแต่เรารู้ว่ามีอยู่จริง
...ความสุข และความทุกข์ ไม่ใช่เหรียญแต่ละด้านของกันและกัน
...ความสุข ต้องการเครื่องยึดจับ ต้องมีสิ่งอ้างอิง ความสุขไม่เกิดขึ้นโดยตัวของมันเอง เราอาศัยสิ่งต่างๆ หรือแม้แต่มโนคติ เพื่อยึดจับความสุข ดังนั้นเมื่อสิ่งยึดจับความสุขหายไป ความสุขย่อมหายไป

อุปมาเหมือน ผมอยากได้โทรศัพท์มือถือเครื่องใหม่ เมื่อได้แล้วก็มีความสุข
ผ่านไปสักพักความสุขก็จึดจางลง เพราะโทรศัพท์ที่เคยใหม่ มันไม่ "ใหม่" อีกต่อไปแล้ว

ฉันใดก็ฉันนั้น
ดัชนีชี้วัดความสุขที่เป็นตัวเลขทั้งหลาย ชะตากรรมก็ไม่ต่างกัน

...ท่านมีเวลาอยู่กับครอบครัว...ติ๊กถูกที่ช่องมากที่สุด
...ท่านทำกิจกรรมกับครอบครัว...ติ๊กถูกที่ช่องมากที่สุด
ดัชนีความสุขเต็มร้อย และทำให้เกิด ภาพถ่ายรูปครอบครัวกอดกันกลม ยิ้มแฉ่ง โพสขึ้น Facebook เพื่อตอบสนองความต้องการลำดับที่ 3 ต่อสังคมตาม Maslow Theory ว่าด้วย Belonging Needs

...แต่ยังมีดอกจันเล็กๆ ของเครื่องจับความสุขอยู่ มันเขียนว่า
* โปรดระวังผลข้างเคียง เช่น ความทุกข์ เมื่อสิ่งที่จับยึดเปลี่ยนแปลงไป!!

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

เพราะฉะนั้น ถ้ายังอยากมีความสุขในโลกตามแบบ "คฤหัสถ์" อยู่ล่ะก็

...โปรดอ่านคำเตือนในฉลากเครื่องจับสุข ก่อนยึดจับสิ่งสร้างความสุขของคุณทุกครั้ง!!










วันศุกร์ที่ 15 สิงหาคม พ.ศ. 2557

มนุษย์...ผู้เกิดมาเพื่อขีด checklist ของพระเจ้าไปทีละข้อ จนกว่าจะตาย...


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

ช่วงเวลานี้ของครอบครัวและเครือญาติเป็นช่วงเวลาของความหดหู่ เพราะการจากไปกะทันหันของน้าชาย ญาติๆ มารวมตัวกันเพื่อจัดงานศพ ส่วนของบ้านผมมีน้าสาวมาพักอยู่ด้วย เพื่อไปงานพร้อมกับแม่



บ้านผมเป็นหมู่บ้านค่อนข้างใหญ่ ห่างจากถนนทางเข้าเยอะทีเดียว การจะออกไปถ้าไม่อยากลำบากเท่าไรก็จะรบกวน รปภ. หน้าหมู่บ้านให้เรียก taxi  ให้

การไปงานศพของน้าสาวและแม่ก็เช่นกัน หลังเตรียมตัวเสร็จสรรพ แม่ก็ให้ผมยกหูเรียก taxi กับ รปภ. กดเบอร์ได้ไม่นาน น้าสาวก็สำทับขึ้นมาว่า

"ขอ taxi ที่ดูใหม่ๆ คนขับดูไว้ใจได้หน่อยนะ"

...ถือเป็นการตั้ง requirement ที่ค่อนข้างเกินเลยจริงๆ ให้ตายเถอะ ...เพราะมันเป็นเรื่องยาก ที่จะไปบอกให้ รปภ. ขวนขวายหา taxi ที่ถูกต้อง ตรงตาม spec แบบนั้น ไม่แน่ถ้าต้องการแบบนั้นอาจจะต้องคอยกันเป็นชั่วโมงเลยทีเดียว

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

น้าสาวก็พยักหน้าหงึกหงัก ไม่ว่ากระไร

...วันต่อมา น้าสาวกับแม่ต้องไปงานศพอีก ซึ่งผมก็รู้หน้าที่ของตัวเองดี พอใกล้เวลา ผมก็จัดแจงหยิบโทรศัพท์ขึ้นมาจะโทรเรียก taxi แต่เผอิญหูได้ยินเสียงน้าสาว โทรคุยกับปลายสาย

"ค่ะ อันนี้พี่ที่นัดน้อง taxi ไว้นะคะ วันนี้มารับตามที่นัดได้ใช่มั้ย ...ห๊า! จะถึงแล้วเหรอ..." เสร็จแล้วน้าแกก็รีบวิ่งไปอาบน้ำแต่งตัว

ผมรู้ตัวแล้วว่าไม่ต้องเรียก taxi แล้ว ก็เลยสอบถามจากแม่ ได้ความว่า เมื่อวานพวกแม่เจอ taxi ที่ ...รถใหม่ ขับดี และคนขับดูน่าไว้ใจ... ก็เลยนัดหมายกันไว้ ว่าจนถึงวันสุดท้ายที่ต้องไปงานศพ ให้ taxi คันนี้มารับ มาส่งที่บ้านตามเวลาเลย

...

...เขียนมายืดยาว จริงๆ ก็เป็นการ refresh ความฝืดของการเขียนนิยายตัวเองไปด้วยในตัว แต่ประเด็นของเรื่องนี้ อยู่ที่หัวข้อที่ผมตั้ง มันไม่เกี่ยวกับว่า ผมมองโลกในแง่ร้ายขนาดไหน หลังจากที่แม่และน้าสาว ขึ้นรถ taxi ไป ผมก็นึกย้อนไปถึงคำพูดของผมที่ว่า ...เลือกไม่ได้หรอก มันแล้วแต่ดวง...

...น้ำตาผมจะไหล ผมคิดผิดไป

ผมนึกวาบถึงอะไรบางอย่างขึ้นมาได้ ก็เลยเปิดคอม เขียนบทความนี้ บทความเพื่อตอบคำถามว่า ...มนุษย์เกิดมาทำไม?

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



...คุณเกิดมาพร้อมกับสมอง เพื่อเปลี่ยนคำว่า "ทำไม่ได้" ให้เป็น "ทำได้" โดยคิดค้นกระบวนการ "ทำยังไงถึงจะได้" ขึ้นมา

แม้แต่เรื่องเล็กๆ น้อยๆ อย่างการได้รถ taxi ที่ถูกใจตัวเอง จักรวาลก็ไม่ละเว้นที่จะสร้างข้อจำกัดขึ้นมาให้เกิดขึ้นในรูปแบบเฉพาะตัว checklist การเรียก taxi ของผมยังไม่ถูกขีดฆ่า...

...แต่สำหรับ checklist ของน้าสาวผม เธอได้ขีดฆ่ารายการนั้นไปเรียบร้อยแล้วหนึ่งข้อในชีวิต

ทั้งหมดอยู่ที่ตัวคุณ ที่จะมอง checklist อันนี้ แล้วพยายามขีดฆ่ามัน หรือข้ามมันไป ปล่อยให้เป็นข้อจำกัดในชีวิตอยู่ต่อไป

...ก็เท่านั้นเอง... 


วันศุกร์ที่ 8 สิงหาคม พ.ศ. 2557

ไม่มีสิ่งใดที่สามารถหยุดอยู่กับที่ได้...



ไม่มีสิ่งใดที่สามารถหยุดอยู่กับที่ได้... 


เข็มนาฬิกาทั่วไปมีสามเข็ม เข็มวินาที(เดินเร็ว) เข็มนาที(เดินปานกลาง) เข็มสั้น(เดินช้า) ช่วงชีวิตไหนจะเลือกเดินตามเข็มแบบไหน ขึ้นอยู่กับตัวเองจะพิจารณาถึงความเหมาะสม โอกาส จังหวะ สิ่งแวดล้อม ดวง กำลังกาย ปัญญา...

แต่สิ่งที่แน่นอนที่สุดคือ หยุดไม่ได้ จะอยู่เฉยๆ ไม่ได้ จะใช้วันเวลาให้ผ่านไปโดยไม่พัฒนาตัวเอง แม้เพียงสักเล็กน้อย ไม่ว่าจะด้านใด ไม่ได้เด็ดขาด จะหยุดเรียนรู้โลก และสิ่งที่พัฒนาเปลี่ยนแปลงตามกาลเวลา...ไม่ได้

เส้นกราฟการพัฒนาจะค่อยๆ ลาดไปบรรจบกับศูนย์ เมื่อกายกำลังจะแตกดับลง...
ฉันใดก็ฉันนั้น คนที่หยุดการพัฒนา ปฏิเสธการพัฒนา เปลี่ยนแปลง คือ คนที่ค่อยๆ ทำตัวเองให้ตายลงอย่างช้าๆ


วันจันทร์ที่ 28 เมษายน พ.ศ. 2557

บินไปกับ Phalcon ...PHP Framework ที่เคลมตัวเองว่า...เร็วส์...แรงส์



ตั้งแต่ผมเขียน PHP มา และได้ผันตัวเองมาเริ่มใช้ Framework ได้ประมาณ 4 ปี ผมก็หลงรัก และติดใจกับ Codeigniter มาตลอด เพราะความที่เริ่มต้นได้เร็ว ง่าย และต่อยอดได้หลากหลาย มีอยู่เหมือนกันที่ไปศึกษา Framework อื่นๆ ที่เป็นรูปแบบ MVC เหมือนกันอย่าง Yii หรือ Laravel แต่ก็เป็นเพียงช่วงสั้นๆ แม้จะได้ลองเขียน และใช้งานจริง (งานที่รับทำฟรีแลนซ์ ส่วนใหญ่ไม่ใช่ Yii ก็ Codeigniter) อยู่บ้าง แต่ก็ไม่ได้เปลี่ยนใจจากความชื่นชมใน Codeigniter ไปใช้อย่างอื่นแต่อย่างใด

ผมได้ยินชื่อ Phalcon มาประมาณระยะหนึ่งแล้ว จากเว็บและหลายๆ แหล่ง ที่ยังไม่ได้ไปหาข้อมูล หรือลองเล่น เพราะไม่คิดจะเปลี่ยนว่าจะต้องเปลี่ยนใจไปจาก CI เพราะปัจจุบันก็ยังทำงานได้อยู่ แม้ว่า CI เองจะเริ่มตายลงก็ตาม (ผมอ้างอิงจาก Laravel นะ แต่เห็นเขาก็ยังไปของเขาเรื่อยๆ และ CI ก็เป็นจุดเริ่มต้นที่ดีในการเริ่มเขียน PHP แบบใช้ pattern MVC)

จากการตามดู First Commit ที่ Github ก็เดาว่า Phalcon ถือกำเนิดประมาณช่วงมกราคม ปี 2012 โดยคุณ andresgutierrez (เข้าใจว่าเป็นนามแฝงนะ)


จากนั้น Phalcon ก็ขยายตัวมาตลอด มีนักพัฒนาจากทั่วโลก มาร่วมด้วยช่วยกัน (อาจจะไม่ใหญ่เท่า CI) ทั้งทดสอบ แก้บั๊ก และเพิ่มเติม code เพราะอานุภาพแห่ง License แบบ New BSD License นั้นเอง

เมื่อ 2 ปีก่อน (2012) ผมเองก็ประสบปัญหาที่เกี่ยวข้องกับ performance ของ PHP เช่นกัน เพราะด้วยทรัพยากรด้าน hardware ที่จำกัด คือ นอกจากเป็น VM ware แล้ว ยังจำกัด Resource ด้วย ทำให้ผมต้องพยายามหาวิธีสารพัด เพื่อเพิ่มความเร็วของการใช้งาน ที่จะเพิ่มขึ้นอย่างสูงในช่วงระยะเวลาหนึ่ง ช่วงนั้นเป็นอะไรที่เก็บเกี่ยวความรู้ในการเขียน Code อย่างมาก Coding แบบไหนที่น่าจะทำให้ลด Header ของการเรียกใช้งาน ผมก็พยายามปรับวิธีการเขียนใหม่ เช่น ใช้ loop น้อยลง ใช้ตัวแปรน้อยลง ลด else block ที่ไม่จำเป็นลง หรือแม้กระทั่ง ใช้ single quote แทน double quote ในการใช้ตัวแปรแบบ string เพียวๆ

แต่นั่นก็เป็นส่วนเล็กๆ ที่ผมทำ กับ server เล็กๆ จุดๆ หนึ่งบนโลก ...ขณะเดียวกันนั้น ก็มีคนที่คิดว่าจะเพิ่ม Performance ของ PHP ขึ้นเช่นกัน แต่เขาใช้วิธีเปลี่ยนไปใช้ Framework ที่เป็น extension พิเศษเฉพาะที่เขียนด้วย C เสียเลย ซึ่งเป็นการแก้ปัญหาที่ตรงจุดกว่า เนื่องจากอย่างที่เรารู้กันอยู่ว่า PHP ที่เราใช้งานกันอยู่นั้น เป็นภาษาโปรแกรมแบบ Interpreted เหมือน Basic สมัยก่อน มันก็เพิ่มขั้นตอนในการแปลขึ้นมาอีกขั้นกว่าจะไปเป็นภาษาเครื่อง ตรงจุดนี้ก็ทำให้ Performance ลดลงได้ เมื่อเปลี่ยนมาเป็น Compile คำสั่งต่างๆ ของ Framework เสียก่อนเลย การใช้งานก็น่าจะเร็วขึ้นโข ...ใช่มั้ยล่ะ



ถ้าคุณเขาไปที่เว็บไซต์ http://phalconphp.com คุณจะพบกับตารางเปรียบเทียบนี้ ผมก็ไม่รู้ว่าถ้าเทียบกับ Yii จะเป็นยังไงเหมือนกัน และทำไมเขาไม่ลองเทียบออกมาดู (หรือว่าความเร็วก็ได้ใกล้ๆ กันก็ไม่รู้ เลยเอามาโชว์ไม่ได้) เรื่องความเร็วที่เพิ่มขึ้น สำหรับเว็บไซต์เล็กๆ น้อย ที่คนเข้าพร้อมกันประมาณ 50-100 คนต่อวินาที แล้ว อาจจะไม่ต่างกันเท่าไรนัก แต่ถ้าปริมาณของ user เยอะกว่านั้นล่ะ? ปัญหาความ "หน่วง" นี้จะเริ่มปรากฎให้เห็นเด่นชัดขึ้นทันที

เกริ่นมาสารพัด วันนี้มีข้อแนะนำในการติดตั้ง Phalcon นิดหน่อย ซึ่งภายในเว็บเขามีบอกอยู่แล้วล่ะ แถมยังมีภาษาไทยด้วยนะ http://phalconphp.com/th 

ผมใช้ xampp 1.8.3 ; PHP 5.5.6 ซึ่งทาง phalcon เขาบอกว่า ยิ่งใหม่ก็ยิ่งดีนะมีปัญหาตอนลง phalcon นิดหน่อยก็เรื่อง load ผิดไฟล์มา ถึงแม้เครื่องผมจะใช้ windows 64 บิต แต่ทาง xampp ยังเป็น 32 บิตอยู่ ก็ต้อง download ตัว 32 บิตมา และต้องเลือกด้วยว่า เวอร์ชั่น xampp ของเราที่เรา Download มานั้น เป็น non thread safe (NTS) หรือ thread safe (TS) (ถ้าสงสัยเรื่อง NTS กับ TS ตามไปดูที่นี่น่าจะเข้าใจ http://stackoverflow.com/questions/1623914/what-is-thread-safe-or-non-thread-safe-in-php )

ของผมโหลดแบบ TS มา ก็ต้องใช้ phalcon แบบ TS ครับ
1. ตอนแรกจะเป็น zip ไฟล์ แตกออกมาจะเป็น phalcon.dll
2. เอาไปใส่ไว้ใน /php/ext ที่ใช้งาน อย่างถ้าใช้ xampp เหมือนกัน ก็ใส่ที่ /xampp/php/ext จากนั้นก็ไปเพิ่มการเรียก extension เพิ่มเติมที่ไฟล์ /xampp/php/php.ini ตามนี้
extension=phalcon.dll
เพิ่มไว้ที่บรรทัดต่อจาก extension บรรทัดสุดท้ายก็ได้ครับ
3. จากนั้น Restart apache ใหม่เมื่อไปดูที่ phpinfo.php แล้วถ้า find หาคำว่า phalcon เจอ ก็พร้อมใช้งานแล้วครับ

เดี๋ยวลองใช้แล้วจะเอา concept การใช้งานมาลงก็แล้วกัน แต่เดี๋ยวนี้ programmer มีอะไรก็ควรไปที่ stackoverflow.com นะครับ ลองหาดูว่ามีคนติดแบบเดียวกันหรือเปล่า ช่วยได้เยอะจนจบโปรเจ็คเลยทีเดียวล่ะ ^_^


วันอังคารที่ 22 เมษายน พ.ศ. 2557

พัฒนาเกม RPG บน android ด้วย AndEngine (3)

นานโขที่ไม่ได้ update blog ส่วนตัวเลย พับผ่าสิ!!

วันนี้กลับมามองที่ บทความ การพัฒนาเกม RPG ที่ค้างเอาไว้ ก็คิดว่ายังมีน้องๆ หรือผู้เริ่มศึกษา android อีกหลายต่อหลายคนที่ต้องการ code ในการนำไปเป็นต้นแบบ เพื่อศึกษาหรือต่อยอดต่อไป

เพราะฉะนั้น ^_^ มาต่อกันเลยครับ...

ตอนที่ 3 นี่ ผมจะไม่พูดพล่ามทำเพลงมาก เอารูปเมื่อทำเสร็จแล้วมาให้ดูกันอีกรอบดีกว่า ว่าหน้าตาจะเป็นยังไง จะได้เป็นกำลังใจสำหรับคนที่เพิ่งเปิดเข้ามาดูเป็นครั้งแรกครับ บอกไว้ก่อนว่า ตอนที่ 3 นี้ ผมแจก code ที่สามารถ run แล้วได้ผลลัพธ์ตามภาพข้างล่างนี้ครับ




มีการควบคุมดังนี้ครับ
  • ถ้าเดินไปด้วยแล้วกดปุ่มสี่ฟ้า หน้าปุ่มสีฟ้าจะเปลี่ยน แล้วตัวละครหญิงจะเดินเร็วขึ้น สังเกตค่าที่ B button:speed ครับ จะเพิ่มหรือลดลง
  • ตรงคำว่า "แม่น้ำนั้น" ผมใช้ test การแสดงผลภาษาไทย อันนี้ได้ 100% และ x กับ y ก็คือ ตำแหน่ง Position x,y ที่ตัวละครเรากำลังอ้างอิงอยู่
  • กดปุ่มสี่แดงจะเหมือนกับเป็นปุ่ม action
  • การเล่นเบื้องต้น ก็ควบคุมตัวละครเดินไปพูดคุยกับ UPC ต่างๆ ดูครับ โดยให้ลองไปคุยกับสองตัวที่อยู่ 2 ตำแหน่งตามรูปด้านบนดู นอกนั้นถ้าไปคุยกับคนอื่น จะมีแค่ ... แสดงออกมา


...ดูไม่มีอะไรมาก แต่ก็น่าจะเป็นการเริ่มต้นที่ดีของใครหลายๆ คนสำหรับ เกม RPG บน android นะครับ ส่วนอันนี้ Source Code ครับ รับรองว่า ไม่มี code ส่วนไหน ส่งข้อมูลอะไรไปที่ไหนแปลกๆ แน่นอน ปลอดภัย 100% ครับ (ให้ load เฉพาะจาก github ของผมนะ อย่าไปเอาจากคนอื่นที่ folked ไป ไม่รับประกัน)

source code ครับ : https://github.com/pilotpol/classicrpg2
* หมายเหตุนิดหน่อยครับ ตัว map นี้ผมได้ดัดแปลงตัว library ของ andengine นิดหน่อย เพื่อให้ทำการอ่านค่า layers ของ map ได้หลากหลายมากขึ้นนะครับ เพราะการสร้างเกม RPG ในแบบของผมจะเน้นให้เขียน event ไว้ที่ map โดยตรงครับ


หลังจาก clone git repo มาลงเครื่องแล้ว ก็จะเห็น source code ทั้งหมด เอาไปสร้าง project ตามที่เคยบอกไว้ในตอนก่อนๆ นะครับ แล้วลองรันดู ปุ่มต่างๆ มีคำอธิบายดังนี้ครับ

ตัว control - ตัวนี้โดยปกติทั่วไปแล้ว จะแยกเป็น 2 ส่วน คือ ส่วนฐาน กับ ส่วนที่เป็นจอยสติ๊ก ใน project ของผม ผมทำส่วนที่เป็นจอยสติ๊กเป็นโปร่งใสไว้ ก็เลยจะไม่เห็น (ส่วนตัวชอบเห็นฐานอย่างเดียว) ซึ่งเพื่อนๆ พี่ๆ น้องๆ ที่ clone repo ไป สามารถไปดัดแปลงรูปตามใจชอบได้เลยที่ assets/gfx/ ครับ

...มาเริ่มกันเลย...^_^
ตอนนี้จะพูดถึงเรื่อง map ก่อนครับ
เนื่องจากเป็นเกม RPG ซึ่งแนวคิดคือ จะเป็นฉากๆ ไปเรื่อยๆ และในฉากจะมีตัวละคร ดังนั้นแนวคิดที่ผมวางไว้สำหรับ Project นี้คือ การเอาพวก event ต่างๆ ที่จะเกิดขึ้นไปใส่ไว้ใน map เพื่อที่ว่าหากมีการเปลี่ยนแปลงแก้ไข ก็ทำได้เลยที่ map ไม่ต้องยุ่งกับ code ทำเสร็จก็ build ข้อดีคือสามารถทำงานเป็นทีมได้ในอนาคตครับ

ก่อนจะแก้ไข map ใน project ทุกคนต้องมี โปรแกรม Tiled ก่อนนะครับ หาโหลดได้ฟรี จากที่นี่ครับ http://www.mapeditor.org/ ต้องขอบคุณทีมงานคุณ Thorbjørn Lindeijer ด้วยครับ ใครมีสตางค์ หรือคิดจะทำเกมขึ้น Play Store จริงๆ จังๆ ก็ Donate ให้เขาหน่อยนะครับ

เปิดโปรแกรม Tilted ขึ้นมาครับ แล้วเปิดไฟล์ desert.tmx ซึ่งอยู่ใน /assets/tmx/ ครับ

เมื่อเปิดแล้วจะมีหน้าตาแบบด้านล่าง
อันนี้ด้านซ้าย

อันนี้ด้านขวา ถ้าใครไม่เป็นแบบนี้ลองดู tab เลือกที่ layers นะครับ

จากรูปจะเห็นว่าที่ด้านซ้ายของจอ มีสี่เหลี่ยมที่เขียนว่า origin อยู่ อันนั้นเป็นตำแหน่งเริ่มต้นของตัวละคร ซึ่งข้อมูลที่อยู่ใน map นี้ก็ต้องสัมพันธ์กับฝั่ง Code ที่เขียนด้วยนะครับ โดยความสัมพันธ์ทั้งหลายจะอยู่ใน function readMapObjects ที่บรรทัด 466 ครับ ซึ่งจะอธิบายต่อทีหลัง

การสร้าง map ก็ง่ายๆ ถ้าใครเคยเล่นตัว rpgmaker มาก่อนแล้ว อันนี้ก็แนวคิดเดียวกันครับ โดยเลือกขนาดแผนที่ เอาเมาส์เลือกรูปที่กรอบด้านขวาล่าง แล้วมาระบายในกรอบใหญ่ด้านซ้าย

ให้คลิกที่ objects ครับ หน้ากรอบด้านขวาบนจะเปลี่ยนเป็นแบบนี้

อธิบายตามแผนที่เลยครับ ในขั้นต้นนี้แผนที่เราจะมีตัวละครอยู่ 2 แบบ คือ 
  1. UPC จะเป็นหุ่นที่อยู่นิ่งๆ (ก็ขยับแบบยืนอยู่กับที่นะครับ แต่ยังไม่ให้เดินไปไหน) และ
  2. Player ตัวละคร ที่เราสามารถบังคับไปไหนมาไหนได้บนแผนที่ครับ
ถ้า ดับเบิ้ลคลิกดูที่ player ตามรูปด้านบน จะเห็นมี property "origin" โผล่ขึ้นมาครับ อันนี้คือ สี่เหลี่ยมที่เรากำหนดไว้ตอนแรกนั้นเอง ใน code จะอ่านค่าพวกนี้แล้วนำไปแสดงผลตามที่ตั้งไว้ครับ

ลองดูที่ upc กันบ้าง เยอะแยะเลยทีเดียว

จะเห็นว่ามี properties หลายตัว มี man1,man2, man3 ... (ต่อไปจากนั้น ผมขี้เกียจเปลี่ยนชื่อครับ ถ้าจะให้ดี ควรเปลี่ยนชื่อให้ตรงกับตัว UPC ที่วางไว้ด้วยนะครับ)

ทีนี้ลองมาดูที่เหลืออีกอันครับ walkable

จะเห็นว่ามีว่างๆ อยู่ ตรงพวกนั้นก็คือ wall ครับ เป็นส่วนที่ไม่ให้ player เราเดินผ่าน ที่ว่างๆ คือ ผมขี้เกียจใส่ชื่ออีกเช่นเดิม จริงๆ ควรใส่นะครับ

ลองไปที่กรอบขวาครับ เลื่อนไปหาตำแหน่งตามรูปด้านล่าง แล้วดับเบิ้ลคลิกดู จะเห็นหน้าต่าง property ขึ้นมา



อันนี้คือ กำหนดชื่อว่า wall โดยมี property 1 ตัว ชื่อ walk มีค่า no ซึ่ง object อย่าง UPC ก็มี property เหมือนกันครับ
*หมายเหตุอีกครั้งนะครับ อันนี้ไม่ใช้มาตรฐานกลางใดๆ เป็นการตั้งมาตรฐานขึ้นมาใช้เองด้วยของผม เพราะฉะนั้นทุกคนจะเปลี่ยนค่าใดๆ ต้องดูให้สัมพันธ์กับ code ด้วยครับ

ลองเลื่อนแผนที่ไปทางขวาจะเห็นกรอบสี่เหลี่ยมที่เป็น object UPC ดังรูป ดับเบิ้ลคลิกตัวที่ยื่นออกมาจากแถวดูครับ


สำหรับตัว UPC ตัวนี้พิเศษกว่าตัวอื่นๆ คือจะมีคำพูดโต้ตอบกับ player เราด้วย ดังตัวอย่าง ใช้ Name ว่า talk นะครับ ลองเปลี่ยนคำพูดเป็นคำอื่น แล้ว save จากนั้นไป build โปรเจ็คใหม่ดู (refresh project ก่อนนะครับ) จะเห็นว่า แอพฯ ที่สร้างขึ้นใหม่ ถ้าผู้หญิงเดินไปพูดกับ UPC คนนี้ คำพูดก็จะเป็นตามที่คุณๆ เปลี่ยนกันไปครับ

ภาษาไทยก็เช่นกัน พิมพ์ลงไปตรงๆ ได้เลย อ่านออก ^_^ แบบนี้ก็ทำเกม RPG ภาษาไทยได้สบายแฮ
ตัว UPC อยู่ตรงขวาล่างครับ

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

บรรทัดที่ 472 ของไฟล์ Testgame.java นะครับ จะมี เงื่อนไขอยู่ดังนี้
if (group.getTMXObjectGroupProperties().containsTMXProperty("walk","no"))
ก็คือ ถ้า property walk = no แล้วล่ะก็ ให้ทำตาม code ที่อยู่ใน block ด้านล่างของ if นี้ครับ code ใน block นี้เป็นการ กั้นไม่ให้ตัว player สามารถเดินผ่านได้ โดยใช้ PhysicsFactory ของ 2Dbox เข้าช่วยในการตรวจจับ collision (การปะทะกันของ 2 objects )ครับ

เช่นกันกับ if block อันอื่นครับ ด้านล่างนี้เป็นจุดเริ่มต้นของ player

if (group.getTMXObjectGroupProperties().containsTMXProperty("player", "start"))
ตำแหน่งที่มีชื่อว่า origin นั่นแหละครับ ตัวต่อมาครับ หน้าที่ของ UPC
if (group.getTMXObjectGroupProperties().containsTMXProperty("upc","upc"))
อันนี้จะต้องลงลึกนอกเหนือจากชื่อ layers หน่อย ซึ่งพอมาถึง if ตัวนี้ โปรแกรมจะ loop แล้วตรวจลึกลงไปอีกชั้นว่า ใน TMXProperty ที่ชื่อ upc มี properties ย่อย ทำหน้าที่อะไรอยู่บ้าง และจะให้ทำอะไร อธิบายได้ตาม code ดังนี้ครับ

ใน for loop block จะหาค่า property ที่ชื่อว่า image โดยเทียบดูว่ามีค่าตรงกันกับคำว่า hero หรือเปล่า (ใน if นี่จะคืนค่า true นะครับ

if (object.getTMXObjectProperties().containsTMXProperty("image", "hero"))
ซึ่งก็คือ พวก upc ที่เราใส่ค่าไปใน map นั่นเอง แล้วถ้าใช่ล่ะ ก็ทำสิ่งด้านล่างต่อครับ

Upc hero = new Upc("player.png", object.getX(),
object.getY(), this, scene, this.mPhysicsWorld,
SPEED);
hero.setDirection(2);
hero.setTalk(object.getTMXObjectProperties()
.getValuefromName("talk"));
UPChandle.add(hero); 

  • สร้าง object ใหม่คือ UPC (ตัว object อันนี้คือ ไฟล์ UPC.java ที่มีอยู่ครับ ลองศึกษา code หรือปรับเปลี่ยนเพิ่มเติม เพื่อเพิ่มความสามารถให้กับ UPC ได้)
  • จากนั้นตั้งว่าตัว UPC ตัวนี้จะให้หันไปด้านไหน (ก็เปลี่ยน code เป็น random ไปได้นะครับ)
  • setTalk โดยดึงเอา property ที่มีชื่อว่า talk จาก map มา add เข้าไว้ครับ นั่นคือ ถ้าตัวละครเดินมาแล้วผู้เล่นกด a button (ปุ่มสีแดง) ก็จะแสดง คำพูดที่มุมบนด้านซ้ายของจอ ตามที่ตั้งไว้ใน map ครับ
  • สุดท้ายก็ add ตัวละครนี้ ลงไปใน UPChandle ซึ่งทำหน้าในการ draw UPC ทั้งหมดทั้งปวง เข้าไปวางไว้ในแผนที่ครับ

คงจะพอแค่นี้ก่อน สำหรับบทความนี้นะครับ ดูจะ hardcord มากไปหรือเปล่าเนี่ย code เริ่มเยอะ 

เดี๋ยวผมจะมาต่อในบทความหน้า แต่ยังไงก็ลองแก้ไข และปรับเปลี่ยนทั้ง 2 ฝั่งดูได้ตามใจชอบเลยนะครับ เพื่อศึกษาว่า code ไล่ตรงไหน เป็นไปอย่างไร จะได้เข้าใจ code มากยิ่งขึ้นครับ

จบบทความนี้ ผู้ที่สนใจจะสร้างเกม RPG บน android ทั้งหลาย คงมีไอเดียว่าจะทำยังไงได้มากขึ้นนะครับ แต่ก็ยังเหลืออีกเยอะ ทั้งใส่เสียง ใส่ effect บลา...บลา...บลา... ใครคิดจะทำจริงๆ จังๆ อาจจะต้องหาทีมเพิ่มเติม

...หรือไม่ ค้นหาเอาได้จาก google ครับ ผมเองก็เริ่มจากตรงนั้น จนมาแจก code ให้ทุกท่านได้นี่ก็ยังใช้ google ช่วยในสิ่งที่ติดขัดทุกครั้งครับ

ขอให้สนุกกับการเขียนเกม RPG ครับ...