เป็นที่ทราบกันดีว่าปัจจุบันเรากำลังเผชิญกับสภาวะ Covid-19 ระบาดไปทั่วโลก และกระทบเศรษฐกิจ การใช้ชีวิต และการทำงาน ทั้งตัวเราเองและคนใกล้ตัว แต่ก็ยังคงเป็นเรื่องยากที่จะประเมินได้ว่าจะกระทบครั้งนี้จะจบลงเมื่อใด

Source: https://unsplash.com/photos/PUvPZckRnOg

หากย้อนกลับไปก่อน Covid-19 วิกฤติหรือหัวข้อที่เรามักจะพูดถึงการบ่อย ๆ ในแวดวงธุรกิจอาจจะมีคราว ๆ ดังนี้

  1. เราจะ Survive อย่างไรในยุคของ Disruptive Innovation และองค์ของเราเปิดโอกาสให้เกิด Innovation ใหม่ ๆ ตลอดเวลาแค่ไหน?
  2. องค์กรของเราจะ Transfrom ตัวเองอย่างไรให้เข้ากับยุคสมัยที่เปลี่ยนแปลงรวดเร็วระดับนาทีต่อนาที
  3. สงครามการค้าระหว่างมหาอำนาจ
  4. Agile/Scrum/OKR/Design Thinking
  5. การเมือง
  6. สภาวะเศรษฐกิจถดถอย
  7. การมาของ Artificial intelligence/Machine learning/Blockchain/Big Data/PlayStation 5 (ไม่เกี่ยว)

ในระหว่าง Covid-19 กำลังเกิดขึ้นอยู่นี้ มีประเด็นต่าง ๆ มากมายให้ต้องให้ขบคิด ใคร่ครวญเพิ่มขึ้นไปอีก เช่น

  1. องค์ความรู้เดิมหรือ model ที่ใช้ในการประเมินเศรษฐกิจแบบเดิม ๆ ยังใช้งานได้กับปัจจุบันหรือไม่? มีตำรามากมายที่กล่าวว่าองค์ความความรู้ที่เราเคยรู้มาใช้ไม่ได้กับยุค Disruption อีกแล้ว ฟังดูก็น่าเศร้าใจไม่น้อยแต่ก็เนี้ยแหละนะชีวิต แต่พอหลังจากศึกษาตำราสมัยใหม่ยังไม่ทันได้ตกผลึกทางความคิด การมาของ Covid-19 ก็อาจจะทำให้เรากลับมาตั้งคำถามอีกครั้งว่า แล้วตำราที่ว่าสมัยใหม่นั้นยังใช้การได้อยู่หรือไม่ในสภาวะแบบนี้? เรื่องน่าเศร้าก็อาจจะเกิดขึ้นอีกครั้ง ว่าอาจจะใช้ไม่ได้หรืออาจจะต้องปรับแก้กันครั้งใหญ่เลยก็ว่าได้ เพราะไม่มีใครรู้เลยว่าโลกหลัง Covid-19 จะเป็นอย่างไร แต่ละประเทศจะ Reform ตัวเองอย่างไรจากวิกฤติครั้งนี้ เราเห็นจุดอ่อนอะไรบ้างในฐานะพลเมือง ดังนั้นจงตั้งคำถามว่าที่เรารู้มานั่นคือความจำ ความรู้ หรือทักษะกันแน่? ไฉนเจ้าถึงเอาความรู้จำฉันไป
  2. แก่นแท้ของการเรียนรู้และการศึกษายังนิยามแบบเดิมได้หรือไม่? เรากำลังสอนให้คนเป็นคน หรือสอนให้คนเป็น Machine?
  3. การทำงานตอนนี้หลาย ๆ บริษัทเปิดโอกาสให้พนักงานทำงาน Remote ได้ และไม่ใช่แค่งาน Remote แต่ต้อง Work at home เท่านั้นอย่าไปซนที่ไหน ข้อดีคือลดความเสี่ยงการติดเชื้อและแพร่เชื้อไปสู่คนอื่น ลดเวลาเดินทางเอาความกังวลเรื่องการเดินทางออกไปจากหัวและไปโฟกัสที่งานแทน มีเวลาอ่านหนังสือและนั่งมองหนังสือที่ดองไว้อีกเป็นภูเขา หลังจากนี้เราคงต้องคิดกันอย่างจริงจังแล้ว ว่าที่ผ่านมาเราทำงานหรือเราแค่นั่งทำงาน?
  4. ก่อนที่ Covid-19 จะมาเยือนโลกของเรานั้นมีดีเบตมากมายเกี่ยวกับการแย่งงานโดยหุ่นยนต์ จากเดิมทีที่เคยเป็นของมนุษย์มายาวนานถึงแม้ครั้งปฏิวัติอุตสาหกรรมครั้งที่ 1–3 เครื่องจักรเคยทำให้มนุษย์มีรายได้มากขึ้น มั่นคงมากขึ้น แต่การปฏิวัติอุตสาหกรรมครั้งที่ 4 นั้นจะยังคงเป็นแบบนั้นอีกหรือไม่? งานใหม่ที่เพิ่มขึ้นมาจะยังคงมั่นคงเหมือนเดิมหรือไม่? และจะถูกทดแทนด้วยหุ่นยนต์มากน้อยเพียงใด? ซึ่งถึงเวลานี้เรารู้กันดีว่าเริ่มถูกทดแทนไปบ้างแล้ว และถ้าหลังจาก Covid-19 กลายเป็น New Normal หรือหลังจาก ​Covid-19 จบลง การคาดการที่ว่างานของมนุษย์ 30–40%(จำตัวเลขไม่ได้) จะถูกแทนด้วยหุ่นยนต์ภายในเท่านั้น เท่านี้ปี อาจจะไม่ใช่อีกแล้ว แต่มันอาจจะมาเร็วกว่านั้นก็ได้
  5. แล้วอะไรที่ยังคงไม่เปลี่ยนไปและเหมือนเดิมตลอดแม้ Covid-19 จะหายไปหรือไม่หายไปก็ตาม? คำตอบก็คือ การเปลี่ยนแปลงจะยังคงอยู่กับเราเสมอ

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


