เพิ่งทำเสร็จไปไม่นาน เลยเขียนเก็บไว้ เผื่อว่าคนอ่านสนใจและอยากลองทำดูบ้าง

การทำงานของผมในช่วงเวลาที่ผ่านมานี้ ส่วนใหญ่จะอยู่กับหน้าโต๊ะคอมในห้องทำงานของตัวเองอยู่เป็นประจำ ไม่ว่าจะเป็นงานบริษัทหรืองานอดิเรกก็ตาม จึงทำให้ผมตัดสินใจสร้าง Home Studio ขึ้นมาบนโต๊ะทำงานของตัวเองซะเลย

จำเป็นต้องมี Home Studio มากแค่ไหน?

ขอบอกไว้ก่อนเลยว่า Home Studio นั้นไม่ได้จำเป็นสำหรับทุกคน ขึ้นอยู่กับว่าเราทำอะไรที่จำเป็นต้องมี Home Studio ซะมากกว่า หรืออยากจะมีตามประสาคนชอบเล่น Gadget ก็ได้ไม่ว่ากัน อย่างกรณีของผมก็ต้องบอกว่าส่วนหนึ่งมาจากความอยากได้ของตัวเองนี่แหละ (ซึ่งเป็นความรู้สึกว่าถ้าไม่มีก็ไม่เป็นไร แต่ถ้ามีก็ดีเหมือนกันนะ 😆)

ถ้าคุณเป็นคนที่มีงานหลักหรืองานอดิเรกที่จำเป็นต้องใช้กล้องหรือไมค์บนคอมเพื่อทำกิจกรรมต่าง ๆ ผ่านช่องทางออนไลน์ เช่น Gaming, Public Speaking, Meeting, Product Saling, Conferences หรือ Training เป็นต้น การมี Home Studio ที่ดีก็จะช่วยเพิ่ม Production Quality ของคุณให้มากขึ้นด้วยเช่นกัน


สำหรับคนที่ใช้ Open Source Library ที่อยู่บน GitHub แล้วอยากจะช่วยแก้บั๊กหรือเพิ่มฟีเจอร์เข้าไป แต่ไม่รู้ว่าต้องทำยังไงบ้าง

ผมก็เป็นคนหนึ่งที่ใช้ Library เวลาเขียนโค้ดอยู่บ่อย ๆ เพื่อลดโค้ดที่ไม่จำเป็นต้องเขียนเอง และ Library ที่ผมใช้ก็จะเป็น Open Source Library และอยู่บน GitHub เกือบทั้งหมด

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


เพราะในโลกของการพัฒนาซอฟต์แวร์ที่ไม่ได้พัฒนาขึ้นมาจากโค้ดของคนเพียงคนเดียวนั้นมีโอกาสเกิดข้อผิดพลาดได้อยู่เสมอ รวมไปถึงการพัฒนาแอปแอนดรอยด์ก็เช่นกัน

จึงทำให้ในปัจจุบันได้มีการนำ Continuous Integration หรือ CI มาใช้ควบคู่ไปกับการเขียนเทสให้กับโค้ดในซอฟต์แวร์นั้น ๆ ด้วย เพื่อทำให้ซอฟต์แวร์สามารถทำงานได้ถูกต้องอยู่เสมอ ไม่ว่าโค้ดเหล่านั้นจะอยู่มานานเท่าไร หรือมีการเปลี่ยนคนเขียนโค้ดนั้นไปแค่ไหน

การเขียนเทสบน Android

นิยมแบ่งออกเป็น 2 ส่วนใหญ่ ๆ ด้วยกัน คือส่วนที่เป็น Unit Test สำหรับทดสอบ Logic ที่อยู่ในโค้ด และส่วนที่เป็น UI Test เพื่อทดสอบ​การแสดงผลภายในแอป

โดย Unit Test จะใช้ JVM ในการทำงาน จึงสามารถรันบนเครื่องที่ใช้เขียนโค้ดได้เลย แต่สำหรับ UI Test จะต้องใช้อุปกรณ์แอนดรอยด์ (Physical Device หรือ Emulator ก็ได้) เพื่อทำการทดสอบ


หลังจากที่ได้เห็นเบื้องหลังในการคำนวณเส้น Path ที่ใช้สร้าง UI Component เป็นรูปคูปองกันไปแล้ว ต่อไปก็ถึงเวลาของการทำให้โค้ดเหล่านั้นสามารถนำไปใช้งานกับโค้ดบนแอนดรอยด์ได้อย่างเรียบเนียนไร้รอยต่อกัน

บทความทั้งหมดของชุดนี้

สร้าง View สำหรับคูปอง

การสร้าง UI Component ใด ๆ บนแอนดรอยด์ด้วยสิ่งที่เรียกว่า View ซึ่งเป็นพื้นฐานของ UI ทั้งหมดทั้งมวลบนแอนดรอยด์ ซึ่งจะมีโค้ดพื้นฐานดังนี้

