เบื้องหลังแอพลิเคชั่น SKNE 2016

จริงๆแล้ว App นี้เกิดจากความคิดในช่วงหลังปีใหม่ หลังจากที่ได้ลองเล่น Angular.js เป็นครั้งแรก ความรู้สึกตอนนั้นคืออยากลองทำ App อะไรซักอย่างที่ใช้งานจริงๆ เพราะตอนนั้นไม่รู้จะทำอะไร ถามว่าเคยทำ App จริงๆมั้ย ก็ไม่ เพราะก่อนหน้านั้นทำ App เช็คชื่อ Class Manager ก็เป็นแค่ Mock up เฉยๆ ส่วนที่เป็น JavaScript น้อยมาก มีแค่ jquery บางตัวที่เอาไว้ทำ slide ไป slide มาเฉยๆ

Download on AppStore
Download on Google Play

ทำไมต้อง สวนนนท์ปริทรรศน์

หลังจากที่มีความคิดว่าอยากทำ App ก็ไม่รู้ว่าจะทำ app อะไรดี ที่ไม่ได้มีส่วนของ Programming มากมาย ก็นึกถึงสวนนนท์ปริทรรศน์ งาน showcase ประจำปีของโรงเรียน ที่แต่ละชุมนุมจะงัดเอาผลงานมาโชว์กัน จริงๆตอนนั้นไม่ได้คิดว่าจะได้ให้เอามาใช้ในงานจริงๆด้วยซ้ำ แต่ก็แบบ ลองดู จริงๆ App แนวนี้พอนึกออก เพราะเคยโหลด App งาน WWDC ของ Apple มาลองเล่นบ้าง พอนึกออกว่าจะต้องมีอะไร มีสูจิบัตรทั่วไป มีตารางแต่ละ session มีแผนที่ พอนึกๆออกมาก็คิดว่าจะเอาแอพ WWDC นี่แหละเป็นต้นแบบ ไม่ซับซ้อนมากมาแนว Tab based Application ซึ่งก็เป็นรุปแบบแอพพบเห็นได้ทั่วไป พอ follow พวก Guideline User Interface ของ Apple ได้

ครั้งแรกกับ MVC

MVC คือ model view controller เป็นสถาปัตยกรรมซอฟต์แวร์ชนิดหนึ่ง ซึ่งปัจจุบันเป็นไอเดียหลักของ Frameworks สำหรับสร้าง Web Apps จำนวนมาก เช่น Angular จาก Google หรือ React จาก Facebook

บอกตรงๆว่าจริงๆแล้วโง่เรื่อง Programming มาก syntax พอได้นะ แต่พวกเรื่องอัลกอริทึมนี่ไม่ค่อยไหวจริงๆ พอได้ลอง Angular แล้วก็แบบ โอยย จะไหวมั้ยเนีย แต่ก็โอเค เพราะได้รุ่นพี่คือ พี่ปิง Supasate Choochaisri คอยให้คำปรึกษา (ขอบคุณพี่ปิงมากครับ)

ยาก ยากมาก Angular หรือเราโง่ก็ไม่รู้ 55555+ พยายามมอง scope ให้ออก ว่าอันนี้อยู่ใน scope ไหน อันนี้อยู่ใน controller ไหน แต่แอพก็ไม่ซับซ้อนมากก็เลยพอถูไถไปได้อยู่

Object และ Local Storage

ผมทำ Object ไว้เก็บคุณสมบัติต่างๆของชุมนุม คือมองแต่ละชุมนุมจะมีคุณสมบัติย่อยลงไปเล่น ชื่อ, คำอธิบาย, ที่อยู่ซุ้ม แล้วก็ โค้ดที่พอกรอกลงไปในช่องแล้วจะขึ้นว่าเราเยี่ยมชมไปแล้วกี่ชุมนุม ซึ่งอันนี้แหละที่เราต้องใช้ local storage ผมให้ตัว counter ที่เป็นตัวนับว่าเยี่ยมชมมากี่ชุมนุมแล้ว ไปเก็บไว้ใน local storage ซึ่งวิธีใช้ก็เหมือนกะที่เขียน json ปกติ

ส่ง App ขึ้น Store

จุดที่มันส์ที่สุดในการทำ app ครั้งนี้เลยก็ได้

Google Play