เนื่องจากมีการพาดพิง อิงนาม ข้าม Platform จาก Blog netfox — A lightweight, one line setup, iOS เป็นเหตุให้ต้องมาเขียนวิธีการ Monitor ดู​ Request/Response ของแอป

แล้วปัจจุบันเรา Monitor Request/Response กันได้ด้วยวิธีไหนบ้าง​?

วิธีการดู Request/Response ของแอปจริง ๆ แล้วสามารถดูได้หลายวิธี ขึ้นอยู่กับว่าใครเป็นคน Monitor บ้าง

  • Logcat
  • Charles Proxy (หรือตัวอื่นๆ)
  • OkHttp Logging interceptor
  • Android Studio Profiler
  • Stetho (By Facebook)
  • Chuck (ตัวที่เรากำลังจะพูดถึง)

แล้วตัวอื่น ๆ ผิดอะไรใยเจ้าถึงเมินเฉย ไม่คิดเอื้อนเอ่ยถึงกัน คำตอบก็คือ ไม่ได้ผิดอะไร และไม่ผิดเลย Log บางอย่างก็ยังต้องใช้งานตัวอื่น ๆ อยู่ แล้ว Chuck มันตอบโจทย์ในเคสไหนบ้าง?

หากใครเป็น Android Developer ที่หน้าตาดี จะรู้ว่าวิธีการ Monitor ทั้ง Locat, Charles, OkHttp Logging interceptor, Android Studio Profiler และ Stetho จำเป็นต้องใช้ความ Geek ในระดับนึง เช่น เสียบมือถือกับคอม แล้วไหนจะต้องเปิด Developer Mode อีก (ถ้ายังไม่ได้เปิด) หรือถ้าไม่เสียบมือถือกับคอมอาจใช้วิธี ADB Wifi ในการ Debug

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


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

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

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