จะเห็นว่าผมได้เตรียม setup(...) ไว้เพื่อใช้กำหนดค่า View Attribute ต่าง ๆ ในทีหลัง และจะต้องกำหนด setWillNotDraw(...) เป็น false เพื่อให้ View ทำการ Render UI ขึ้นมาทันทีที่สร้างขึ้นมา ซึ่งควรใช้คำสั่งเมื่อมีการ Override คำสั่งที่ชื่อว่า onDraw(canvas: Canvas?) เสมอ

นอกจากนี้ setup(...) ยังมี Parameter ที่ส่งเข้ามา 2 ตัวคือ AttributeSet กับ Int เพื่อเรียกค่า View Attribute ต่าง ๆ ที่กำหนดไว้ในตอนที่สร้าง UI

กำหนดรูปแบบของ View Attribute สำหรับใช้กับ Canvas API

การสร้าง UI บนแอนดรอยด์ส่วนใหญ่จะถูกสร้างไว้ใน Layout Resource ที่เขียนด้วย XML ดังนั้นการเตรียม View Attribute ให้กับ View จะช่วยเพิ่มความสะดวกในการนำไปใช้งาน เพราะว่าคนที่นำไปใช้จะได้กำหนด Attribute ต่าง ๆ ผ่าน XML ได้เลย ลดโค้ดที่เกี่ยวกับ UI ในฝั่ง Java หรือ Kotlin ที่ไม่จำเป็นให้น้อยลง เช่น…


หลังจากที่เล่าเรื่องราวและที่มาของ UI Component ตัวใหม่ที่ผมต้องสร้างขึ้นมาเพื่อนำไปใช้งานในแอป LINE MAN โดยมีชื่อฟีเจอร์ว่า Coupon Book และในตอนสุดท้ายก็ได้ตัดสินใจเลือกที่จะสร้างขึ้นมาด้วย Canvas API

และในบทความนี้ผมก็ขอพาเข้าสู่เนื้อหาของโค้ดหรือคำสั่งต่าง ๆ ที่จะอยู่เบื้องหลังในการสร้าง UI Component ตัวนี้นั่นเอง

บทความทั้งหมดของชุดนี้

การสร้างรูปคูปองด้วย Canvas API

โดย Custom View บนแอนดรอยด์จะรองรับ Canvas API ในตัวอยู่แล้ว เพราะในคำสั่ง onDraw(canvas: Canvas?) หนึ่งใน Lifecycle ของ View ส่ง Canvas เข้ามาให้ด้วย เพื่อให้นักพัฒนาสามารถใช้คำสั่งต่าง ๆ ของ Canvas API ใน Custom View ตัวนั้น ๆ ได้เลย

และคำสั่งของ Canvas API ที่เป็นหัวใจสำคัญของ UI ตัวนี้ก็คือ drawPath(path: Path, paint: Paint) เพราะเราสามารถใช้ Path เพื่อสร้างเส้นที่ลากต่อกันให้เป็นรูปคูปองได้


สวัสดีผู้อ่านประจำสำนักพิมพ์​ LINE MAN Wongnai ทุก ๆ คนครับ ผมชื่อ “สมเกียรติ กิจวงศ์วัฒนะ” หรือจะเรียกว่า “เอก” ก็ได้นะ เป็น Senior Software Engineer ที่คอยดูแลและพัฒนาแอป LINE MAN บน Android

และบทความนี้ก็เป็นบทความแรกของผมในฐานะนักเขียนบน LINE MAN Wongnai ก็ขอฝากเนื้อฝากตัวด้วยนะครับ

บทความทั้งหมดของชุดนี้

ย้อนกลับไปเมื่อปี 2020 (ปีที่แล้ว)

ทีมของผมได้รับภารกิจให้ทำฟีเจอร์ใหม่ในแอป LINE MAN ที่มีชื่อว่า Coupon Book เพื่อให้ผู้ใช้จัดการกับคูปองได้สะดวกมากขึ้น ดูรายละเอียดในการใช้คูปอง และสามารถเลือกคูปองที่ต้องการใช้งานไว้ล่วงหน้าได้

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


เรื่องราวของคนที่อยากจะลาพักร้อนนาน ๆ เพื่อทำอะไรก็ได้ที่ตัวเองอยากทำ

Photo by Joanna Kosinska on Unsplash

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

และเมื่อได้เป็น Android GDE ก็ทำให้วันลาพักร้อนของผมหมดไปกับการเดินทางเพื่อไปร่วมงาน Developer Conference ของ Google เกือบทั้งหมด เพราะต้องเดินทางไปสหรัฐอเมริกา

ความพยายามในการลาพักร้อนในครั้งแรก

ในตอนที่ทำงานได้ครบ 3 ปีในบริษัทแรก ผมได้ตั้งใจไว้ว่าตัวเองจะลาออกแล้วหยุดพักซัก 1–2 เดือนก่อน ระหว่างนั้นก็ค่อยเริ่มหาที่ทำงานใหม่

