เพราะเราคุยกัน เราจึงเข้าใจกัน

มีโอกาสได้ลองทำ retrospective ให้กับทีม กิจกรรมหนึ่งที่เอามาให้ทีมได้เล่นคือ … แม่ง ยังไม่ได้ตั้งชื่อเลย ตอนเอามาให้เล่น คิดว่ามันน่าสนุกดี และน่าจะได้อะไรจากกิจกรรมอยู่ ส่วนเรื่องชื่อเรียก ช่างมันก่อน เลยยังไม่ได้คิดจนถึงวันนี้ (จริง ๆ แล้ว เคยให้ทีมช่วยคิดแล้ว แต่ลืมว่าวันนั้นทีมช่วยกันตั้งชื่อว่าอะไร ต้องขอโทษทีมด้วยครับ ลืมจริง ๆ)

ในฐานะ developer เราเรียนรู้อะไรจาก wildebeest migration

ตอนเช้าได้ฟังที่ดีเจเหมียวคลื่น Get 102.5 มาเล่าให้ฟังเกี่ยวกับที่ไปเที่ยวเคนย่า แล้วได้ไปดูฝูง wildebeest อพยพ ตอนฟังก็รู้สึกตื่นเต้นตามไปด้วย wildebeest เป็นสัตว์เลี้ยงลูกด้วยนมชนิดหนึ่ง รูปร่างคล้ายวัว มีเขาโค้ง และมีเครายาว อาศัยอยู่รวมกันเป็นฝูง การอพยพจะเริ่มต้นตอนที่เข้าหน้าแล้งของพื้นที่ที่มันอยู่อาศัย เพื่อไปยังแหล่งอุดมสมบูรณ์อีกแห่ง ตามทิศทางของกลุ่มฝนที่ตกก่อนหน้านี้ นั่นคือ เมื่อฝนตกในบริเวณถัดไป หญ้าอ่อนเริ่มขึ้น หญ้าตรงที่พวกมันอยู่ก็เริ่มหมด และพื้นดินเริ่มแห้งแล้ง พวกมันก็จะเริ่มทำการอพยพ และพอในพื้นที่ถัดไปเริ่มแห้งแล้งอีก พวกมันก็จะอพยพกลับมาอีก วนไปวนมาเป็นวงกลมทุก ๆ ปี ดังนั้นในทุกปี จะมีนักท่องเที่ยวจำนวนมากไปคอยดูการอพยพของพวก wildebeest เสมอ ๆ

ทำ reverse proxy ด้วย caddy

แต่ก่อนตอนจะทำ reverse proxy จะใช้แต่ nginx แต่พอมาเริ่มทำ cotton ก็ได้รู้จักกับ caddy ที่เป็น http server ที่มาพร้อมกับ ssl ซึ่งมันเจ๋งมาก ทีนี้อยากจะได้ reverse proxy ขึ้นมา ก็เลยสงสัยว่า caddy มันทำ reverse proxy ได้หรือเปล่านะ ก็ไปเจอวิธีมา ซึ่งง่ายโคตร ๆ

Bypass หน้า Setup Wizard ของ Jenkins

ความตั้งใจจริง ๆ แค่อยากได้ jenkins ที่เป็น docker แล้วมี go install ไว้ให้แล้วเท่านั้น พอลอง compose up (ด้วย docker compose) jenkins ขึ้นมาก็เจอหน้าอย่างที่เคย ๆ เจอ คือ หน้า setup wizard พอลอง compose up ตัว jenkins บ่อย ๆ ก็รู้สึกว่า ต้องมานั่ง unlock jenkins ทุกครั้งด้วนยการเอา initialAdminPassword มากรอก เสร็จแล้วต้องไปเลือก plugin ที่อยากลงอีก ซึ่งกว่าจะลงเสร็จก็ใช้เวลาสักพัก ถัดมาต้องมาสร้าง account อีก กว่าจะเสร็จทุกขั้นตอนนี่โคตรเสียเวลาเลย เลยคิดว่า มันมีวิธีไหนมั่งที่สามารถข้ามขั้นตอนพวกนี้ไปได้ เป็นแบบ compose up เสร็จปุ๊บ พร้อมใช้เลย เลยกลายมาเป็นที่มาของการ bypass […]

ลองเอา Cotton ขึ้น Homebrew ด้วย Tap

หลังจากเมื่อวานลองเอา cotton ขึ้น homebrew ไม่สำเร็จ ทาง commitay ซึ่งเป็น member ของ homebrew ก็มา comment ใน pull request ที่ถูก reject ซึ่งเป็นอะไรที่น่าสนใจดี เขาเขียนว่า