ขอย้อนกลับไปเมื่อ 2 ปีก่อน เป็นช่วงเวลาของนักศึกษาปี 4 ซึ่งต้องตัดสินใจว่าจะทำโปรเจคหรือไปสหกิจ ซึ่งระเบียบของมหาวิทยาลัยเปิดโอกาสให้เลือกได้(ขึ้นอยู่กับระเบียบของมหาวิทยาลัย) ช่วงเวลานั้นผมตัดสินใจทำโปรเจคเทอมแรก และเลือกจะไปสหกิจเทอมสอง เพื่อต้องการอยากรู้ชีวิตการทำงานจริง ๆ ต้องเจอกับอะไรบ้าง ต้องเรียนรู้อะไรบ้าง ต้องเล่นมุขอย่างไรไม่ให้พี่ๆ ในที่ทำงานเงียบกริบ จนลืมไปว่าเรากำลังเล่นมุขอยู่ ช่วงเวลาสหกิจเป็นเวลาที่ได้เฝ้าดูการเคลื่อนที่ของผู้คน ทักษะของคนวัยทำงาน และผู้ชาย 2 คนกับผู้หญิง 1 คน นั่งทำงาน เวลาผ่านไปรวดเร็วมาก เลยคิดอยากบันทึกอะไรเก็บไว้ เผื่อปีหน้ามุมมองเปลี่ยนไป จะได้กลับมาอ่านเนื้อความที่เคยเขียนไว้ แล้วพูดว่า เมิงเขียนอะไรของเมิง ดังนั้นเข้าเรื่อง ทักษะ กันดีกว่าครับ ทักษะแรกที่ต้องมีคือ “ทักษะการรู้จักตัวเอง”


จากหัวข้อ “วิถีทางเลือก “ ก็ยังเป็นแค่ทางเลือก อาจจะยังไม่จำเป็นต้องเลือกใช้ก็ได้ แต่ผมเชียร์ให้ใช้นะ :)

Update: 01/09/2016 RxJava ออกเวอร์ชัน 2 แล้ว

ระหว่างที่ร่างเรื่องนี้ไว้นาน เพจเขียน android นอนน้อย ก็ดันเขียนเสร็จก่อน สามารถอ่านควบคู่กันได้เลย เป็นโอกาสดีที่มีคนเขียนเรื่องนี้เยอะจะได้เข้าใจเรื่องนี้ได้เร็วขึ้น [Android Code] มารู้จักกับ RxJava และ RxAndroid กันเถอะ [ตอนที่ 1]

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

และสรุปแล้วมันคืออะไร

Reactive Programming คือ กระบวนทัศน์การเขียนโปรแกรมที่อยู่บนพื้นฐานของ asynchronous และ data streams

ข้อย้ำว่าบทความนี้เป็นการพูดถึง Reactive Programming สาเหตุที่ต้องหมายเหตุไว้ เพราะหลายคนมักสับสนกับคำว่า ​Functional Reactive Programming กับ Reactive Programming ว่าคือสิ่งเดียวกัน

(Reactive Programming != Functional Reactive Programming)…


ก่อนหน้านี้ผมเขียนบทความเกี่ยวกับการทำ automate test โดยใช้ appium ไปแล้วจะเห็นว่ามัน Geek มาก เพราะฉะนั้นบทความนี้จะพูดถึง Cucumber ตัวที่จะทำให้ความ Geek น้อยลง สำหรับท่านใดที่ยังไม่ได้อ่าน สามารถอ่านได้ [ตอนที่ 1, ตอนที่ 2]

Cucumber เป็น tool ที่ใช้สำหรับนิยาม test case ประโยชน์ของมันคือช่วยในการ collaboration กับทีม หรือคนทั่วไปเห็นแล้วอ่านเข้าใจ เป็นรูปแบบที่ไม่ได้อยู่ในรูปของภาษา programming แน่นอนว่าใครๆก็สามารถอ่านแล้วเข้าใจได้ทันทีว่าทดสอบอะไร?

จากบทความเรื่อง appium ก่อนหน้านี้ ถ้าคนที่ไม่ใช่โปรแกรมเมอร์มาเห็นคงจะพูดว่า “นี่กำลังทดสอบอะไรกันอยู่นะ?” เพราะบทความเรื่อง appium มันอยู่ในรูปของภาษา programming ดังนั้น cucumber จึงเป็นเหมือนเครื่องมือที่ช่วยในการอธิบายหรือสื่อสารให้คนที่ไม่ใช่ programmer เข้าใจ

