Benchmark ใน Go

ลองให้ทีมเล่น Code Kata จากโจทย์ที่อะกิเอามาให้ เป็นเรื่องให้ลองจับคู่วงเล็บดูว่า input ที่เป็น string ที่ใส่มามันจับคู่ถูกต้องหรือไม่ นั่นคือ ต้องจับคู่วงเล็บเปิด กับวงเล็บปิดเสมอ (ถ้าปิดมาก่อนเปิดไม่นับ เช่น “}{” หรือถ้ามีวงเล็บไขว้กัน เช่น “({)}” แบบนี้ก็ถือว่าไม่ถูก

ถูกต้องแต่ไม่ถูกต้อง

การที่โปรแกรมเราไม่มีบัก ไม่ได้แปลว่ามันเวิร์ค ทุกฟีเจอร์สามารถทำงานได้อย่างถูกต้อง ไม่ได้แปลว่ามันตอบสนองต่อธุรกิจได้จริง ทำไมล่ะ ทั้ง ๆ ที่เราทำของที่ถูกต้องทุกอย่างแล้ว ทำไมมันถึงไม่เวิร์คอีก ก็เพราะว่ามันถูกต้องแต่ไม่ถูกต้องนั่นเอง … อะไรวะ

F.I.R.S.T Principles ของ Unit Test

ถ้าพูดถึงคุณสมบัติของ unit test ที่ดี มันจะมีชุดของคุณสมบัติหนึ่งที่เรียกว่า F.I.R.S.T Principles ซึ่งเขียนอยู่ในหนังสือที่ชื่อ Clean Code ที่เขียนโดย Robert C. Martin (Robert Cecil Martin)

ทำ 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 แต่ละคนมันไม่เคยจะเหมือนกัน