ลองเอา cotton ขึ้น homebrew ครั้งแรก

จั่วหัวไว้ว่าครั้งแรก แปลได้เลยว่าไม่สำเร็จ แต่ได้เรียนรู้อะไรหลายอย่างจากการลอง รวมถึงเหตุผลว่าทำไมถึงไม่ได้ เริ่มจากทำ cotton ด้วย go แล้วอยาก install cotton ได้ด้วยคำสั่ง brew install cotton มันน่าจะสะดวกไม่น้อย ไม่ต้องมาเสียเวลา go get https://github.com/chonla/cotton บางคนไม่มี go อีกต้องมานั่ง install go เองอีก

ลองใช้ caddy ทำ https server บน docker

ทำ Cotton มาสักพัก อยากจะเพิ่ม feature ให้มันสามารถทดสอบกับ HTTPS ที่มัน verify cerificate ไม่ได้ (เช่น https://localhost หรือ self-signed cert) แต่ไม่รู้จะไปหา site ไหนที่มี cert แบบนั้นมาลอง อะกิแนะนำ server ตัวนึงที่ชื่อ caddy มาให้ เลยเอามาลองใช้กับ project ที่เป็น headless cms เดิมอยู่ดู

ลอง Clojure ครั้งแรกกับแบบฝึกหัด Budget List

ไปเรียน Coding Professional กับ Josepth กับ Jackson มา มีโจทย์หนึ่งเรียกว่า Budget ที่เขาให้เป็นมาลองทำด้วยวิธี pair programming เลยไปจับคู่กับอะกิ แล้วใช้ภาษา golang พอทำเสร็จก็คุยกันได้ความว่า ถ้าเอาใช้กับ map-reduce จะสวยกว่านี้อีก พี่รูฟเลยชวนให้ลองเอามาเขียนเป็น functional programming ด้วย clojure ซึ่งแน่นอน ไม่เคยเขียนเลยสักครั้ง ไม่แม้จะรู้จัก syntax มัน เลยเอามาลองกัน

อย่ายัดเยียดความคิดตัวเองลงไปในงานลูกค้า

เวลาเราเก็บ requirement จากลูกค้ามา โปรแกรมเมอร์โบราณมักจะทำสิ่งที่เรียกว่า คิดเองเออเองเสมอว่าลูกค้าอยากได้อะไร พอทำบ่อย ๆ มันก็กลายเป็นมาตรฐานระหว่างลูกค้า กับโปรแกรมเมอร์ไป พอเป็นมาตรฐานกันบ่อย ๆ ก็จะตั้งชื่อเล่นเท่ ๆ ให้กับมาตรฐานที่ทึกทักกันขึ้นมาเองว่า common sense โดยตอนที่ทำงานกันหลาย ๆ คนเนี่ย ไอ้ common sense แต่ละคนมันไม่เคยจะเหมือนกัน

อย่าดูถูกตัวเองด้วยการลดคุณภาพของสิ่งที่ทำ

หลังจากที่ได้อ่านเรื่องของพี่โอเกี่ยวกับเบอร์เกอร์กระรอก ก็ทำให้นึกถึงเรื่องที่เคยคิดว่าจะจดไว้ในนี้ แต่ไม่ได้ทำสักที เริ่มเลยละกัน หลาย ๆ องค์กรมีทีม IT ที่คอยพัฒนาซอฟต์แวร์ให้ทั้งผู้ใช้ที่เป็นลูกค้าภายนอก รวมถึงผู้ใช้ที่เป็นพนักงานภายในบริษัทเอง โดยตั้งโจทย์แบบเดียวกันกับเรื่องของเบอร์เกอร์กระรอก คือ “จะเอาทั้งหมด” ภายใต้ resource ที่มีอยู่อย่าง “จำกัด” (คำว่า resource ในที่นี้ หมายถึง resource ทุกอย่าง ยกเว้น คน เพราะคนไม่ใช่ resource) ปัญหาที่ตามมาคือ การใช้ secret toolbox ไม่ว่าจะเป็นการสร้าง smell ลงไปในของที่ตัวเองทำ การไปก๊อปปี้โค้ดมาจากอินเตอร์เน็ตโดยไม่ได้สนใจว่ามันคืออะไร ทำงานยังไง การไม่ทำความเข้าใจโค้ดที่ทีมเขียนหรือไม่ทำให้โค้ดที่ตัวเองเขียนอ่านง่ายขึ้น และที่สำคัญคือ การไม่เขียนเทสต์