“Easy to read and write”

จะเล่นว่า cucumber มันคือแตงกวา เว็บอื่นเขาก็เล่นกันเยอะละ

Cucumber เขียนในรูปแบบของ Behavior-Driven Development(BDD)

Cucumber นิยาม test case ด้วยภาษาGherkin

Gherkin keywords : Feature, Background, Scenario, Given, When, Then, And, But, Scenario outline…


จากบทความที่แล้ว ตอนที่ 1 ได้พูดถึงพื้นฐานได้ใช้งาน Appium ไปแล้ว ส่วนบทความนี้จะเป็นสรุปวิธีการ Interactive กับ view ต่างๆของ android ว่าทำอย่างไร เช่น

  • Click
  • Input
  • Touch
  • Swipe
  • Wait
  • Drag and Drop
  • Multi touch

เพราะฉะนั้นผมจะสาธิตการทดสอบจากแอปที่ผมเขียนขึ้นมาเอง เพื่อจำลองความแตกต่างให้ชัดเจนมากขึ้น ซึ่งเป็นตัวแอปกับที่ผมใช้ในการสอนที่ Geeky Base เมื่อวันที่ 28 กุมภาพันธ์ 2559 ที่ผ่านมา สามารถหาไฟล์ .apk หรือไฟล์โค้ดตัวอย่างที่ใช้สอน (แต่ไม่ทั้งหมด)ได้จาก Github(คลิก) และไลบรารีที่ใช้ไปก๊อปจากนี่ได้เลยครับ คลิก

การ Click

ผมต้องการ click ปุ่ม แล้วให้แอปแสดง dialog คำว่า Hello click พร้อมคำสั่ง assertEquals ทำ assert ให้ดูครั้งเดียวน้าาาา จะสามารถเขียนโค้ดทดสอบได้ดังนี้

การ Input

ผมต้องการกรอกข้อมูลอะไรสักอย่างลงใน EditText


ถ้าพูดถึงเรื่อง Automate Testing บน Mobile Application แล้วคนที่เขียนอาจจะยังมีน้อยถึงน้อยมาก ตัวผมเองก็พึ่งเริ่มหันมาเขียน Automate บ้างแล้วเหมือนกัน จากที่แต่ก่อนดำรงตำแหน่งนายกสมาคม Manual Testing มานานตอนสมัยเรียน(ตอนนี้ก็ยังเรียนอยู่) แต่ก็ไม่ได้บอกว่า Manual ไม่ดีนะ Manual ก็ยังมีอยู่ แต่ในเมื่อมัน Automate ได้ก็ทำซะรออะไร เขียนสคิปเสร็จ สั่งรัน เดินไปหากินข้าวกลับมาก็เสร็จพอดี(สมมุติว่าเสร็จ) ช่วงแรกๆอาจจะดูช้าและใช้เวลาหน่อย แต่ถ้าระยะยาว ผมคิดว่าคุ้มนะ ทั้งประหยัดงบ ประหยัดเวลาในการทดสอบ เพราะฉะนั้นมาเขียนเทสกัน

ตอนที่ 2 ออกแล้ว

ภาพจากเพจ Code Kong ขโมยรูปมา

ต้องบอกก่อนว่าผมเองยังก็ยังไม่แม่นเรื่องเทสเท่าไหร่ และต้องขอบคุณพี่แทนใจ Kaidee, พี่ยิ้ม, พี่รุ่ง, พี่ก้อง ที่ช่วยให้คำแนะนำจนทำให้ผมได้รู้จักกับ Appium ครับ

Appium เป็น framework open source สำหรับทำ Automate Testing บน Mobile Application

Appium Server ถูกเขียนด้วย NodeJS เป็น concept เดียวกับ Selenium Server *ไม่ใช่ Thaitanium นะ อันนั้น Hip hop

