News

รีวิวจากน้องๆ ที่มาแข่งขันในงาน

บทความนี้เป็นบทความที่เขียนขึ้นในบล็อกของน้องพลรวี ประเสริฐสม จากโรงเรียนสาธิตมหาวิทยาลัย
ศรีนครินทรวิโรฒ ปทุมวัน ซึ่งน้องได้มาแข่งขันพัฒนาเว็บไซต์ด้วย PHP และ AJAX ในงานเปิดบ้าน
ไอทีลาดกระบัง 31 สิงหาคมที่ผ่านมา โดยน้องพลรวีได้รับรางวัลชนะเลิศจากการแข่งขันครั้งนี้ด้วยครับ
ต้องขอขอบคุณน้องด้วยที่อนุญาตให้เรานำบันทึกนี้มาเผยแพร่ หวังว่าจะเป็นประโยชน์กับน้องๆ ที่จะมา
แข่งขันกันในปีต่อๆ ไปครับ

ITKMITL PHP & AJAX Competition 2012

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

ไปแข่งเมื่อวันศุกร์ที่ผ่านมาโดยมีวินกับอ้น ไปเป็นเพื่อน (ในหมวดเดียวกัน) มีมนัสวินไป (ในหมวด
Security) เค้าให้ไปได้ทีมละไม่เกินสองคน (จากหนึ่งโรงเรียน) เราฉายเดี่ยวครับ… เหตุผลที่
ฉายเดี่ยวคือ: หาคนไปด้วยไม่ได้

บอกตรงๆเกิดมาไม่เคยมีความคิดที่จะฟิตซ้อมเขียนโค้ดเลยครับ เป็นครั้งแรกในชีวิตเลยสำหรับ
การไปครั้งนี้และฟิตไปก่อนแข่ง ปีที่แล้วคิดว่าชิวเราก็บึ้มไปแล้วครั้งหนึ่ง ปีนี้ฝึกไปประมาณ 5 ครั้ง
ได้ครับ เกือบทุกครั้งจะเขียน Login+Register ก่อน 1 รอบ แล้วค่อยเริ่มทำอะไรที่อยากทำ ที่ฝึก
ไปจริงๆมีแค่ Panda Chat lnw (ปีที่แล้ว) E-Auction (ประมูลออนไลน์ อันนี้ไม่สมบูรณ์เท่าไรด้วย)
และ AJAX Login ดีที่ทำ E-Auction ไปครับเพราะได้ฝึก $_FILES ซึ่งปีนี้มันต้องใช้ (แต่ก็พลาด
เยอะอยู่ดี)

วันแข่ง

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

ออกจากคอนโดถึงที่แข่งขัน 7 โมงปรากฏว่าเช้าไป… (มันรายงานตัว 8 โมงครึ่ง) เดินไปเดินมาเมาไป
เมามารอจนเจอวินกับอ้นก็เข้าไปเสวนาแล้วก็เดินเล่นนิดๆ หน่อยๆ จนได้ลงทะเบียนบลาๆ เจอมนัสวิน
แว่บนึงแล้วเราก็เข้าไปในห้องประหาร (?) นั่นคือห้องแข่ง

เปิดมาพี่เค้าก็ประกาศกติกาบลาๆ (ช่วงแรกๆ จะรู้หมดแล้วจากการอ่านรายละเอียดก่อนแข่ง) พอมา
ถึงพูดเรื่องคำถาม อ่าวเฮ้ย… แม่งมี 2 ส่วน ส่วนที่ 1 ให้ทำแยกกัน.. คือทำเดี่ยวนั่นเอง ให้ทำฟอร์ม
ล็อกอินและรีจิสเตอร์ใน 1 ชั่วโมง (เราแอบเฮ้เพราะว่า Every day I’m practicing that.) แล้วก็
เอาของคนใดคนหนึ่งในทีมมาพัฒนาต่อในส่วนที่ 2

ทำแยกกัน !!

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

อธิบายจบ เปิดโจทย์มา สิ่งที่เค้าให้เขียนคือ… Pantagram (หรือ Panstragram หรืออะไรไม่รู้
แหละเพราะมันสะกดไม่ค่อยเหมือนกัน) ครับ…. มันคือ Instagram Clone นั่นเอง แต่มันโดน
Simplify + มันอยู่บนเว็บอย่างเดียวแค่นั้น เราก็ไม่รอช้าครับทันทีืที่รู้ว่าเป็น Login เราก็เริ่มตามที่
เราเคยทำหมดเลย