ได้รับความช่วยเหลือจากพี่ขนุน รุ่นพี่ที่โรงเรียนอีกเช่นเคย ได้ให้ฝาก App ไปขึ้น Store ในชื่อพี่เขาแถมยังช่วย build app ฝั่ง Android ให้ด้วย เพราะตัวเองมีปัญหากะ Android SDK build แล้วมีปัญหาตลอด ตอนแรกที่ส่งขึ้นไป บั๊กครับ ระบบ search ใช้ไม่ได้ icon หาย ต่างๆมากมาย แต่ด้วยความ "ใส่ใจใน Developer" ของ Google Play (ฮา) ก็ทำให้การปล่อย update ไม่ใช่เรื่องที่ยาก สรุปแล้ว การส่ง App ขึ้น Google Play ต่อเวอร์ชั่นใช้เวลาประมาณ 1-2 ชั่วโมงเท่านั้น app ก็พร้อมจะขึ้นไปอยู่บน Google Play ให้ Download กันแล้ว

App Store

ช่างเป็นบททดสอบที่แข็งแกร่งของ Developer มือใหม่ ไม่ว่าจะเป็นการรักษาความปลอดภัยที่เรียกได้ว่าเข้มงวดที่สุด ของ Apple AppStore ซึ่งทำให้ iOS นั้นเป็นระบบปฏิบัติการอุปกรณ์เคลื่อนที่ที่ดีที่สุดในโลก (สาวก ขออวยเต็มที่)

ครั้งนี้ผมได้ครับความช่วยเหลือจากพี่เจน Jenchote Sripornprasert ซึ่งก็คือเพื่อนของพี่ปิงนั่นเอง พี่เจนช่วยผมตั้งแต่ add ผมเข้าไปใน Team Developer ใน iTunes Connect ซึ่งเป็นหน้า Backend สำหรับการส่ง App ขึ้น App Store ( ทั้ง iOS , Mac และบริการทั้งหลายของ Apple คือ iBooks, iTunes ) ที่มันส์มากก็คือเรื่องของ Profile ที่ Apple นั้นรักษาความปลอดภัยในด้านนี้สูงมาก และเป็นครั้งแรกที่ผมได้เห็นการเข้ารหัส RSA 2048 bit ..... มันจะปลอดภัยอะไรนักหนา แล้วก็เรื่องของ Developer Provisioning Profile ที่ตอนแรกงงมาก งงสุดๆ ทำความเข้าใจยากอยู่ สมกับความเป็นระบบปิดของ Apple รวมถึง Xcode ซอฟแวร์ที่ใช้ก็มีหน้าแปลกๆที่ไม่คุ้นเคยโผล่ขึ้นมาให้เห็นเยอะมาก ปกติถ้าแค่เขียนโปรแกรม ไม่เอาขึ้น Store ก็คงจะไม่รู้ว่า Xcode เป็นอะไรที่ล้ำลึกสุด

ตรวจ App สุดโหด

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

Expedition Review

ถึงเวลาต้องกดสูตร Expedition Review เพราะผมส่ง build ที่สมบูรณ์แบบขึ้น iTunes Connect ในวันเสาร์ตอนเย็น ซึ่งงานจะมีวันอังคาร (พระเจ้าช่วย) ดังน้นการรีวิวแบบปกติ ไม่ทันเวลาแน่นอน ผมจึงต้องกดสูตร Expedition Review ซึ่ง Apple ได้ให้โอกาสนักพัฒนาในการขอลัดคิวเพื่อตรวจ app ในการณีเร่งด่วนต่างๆ โดยมีเงื่อนไขดังนี้

1.มีความจำเป็นที่ต้องปล่อย update เพื่อแก้บั๊กร้ายแรงที่ไม่สามารถรอเวลาได้
2.มีความเร่งด่วนในเรื่องของเวลา เช่น เพื่อให้ทันงาน Event ต่างๆ

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

เนื้อหาในจดหมายก็มีดังนี้


To Apple,

SKNE 2016 is the application for our “school exhibition event”. We created this app to improve the experiences of the event visitor by providing the interested information and event maps.

SKNE or SKN Exhibition is the school event of Suankularb Wittayalai Nonthaburi school. The largest school in Nonthaburi, Thailand. The event will be held on February 16, 2016. 8:00 - 15:00 Thailand Local time ( GMT +7 ) and the application should be available to download within the night before event, February 15, 2016 .

My name is Nattanon Dungsunenarn, member of Computer Olympic Club of the school. The reason for us delayed finishing the application for this event is due to the reason that this is the first time we develop an app and publish for everyone download via Apple AppStore.

We - students and members of Computer Olympic Club have to wait for the information about this event. Unfortunately, the information come to us late due to many reason. for example, our school have to prepare for the National Test, The inter-school competitions and more. The informations of this event come to us only 1 weeks before I wrote this message.

Thank you, I hope Apple will understand the propose and the importunes of this Application.


Apple จัดให้