Appium นำความสามารถของ WebDriver client libraries และเพิ่มความสามารถให้ทำงานกับ Mobile ได้ดีขึ้น เช่น multitouch, gestures, screen orientation เป็นต้น…


ภาพจาก https://github.com/bumptech/glide

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

Glide เป็นหนึ่งในไลบรารียอดนิยมที่แอปใดๆก็ตามที่ต้องการโหลดรูปหรือ media เข้ามาใช้ในแอปมักจะใช้กัน แต่ก็ขึ้นต้องอยู่กับ Developer ด้วยแหละว่าจะเลือกใช้ตัวไหน เพราะไลบรารีประเภทนี้ก็มีให้เลือกใช้อยู่หลายตัวพอสมควร เช่น Picasso, Fresco เป็นต้น แต่บทความนี้ขอโฟกัสไปที่ Glide เพียงตัวเดียวเท่านั้น

สำหรับการเรียกคำสั่งพื้นฐาน สามารถทำได้ ดังนี้

Glide.with(this) .load(url) .into(myImageView);

Step 1 เพิ่ม library glide

compile 'com.github.bumptech.glide:glide:3.6.1'

Step 2 เพิ่ม Permission ใน AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />


ภาพจาก https://www.google.com/design/spec

ก่อนจะอธิบายถึง Floating label ต้องขอเล่าย้อนไปสัก 100 ปี(เดี๋ยวๆ) ว่าก่อนที่จะมีตัวนี้เนี้ย เวลากรอกค่าอะไรไปก็ตามตัว hint ที่แสดงอยู่ภายใน Text fields จะถูกซ่อนไปถูกไหม? ซึ่งในบางครั้งถ้ามี fields ในกรอกจำนวนมากๆ ผู้ใช้เองอาจจะลืมว่าที่กรอกไปก่อนหน้านี้คือข้อมูลอะไร ดังนั้น Floating label ตอบโจทย์ปัญหานี้เป็นอย่างดี เพราะเมื่อเราคลิก field จะกรอกข้อมูลตัว hint มันจะย้ายไปอยู่ด้านของ fields นั่นเอง ไงละดูดีขึ้นมาเลย ปะมาลองเขียนกัน

Step 1 สร้างโปรเจคใหม่แบบ Empty Activity


ขอเสนอบทความแรกของผมเลยละกัน เนื่องด้วยช่วงนี้ medium กำลังฮิตในไทย ด้วยความที่ตัวเองไม่ค่อยรู้อะไรและค่อนข้างอ่อนเรื่อง Soft Skill เลยอยากลองเขียนสักบทความเพื่อเป็นการฝึกการเขียนไปในตัว(ดูดี) ซึ่งจริงๆ plan ไว้นานแล้วว่าจะเขียน blog แต่ด้วยสาเหตุแบบ งงๆ หลายอย่างเลยไม่ได้เขียนสักที อีกอย่างก็ติดทำโปรเจคจบด้วย ไหนๆ medium ก็มาละ ลองเขียนกันสักหนึ่งกระบวนท่า

โดยบทความอาจจะไม่ได้ลงในทุกๆขั้นตอนเล็กๆน้อยๆ อย่างเช่น สร้างโปรเจคยังไง? ผมจะไม่ขอพูดถึงตรงนั้นนะ เพราะมันยากไปนั่นเอง แต่ถ้าใครยังใช้ eclipse อยู่ (ห่ะอะไรนะ นายทำไมยังใช้มันอยู่?) ต้องเปลี่ยนมา Android Studio ได้แล้วครับ เพราะมันดีขึ้นเรื่อยๆ ดีวันดีคืนเลยละ

!!! เข้าเรื่องๆ

Step 1

ก่อนอื่นก็เริ่มสร้างโปรเจคขึ้นมาให้ แบบ Empty Activity มาก่อนเลยละกานนนหรือแบบอื่นๆก็ได้แล้วแต่ความลำบากของแต่ละคน

Step 2

แล้วก็เพิ่ม library เข้ามาในโปรเจคให้เรียบร้อย

compile 'uk.co.chrisjenx:calligraphy:2.1.0'

Kotchaphan Muangsan

Software Developer.

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