signal.Notify vs singal.NotifyContext

ใน package signal จะมี 2 ฟังก์ชันที่ใช้ในการรับค่า interrupt จาก OS คือ Notify และ NotifyContext สองฟังก์ชันนี้ต่างกันยังไงบ้าง สรุปได้ดังนี้

Read full post gblog_arrow_right

Mob Thinking, the whole team working together

ทีมปัจจุบันที่ผมดูแล ถ้าดูแค่ทักษะที่รับเข้ามา แต่ละคนก็ถนัดต่างกันไป มีคนที่ถนัด frontend มีคนที่ถนัด mobile คนที่ถนัด backend และมีคนที่ถนัด testing เราเป็นทีมเล็ก ๆ รวมผมด้วยมีสมาชิกเป็น 7 คน

เราทำงานแบบ remote (WFH, WFA) โดยใช้เครื่องมืออย่าง MS Team, Discord เป็นเครื่องมือในการสื่อสารกัน โดยใช้ทั้งการ chat, voice และ video call

การจัดการงานในทีม เราไม่มีการบังคับว่าคนถนัด frontend ต้องทำแค่ front หรือคนถนัด mobile ต้องทำแค่ mobile หรือแม้แต่การทำงาน เราไม่ได้ยึดติดว่าเมื่อแยก task งานออกไปแล้ว แต่ละคนก็แยกย้ายกันไปทำงานของตัวเองคนเดียว เราสนับสนุนให้คิดร่วมกัน และทำงานร่วมกัน

รูปแบบการทำงานร่วมกันตลอดจนจบ sprint มีแบบ pair กัน 2 คน หรือมากกว่านั้นเป็น mob ซึ่งเราจะเห็นว่าเรียกว่า mob programming

แต่สำหรับการทำงานของทีมที่ผมสังเกตุ เราไม่ได้มาทำร่วมกันแค่ programming แต่เวลาทีมช่วยกันใน 1 sprint จะรวมถึงการช่วยกันคิดว่าจะแก้ปัญหายังไง ช่วยกันคิดว่าจะทดสอบยังไง ช่วยกันคิดว่าในภาพรวมของทั้งระบบขาดตกอะไรไปบ้าง ไม่ใช่แค่การคิด 1 task ของตัวเองให้จบเท่านั้น

Read full post gblog_arrow_right

go doc เพื่อแสดง source ทั้งหมดของ package

go doc --all --src -u

ใช้คำสั่งนี้เพื่อ generate go doc และทำให้มันรวมโค้ดของทั้ง package ทุกไฟล์ ทั้ง exported / unexported ออกไปสู่ standard out ให้เราเห็นทีเดียวได้เลย

เช่นใน package เรามีไฟล์ a.go, b.go, c.go

สั่ง go doc --all --src -u ใน folder ของ package มันจะรวมโค้ดของ a.go, b.go, c.go ให้เราเห็นทีเดียวได้เลย

JavaScript/TypeScript Sync an Async with Promise

เราใช้ Promise และ async/await syntax ช่วยจัดการร้อยเรียงโค้ดที่จะทำงานหลังจากมีการเรียกใช้ asynchronous function ต่างๆ แต่ส่วนใหญ่เรามักจะ await หรือ then กันทันทีตรงจุดที่เราเรียกใช้งาน async function แต่จริงๆแล้วเราสามารถเรียกแบบ ไม่มี await แล้วเอา Promise object ไป await หรือ then ทีหลังได้

Read full post gblog_arrow_right

Go: วิธีเขียน http handler ให้รู้ว่า request ถูก cancel ไปแล้ว

net/http (หรือ gin) handler จะมีจะรับ request type เข้ามาคือ type *http.Request ซึ่งในนี้จะมีตัวแปร context ของ request ที่เราสามารถใช้เช็คได้ว่า request ถูก cancel ไปแล้วหรือยัง

Read full post gblog_arrow_right

Go: ใช้ method เป็นค่าของ function

ใน Go function เป็น value แบบนึง ที่เราสามารถส่งไปให้ function อื่นๆ ได้ และเราสามารถเก็บ function ไว้ในตัวแปรได้ เช่น ที่เราใช้กันบ่อยๆก็คือตอนที่เราเขียน HTTP handler

Read full post gblog_arrow_right

สรุป นิยามของ Software Engineering จาก Titus Winters และ Russ Cox

นิยามของ Software Engineering โดย Titus Winters บอกไว้ว่า

“Software Engineering is Programming integrated over time”

ส่วนบทความของ Russ cox “What is Software Engineering?” ซึ่งก็ยกนิยามของ Software Engineering ของ Titus Winters มาขยายความต่อไปอีกว่า

“Software engineering is what happens to programming when you add time and other programmers”

Read full post gblog_arrow_right

สรุป How to build simple systems จากการพูดของ Rich Hickey เรื่อง Simple Made Easy

ได้กลับไปฟังและอ่าน Notes จากการพูดของ Rich Hickey เรื่อง Simple Made Easy อีกครั้ง ชอบในส่วนของท้ายๆที่พูดถึงวิธีการสร้างระบบที่ simple ขอสรุปตามที่ตัวเองเข้าใจไว้สักหน่อยดังนี้

Read full post gblog_arrow_right

สรุปจากเรื่อง Livable Code ของ Sarah Mei จากงาน RailsConf 2018

เคยเขียนสรุปสิ่งที่เข้าใจและได้จากการฟังคลิปเรื่อง Livable Code เอาไว้แล้วรอบนึงที่เพจ DevDose ขอยกมาเก็บไว้ใน blog ด้วยจะได้อีกที เป็น session ที่ชอบมากๆหนึ่ง session

Read full post gblog_arrow_right

[CMake] config Cmake เพื่อ build C/C++ เบื้องต้น

CMake เป็น build tool นึงเพื่อช่วยให้เราเซตโปรเจ็ค C/C++ ให้ build binary ออกมาได้ง่ายๆ เพราะ C/C++ เวลาจะ build มีทั้งต้องกำหนด include ตอน compile ทั้งต้องกำหนด library อื่นๆที่เกี่ยวข้องก่อน linking ดังนั้นใช้ CMake ก็จะช่วยจัดการพวกนี้ได้ง่ายขึ้น

Read full post gblog_arrow_right