ทีนี้จุดที่มันต่างกับที่ฝึกๆมาคือมันบังคับให้มีการอัพโหลด Avatar ตอนสมัคร ซึ่งในโจทย์เขียนว่า
“บันทึกข้อมูลลงฐานข้อมูล” เราก็ไม่แน่ใจว่าไอ้เนี่ยจะให้เราเก็บเป็น Binary (BLOB – MEDIUMBLOB)
ในฐานข้อมูลเลย หรือว่าจะให้เก็บเป็นไฟล์เลยยกมือถาม ได้ความว่าให้เก็บเป็นไฟล์ภาพ เราก็เขียน
ไปเรื่อย Time flies สุดท้ายเราก็เขียนได้เกือบ 100% ข้อผิดพลาด (ทั้งเจอก่อนและเจอหลัง) มีดังนี้

- เรารู้ว่า String ภาษาไทยมันต้องใช้ mb_strlen ถึงจะนับอักษรไทยเป็น 1 แต่ความดวกส์คือ
เราลืมไปว่ามันต้อง mb_strlen($text,”UTF-8″) — ที่ทำตัวเอียงคือไม่ได้ใส่ไปตอนส่งส่วนที่ 1

- เขียน SQL Query พลาดทำให้อัพไฟล์ไม่สำเร็จ TT_TT

- เก็บ Image Extension โดยการ substr($_FILES['reg_file']['name'],-3) ซึ่งถ้ามันเป็น .jpeg
จะไม่ได้ (อันนี้เราควรจะ escapeAll(end(explode(‘.’,$fname))); มากกว่า แต่เราคิดไม่ออก
ตอนทำเอาเร็วอย่างเดียวเลยได้เป็นแค่้ substr มา)

- Login มันไม่ Throw error ใดๆ ถ้าไม่สำเร็จ…

หลังจากส่วนที่ 1 ไปเราก็เริ่มรู้สึกเหมือนอุลตร้าแมนอยู่บนโลกเกือบ 3 นาที พลังงานแม่งหายไปไหน
หมดไม่รู้ เขียนๆ ไปเกิดมาทำบั๊กเล็กบั๊กน้อยเลยไม่ productive เท่าที่ควร สุดท้ายเสร็จแค่ Upload
Form, Logout, Timeline (+AJAX นิดหน่อย) จริงๆควรจะได้ Timeline เยอะกว่านี้ เป็นอะไรที่เศร้ามาก
ตอนทำเสร็จ คิดในใจว่ากูำไม่น่าเลย…. (จริงๆนะ) รายละเอียดเกี่ยวกับส่วนที่ส่งเพิ่มเติมก็ตามนี้
(ก็อปมาจาก FB Post ตัวเอง)

ส่วนที่ 2… เขียน Timeline+Upload+Edit Profile+View Profile+บลาๆๆๆ ภายใน 2 ชั่วโมง คนเดียว
ไม่มีทางที่จะทำทัน แค่ Timeline ทำคนเดียวเราว่าเราใช้เวลา 2 ชั่วโมงอะ (เป็นครั้งแรกที่เล่นกับ JSON
แบบละเอียดด้วย ยังเมาๆ อยู่) สุดท้ายเราก็เลยทำเสร็จแต่หน้า Upload กับหน้า Timeline + AJAX
เปลี่ยนหน้ารูปได้นิดหน่อย (งงเหมือนกันว่าเราเสียเวลาไปกับอะไรเยอะแยะ…) แล้วก็ทำฐานข้อมูล ซึ่ง
พลาดมากตรงที่เมาตั้งพวกคำที่เป็นคำสั่งเป็นชื่อ col -_- แอบเสียดายว่าจริงๆ ตัวเองน่าจะเขียน
Timeline ได้เยอะกว่านี้ ตอนเขียนก็ตะกุกตะกัก เสียเวลาแก้บั๊กเล็กๆน้อยๆเยอะมาก ฝึก SQL ไปไม่พอ
จริงๆ น่ะแหละ แล้วก็เคยเขียน $_FILES มาแค่สองครั้งในชีวิต