แต่ในความเป็นจริงคือได้ที่ทำงานใหม่ก่อนที่จะลาออกด้วยซ้ำ ทำให้ต้องลาออกจากที่เก่าแล้วไปทำงานที่บริษัทใหม่ต่อเลย (จะว่าดีมันก็ดีแหละ แต่ที่ความตั้งใจในตอนแรกก็ต้องหยุดลง)

ความพยายามในการลาพักร้อนในครั้งที่สอง

หลังจากทำงานในที่ใหม่ 3–4 ปี ก็ได้ตระหนักถึงวันลาที่ตัวเองเหลืออยู่ในทุก ๆ ปี จึงตัดสินใจลาพักร้อนในช่วงที่เดินทางไปงาน Developer Conference ที่สหรัฐอเมริกา โดยตั้งใจว่าจะลาพักร้อนนาน 1 เดือน…


เรื่องเล่าจาก Software Engineer ที่กดซื้อ MacBook Pro เพื่อใช้ส่วนตัว ทั้งๆที่บริษัทก็มีให้ใช้อยู่แล้ว

โชคดีอย่างหนึ่งของสายงานด้าน Software Development ก็คือ บริษัทหลายๆแห่งในไทยก็มีเครื่อง MBP แจกให้พนักงานใช้กันอยู่แล้ว อีกทั้งยังให้ใช้ใช้งานได้อิสระเปรียบเสมือนกับเป็นเครื่องของตัวเองจริงๆอีกด้วย (สำหรับบริษัทที่ไม่ซีเรียสเรื่องข้อมูลและความลับของบริษัทมากนัก) จึงทำให้หลายๆคนเลือกที่จะใช้คอมบริษัทสำหรับการใช้งานส่วนตัวด้วย จะได้ไม่ต้องเสียเงินเพื่อซื้อคอมอีกเครื่องสำหรับใช้งานส่วนตัว

แต่ถึงแม้ว่าที่ทำงานของผมก็จะมี MBP 2019 ให้ใช้ก็ตาม เมื่อไม่กี่เดือนที่ผ่านมา ผมก็ได้ตัดสินใจซื้อ MBP 2020 เพื่อใช้งานส่วนตัวด้วยเหตุผลบางอย่างที่จะนำมาเล่าให้ได้อ่านกันในบทความนี้นั่นเอง

บริษัทมีคอมให้ แถมใช้ส่วนตัวได้ จะซื้อใหม่ทำไม?

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

เพราะนอกเหนือจากงานบริษัทแล้ว ผมยังมีทั้งงานอดิเรกและงานส่วนตัวที่ต้องใช้คอมด้วยเช่นกัน ไม่ว่าจะเป็นการเขียนโค้ดเพื่อ Experiment หรือ Opensource, เขียนบทความ หรืองานที่มีการว่าจ้างเป็นการส่วนตัว…


Works with Non-inherited and Inherited Custom View

Photo by Annie Spratt on Unsplash

In Android, there are some behaviors that we called “State Changes” which can occur from many conditions. Whether the platform might kill the application to reclaim the memory for the currently active app or Configuration Changes which recreated the Context in running Activity with the new configurations. To keep the data in your application from these changes, we have to handle the state in each Activity, Fragment and View.

Using existing Views from Android Frameworks or 3rd-party Libraries (which handle the state changes correctly), the state changes will be handled by itself. …


ในที่สุดก็ถึงเวลาลงมือทำแล้ว

ในที่สุดก็ถึงเวลาเล่าถึงวิธีการสร้างแอปแอนดรอยด์เพื่อเปิดเว็ปของเราที่รองรับ PWA ให้ทำงานได้อย่างมีประสิทธิภาพสุด ๆ ด้วยการใช้ TWA แล้ว

บทความในชุดเดียวกัน

บทความนี้เหมาะกับ

นักพัฒนาที่มีเว็ปที่รองรับ PWA อยู่แล้ว และต้องการทำแอปแอนดรอยด์ด้วยการเปิดเว็ปโดยใช้ TWA แทนการใช้ WebView

ถึงเวลาสร้างแอปแอนดรอยด์กันแล้ว

หลังจากที่ได้รู้เรื่องราวของ TWA หรือ Trusted Web Activity กันไปแล้ว รวมไปถึงการทำ Digital Asset Links เพื่อใช้ในการยืนยันระหว่างเว็ปกับแอปว่ามีเจ้าของเดียวกัน ถึงเวลาที่จะสร้างแอปแอนดรอยด์กันแล้ว

ในการสร้างแอปแอนดรอยด์จะใช้ Android Studio นะ (ติดตั้งลงในเครื่องกันให้เรียบร้อยด้วย)

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

เมื่อเปิด Android Studio ขึ้นมา ให้เลือก Start a new Android Studio project เพื่อสร้างโปรเจคแอนดรอยด์ขึ้นมาใหม่

Akexorcist

Lovely android developer who enjoys learning in android technology, habitual article writer about Android development for Android community in Thailand.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store