เฝ้ารอจนถึงเที่ยงคืนของคืนวันจันทร์ ก็ไม่มีวี่แววว่า Apple จะตรวจ App ให้เลย สถานะใน iTunes Connect ยังขึ้นว่า Waiting for Review ตอนนั้น เริ่มถอดใจละ คิดว่าเอาวะ ปีหน้าเอาไหม ยังไง Apple ก็คือ Apple ความมาตรฐานสูงก็เป็นเรื่องธรรมดา และยังไงก็จะรอ Apple ตรวจ App เพื่อที่จะได้เห็น App นี้อยู่บน Store ไม่ว่าจะต้องรอนานแค่ไหน แม้ว่างานจะจบไปแล้วก็ตาม

เช้าวันงาน ผมตื่นตี 5 ครึ่งอาบน้ำจะไปโรงเรียน หยิบโทรศัพท์ขึ้นมาดูก็พบว่าสถานะของ SKNE 2016 เปลี่ยนจาก wait for review เป็น in review .. ความรู้สึกตอนนั้นตาสว่างเลยครับ โอเค ยังไงก็น่าจะทันวะ .. เมื่อถึงโรงเรียนสถานะของ App จาก wait for review ก็เปลี่ยนเป็น Metadata Rejected ตอนนั้นวูบนิดนึงครับ กำลังเดินเข้าโรงเรียน .... แต่พออ่านไปอ่านมาก็พบว่าจริงๆ แล้วเป็นแค่ปัญหาข้อมูลไม่ครบนิดนึง โดย Apple ส่งข้อความมาถาม 3 ข้อคือ เกี่ยวกับการใช้งาน code ว่าโค้ดที่ได้มาจากไหน แล้วโค้ด unlock อะไร ... ถามแค่นี้ครับ ก็พิมพ์ตอบเขาไปละเอียดๆหน่อย จากนั้นก็รอประมาณชั่วโมง

App is Ready

โอ้ยย ในที่สุดมันก็ทัน โอเค ทันพิธีเปิดพอดีเลย 5555 รีบอัพลิ้งค์ขึ้น Facebook กะ Twitter อย่างไว ถือว่าโอเคครับกับการทดสอบ App ครั้งนี้ ผลที่ได้ก็ตาม info graphic ด้านล่าง

ปีหน้าจะทำยังไง

คิดว่าปีนี้ตอบโจทย์ความต้องการน้อยไปนิด ลองเดินดูงานพร้อม app แล้ว ข้อมูลถือว่าเกือบดี แต่ User Experiences มันยังไม่เหมาะกะการเดินชมงาน ปีหน้าจะลองปรับ เน้นการ feed ข้อมูลที่ตอบโจทย์กะงานพวก Event มากขึ้น ไม่ใช่แค่เป็น app ที่สร้างจากการเปลี่ยนจากสูจิบัตรให้มาอยู่ในหน้าจอ คิดว่าน่าจะตอบโจทย์การเป็น app สำหรับเดินชมงาน event มากขึ้นครับ

สรุปสิ่งที่ต้องปรับปรุง

  • Programming ต้องแม่นกว่านี้
  • UI คิดว่าอยู่ในระดับปานกลาง แต่ไม่ทำให้ wow มาก แต่หลายคนก็ชมว่าสวยใช้ได้
  • UX ยังอยู่ในระดับเฉยๆ ไม่มีอะไรมาก คือพอใช้งานได้ แต่ยังไม่ว้าวเท่าที่ควร คิดว่าจะปรับปรุงให้ดีขึ้นครับ

รู้เป้าหมายแล้ว คือปีหน้าจะเน้นความเป็น Event App มากขึ้นไม่ใช่แค่ สูจิบัตร ปรับปรุง UI/UX ใหม่หมด และจะลดขนาดให้เล็กลงจาก 40 MB อยากให้เหลือซัก 20 MB ครับ เบาลง 50% เลย

สุดท้ายก็ต้องขอขอบคุณทุกคนมากครับที่มีส่วนเกี่ยวข้องกะ App นี้ ทั้ง พี่ปิง,พี่เจน,พี่โอม ( หรือ อ.พาธร จาก ม.เกษตร), พี่ขนุน, พี่มอส (Nutmos), พี่คอปเตอร์ (ikeang), ครูนาง (กะเพื่อนๆประธานชุมนุมอื่นๆที่มาให้ข้อมูล) ครูก๋อ คอมโอ เพื่อนๆ Com-O น้องต้า นักตัด CSS ประจำชุมนุม, น้องอิ้งค์, น้องซี, น้องซีเก้กะน้องนัจ , พล, พี่ก็อตกะพี่โอ, พี่เอิร์ธ, เฟิส (firstit) และคนอื่นๆที่ช่วยๆจนถึงวันที่ผมได้ทำ App แรกขึ้น Store จริงๆครับ 5555