พรีเซนต์ช่วงบ่าย

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

หลังจากนั้นไม่นานเราก็ได้คุยกับมนัสวินที่โผล่มาสักพักทั้งสองก็กลับมาพร้อมกับคำกล่าวว่า
“นั่ง debug สดๆ หน้ากรรมการเลย” และตามมาด้วย “โดนกรรมการพูดว่า ‘ที่ถามเนี่ย คือหาที่
ให้คะแนนอยู่’” << เหมือนเราปีที่แล้วเป๊ะๆ

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

แข่งเสร็จก็นั่งว่างคุยกับมนัสวิน จากนั้นวินก็ไปอยู่ห้องแข่งเขียน App Windows 8 เรากับอ้นก็เลย
ไปเดินเล่น จบลงที่ไปฟังบรรยายช่วงท้ายของหัวข้อ “ไอที Make Money ได้อย่างไร” และต่อด้วย
ฟังโต้วาที IT รอบชิงชนะเลิศ หัวข้อ “โลกออนไลน์ดีกว่าโลกจริง” ฝ่ายค้านเงิบมากคือ “คุณครับ
เซลล์สืบพันธุ์ไม่ได้วิ่งผ่านสาย LAN นะครับ” พอจบก็ได้แชมป์เลยซึ่งแน่นอนว่าเป็นฝ่ายโลกจริง
(สวนกุหลาบ) คือหัวข้อมันก็ทำให้โลกจริงได้เปรียบอยู่แล้วด้วยน่ะนะครับ

ประกาศรางวัล

จบโต้วาทีปุ๊บต่อด้วยการประกาศรางวัลทันที ตอนประกาศตื่นเต้นมากเมื่่อได้ยินว่าทีม echo (ของวิน
กับอ้น) ได้ัรางวัลชมเชย แสดงว่าเราก็มีหวังขึ้นมาบ้าง จากนั้นประกาศต่อมาไม่ใช่เรา หมดหวังเลย
ทีเดียว เพราะไม่คิดว่าจะได้ที่ 1… แล้วพอประกาศที่ 1 แทบกรี๊ดพร้อมกับคิดว่า… กูได้ได้ไงวะ…

เนื่องจากโจทย์มันโหดร้ายมาก ก็เลยไม่มีใครทำเสร็จเลย (แต่ถ้ามนัสวินอาจจะเกิดปาฏิหาริย์…)
และที่เราว่าเราเน่าแล้วปีนี้ ตอนนี้ประกาศผลมาเราได้ 67.5/100 ห่างกับที่ 2 30.45 คะแนน อีก
นิดเดียวก็ได้ 70 แล้ว (แต่ช่างมันเถอะนะ 555 ทำไม่เสร็จได้เท่านี้ก็บุญแล้ว แต่แอบเสียดายประมาณ
ว่าทำ Interface เพิ่มอีกนิดก็ได้แล้ว) เดาว่าส่วนที่ 1 ช่วยไว้เยอะ (มากๆ) ไม่ได้โควต้าเพราะ
คะแนนรวมไม่ถึง 80%

สรุป

ปีหน้าโจทย์อย่าโหดเท่านี้อีกเลยนะ คือมันไม่ได้ยากอะไรนักหนาหรอก แต่มันต้องใช้เวลา orz
Panda Chat lnw ง่ายกว่าอีกบอกตรงๆ ครับ

Note to self

จากการไปแข่งครั้งนี้ (แก้จุดที่เสียเวลา)

- ศึกษา SQL เพิ่ม ระวังพวกคำที่มันซ้อนกับคำสั่ง (พลาดหลายครั้งอยู่)
- อย่าลืม ‘ ‘ ครอบข้อมูลใน Field เสมอ -_- (พลาดหลายครั้งมาก)
- เขียนเกี่ยวกับการจัดการไฟล์เพิ่มเติม
- จำ String Functions เพิ่ม
- หัด jQuery พวก selector.clone() เพิ่ม (เสียเวลา Timeline ตรงที่ each มาก…)
- Up Speed jQuery + AJAX Coding U___U

ที่มา: <!–?=Fantasier?–> – printf(‘Everyday Babling’);