Goal for this year

  • อ่านหนังสือให้ได้ 2 เล่ม ทำสำเร็จ 🎉
    • dropped เลิกเป็นคนดี แล้วจะมีความสุข by Tokio Godo
    • จิตวิทยาว่าด้วยเงิน The Psychology of Money by Morgan Housel
    • วิธีเอาตัวรอดในวงล้อมคนงี่เงา Surrounded by idiots โดย โธมัส เอริคสัน
    • Productivity Hacks สูตรโกงของคนเก่งงาน by Emily Price
    • อ่านเร็ว เข้าใจ ไม่มีวันลืม by Mark Tigchelaar
      • หยุดอ่านไปก่อนชั่วคราว 😅
    • Algorithms Unlocked by Thomas H. Cormen
      • Merge sort
        • “master method” ใช้แปลง recurrence equation หลายๆตัวให้อยู่ในรูป non-recursive หนังสือไม่ได้บอกอะไรต่อ ต้องไป research เอาเอง
      • อ่านจบ Chapter 3 การ proof asymptotic annotation เริ่มถูกผลักออกไปเป็น “อ่าน CLRS เอานะ”
    • The Elements Of Computing System by Noam Nisan & Shimon Schocken
      • อ่านบทที่ 3 จบ คอร์ส provide DFF chip ให้ แต่อยากลองทำเองให้ได้
      • อ่านบทที่ 4 จบ ยังทำ project fill.asm ไม่เสร็จ
  • หาคอร์สเรียน 1 คอร์ส
    • canceled The Elements of Computing Systems
    • Testable Architecture Design
      • unit test = function test ถูก แต่ไม่ครบถ้วน จริงๆแล้ว unit คืออะไรก็ได้ที่ทุกคนในทีมนิยาม แต่ด้วยความไม่มีเวลา ก็เลยตั้งไปเลยว่า function เป็น unit ซึ่งบางทีการตั้งแบบนี้อาจทำให้ unit test เสียคุณค่าเชิง business ไป (ไม่รู้เทสแล้วมัน benefit business ส่วนไหน)
      • integration test = test ที่ cover มากกว่า 1 unit
      • ถ้ามี unit test ในระบบที่รกๆจะทำให้แก้ไขยาก ยอมแลกไปทำ integration test ดีกว่า
      • ไม่ควรมีเทสที่ทดสอบเรื่องเดิมซ้ำๆในทุก layer (unit/integration) การจะเทสซ้ำหรือไม่ควรจะคำนึงที่ QA กับ business ว่ามัน critical มากขนาดไหนที่จะยกเคสเดิมที่เคยมีระดับ unit อยู่แล้วขึ้นมาเทสที่ integration อีกรอบ(หรือมากกว่านั้น)
        • ข้อเสียของการเทสซ้ำหลักๆเลยก็คือสิ้นเปลืองเวลาและถ้าพัง 1 จุดจะระบุแหล่งที่มาแทบไม่เจอ (คิดที่จำนวนเคสเยอะๆ)
      • การจะแบ่ง unit ของ application นั้นต้องเน้นประสบการณ์ แต่จะมี guideline อยู่ว่า
        • ถ้า application ที่กำลังทำอยู่มี “domain” ของส่วนประกอบแต่ละส่วนอยู่ (เป็นคำที่ domain expert รู้แล้วเข้าใจได้ว่าส่วนนั้นประกอบไปด้วยอะไร และสามารถบอก spec ได้ด้วยว่ามันทำงานยังไงเป็น step) ก็ควรออกแบบ unit ให้เข้ากันกับ domain (keyword: Domain-Driven Design)
        • ส่วนไหนที่เป็น 3rd party ก็ให้แยกออกไปเป็น unit อื่นเลย เพราะจะ detect ได้ง่ายว่าเวลาระบบล่มขึ้นมามันเกิดจาก core system หรือ 3rd party system (keyword: Clean Architecture)
        • ขนาดของ unit ต้องไม่ใหญ่หรือไม่เล็กจนเกินไป
  • ทำ hw3 ของ course Computer Graphics ที่ดองไว้ตั้งแต่ปี 2021 ให้มันเสร็จ ทำไม่สำเร็จ 😰
  • ฝึกใช้ game engine ทำไม่สำเร็จ 😰
    • กำลังเลือกระหว่าง Stride(Windows) กับ Phaser Editor(Windows/mac/linux) แต่ไม่ชอบ generated code ของ Phaser
      • ตัดสินใจไม่เลือก Phaser เพราะว่า Editor ควบรวมกิจการกับบริษัทที่ใหญ่กว่าแล้วเน้น subscription 100% ทำให้ license เดิมใช้งานบนเว็บไม่ได้แล้ว เลยกะไม่ใช้ไปเลย
      • เลือก Stride เพราะว่าตั้งใจจะ reimplement raytracer ด้วย C# อยู่แล้ว และ engine นี้ก็ใช้ C# ทำ script จะได้ลดเวลาเรียนรู้ภาษาใหม่ไปด้วย
      • มีโอกาสได้แตะ Unreal Engine นิดหน่อย แต่ด้วยความไม่ชินต้องใช้ AI assist อยู่เป็นส่วนใหญ่
  • ออมเงินให้ได้ 20% ของรายได้ ทำได้จริง 15.54% ทำไม่สำเร็จ 😰
  • ออกกำลังกายให้ได้อาทิตย์ละ 1 วัน ทำไม่สำเร็จ 😰
    • หลังหายจาก covid รอบ 2(?) สัมผัสได้ว่าร่างกายพังอย่างรุนแรง เลยออกไปเดินสวนสาธารณะ 2 รอบหลังเลิกงานเกือบทุกวัน
      • แต่ช่วงปลายเดือน พ.ค. ฝนตกทุกเย็น ทำให้ออกไปยากขึ้น
      • เดือน มิ.ย. ออกไปเดินแทบจะทุกวันที่เป็นไปได้ จะมีเว้นวันอังคารกับพฤหัสบ้าง เพราะติดเรียนตอน 2 ทุ่ม
      • เดือน ก.ค. ได้ออกไปเดินน้อยมาก ส่วนมากจะมีฝนตกตอนจะออกไปเดินเสมอ
      • เดือน ส.ค. ก.ย. ออกไปเดินน้อยมาก ประมาณอาทิตย์​ละ 1 วันได้ ติดทั้งฝนตกและไม่มีเพื่อนเดิน
      • เดือน ต.ค. พยายามตื่นเช้าเพื่อไปเดินออกกำลังแทนตอนเย็น ทำได้ 1 วันต่ออาทิตย์​
      • เดือน พ.ย. เพิ่งย้ายบ้าน อยู่ระหว่างหาพื้นที่สาธารณะเพื่อเดินออกกำลัง
      • เดือน ธ.ค. ไปเดินที่สวนสาธารณะ 2 ครั้งถ้วน
  • เอาหนังสือที่ไม่คิดว่าจะอ่านซ้ำขาย คิดว่าจะขายไม่ออกแล้ว แต่ก็มีคนซื้อ คนซื้อก็ดูจะสนใจด้วยว่าเนื้อหามันเป็นยังไง เพราะตอนเอาหนังสือไปส่งเขาถามว่าเล่มนี้มันเกี่ยวกับอะไร ไม่ได้อ่านบทนำมาก่อน ทำให้มีกำลังใจอยากจะสลายกองดองมากขึ้น
  • หักห้ามใจ ทำสำเร็จ 🎉 PC มี minor upgrade เฉพาะ GPU ส่วนมือถือแค่เปลี่ยนแบตกับฝาหลังใหม่เอง
    • ไม่อัพเกรด PC ที่ใช้อยู่
    • ไม่เปลี่ยนมือถือใหม่

Projects

  • ทำ load testing tool ที่ขึ้นโครงจาก vetega โดยที่โปรแกรมจะรับ argument เป็น path json file ที่เก็บ configuration ของแต่ละ load test (load test api endpoint, mock api endpoint, request per sec, duration, content type, …) โดยที่ตัว body ของ request สามารถ custom ได้
    • tool ตัวนี้ทำให้ไม่ต้องเขียน jq เอง (ตอนเริ่มต้นเขียน jq เองเพื่อทำ custom body)
    • tool ตัวนี้สามารถทำ custom multipart body ได้ ถ้าใช้ vegeta binary จะทำ custom body ไม่ได้ แค่ส่ง multipart เฉยๆก็ลำบากแล้ว
    • เขียน go ที่เอาใช้จริงจังเป็นครั้งแรก
  • ได้ทำ docker image หลายตัวสำหรับ load testing ด้วยตัวเอง และเอาไป deploy ให้ทีมใช้
  • research/develop postgresql database backup/restore tool
    • เปรียบเทียบระหว่าง Barman กับ pgBackrest ว่าควรจะใช้อันไหน
    • ได้เข้าใจว่าการ backup/restore มันทำยากขนาดไหน และมันทำงานยังไง(ต้องเช่า cloud db ลองทำ backup/restore เอง 1 วัน)
    • เข้าใจความแตกต่างระหว่าง Barman กับ pgBackrest
    • ทำ docker image เพื่อตอบโจทย์ความต้องการลูกค้า
  • research postgresql query optimization
    • ได้มีโอกาสทำ GET API ที่ต้อง return JSON ก้อนใหญ่มาก (paginate แล้ว/ดั้งเดิมเป็น graphql แล้วจังหวะ rewrite ไม่ได้มีแผนที่จะทำ GET API ใหม่แต่ ณ จุดที่มีการใช้ข้อมูลกลับทำเหมือนกำลังใช้ graphql API ที่ทำเลยต้อง return ข้อมูลใหญ่มาก) เลยต้องพยายามหาทางทำ query ที่ execute ไว และต้องประกอบข้อมูลให้ตรง
    • ได้ลองใช้ EXPLAIN ANALYZE เพื่อดู planner cost และได้เปิดโลกหลายอย่างว่าข้อมูลหลายตัวที่บอกเป็นทริกให้ query ไวมันไม่จริง
    • ได้ลองใช้ feature deep research ของ gemini ช่วยหาข้อมูล
    • ได้เห็น sql clause ใหม่ๆที่ไม่เคยเจอมาก่อน เช่น FILTER clause

Collaboration & mentorship

  • มีส่วนร่วมใน meeting กับลูกค้าเยอะขึ้น ได้ถาม/present progress ในแต่ละ sprint ในเฉพาะของส่วนที่ตัวเองได้ดูแล
  • Knowledge Sharing จากคลาส The Elements of Computing Systems แชร์เรื่อง Types are like the Weather, Type Systems are like Weathermen - Matthias Felleisen

Design & documentation

Company building

What I learned

  • research หัวข้อที่ได้รับมอบหมายด้วยตัวเอง
  • เขียนภาษา go (แบบ newbie)
  • เขียนภาษา perl (แบบ newbie)
  • ได้เปิดใจใช้ AI สำหรับช่วยในการ research และมองเห็นอันตรายจากการเชื่อผลลัพธ์แบบหมดใจ
    • ลองใช้ gemini deep research เพื่อวางแผนอ่านหนังสือสองเล่มให้จบภายในปี *รอดูผลลัพธ์​ ละเลยไม่ได้ทำตาม 😰

Outside of work

  • ทำ ebook checkout plugin สำหรับ Koha version 17.11 (เก่ามาก)
  • migrate line notify ไปใช้ line messaging API (ทำให้โบสถ์)
  • migrate api ตารางรับใช้ของโบสถ์ไปเป็น bun และ dockerize ทั้ง project
    • มี services เป็น app ที่เป็นตัว api กับ database ที่ใช้ postgresql v15 แล้ว (upgrade มาจาก v10)
    • ทีแรกตั้งใจว่าจะใช้ pgBackrest/Barman ในการ backup database แต่ว่าทำไม่ได้เพราะติดไม่รู้ password user postgres เลยต้อง pg_dump เอา เหมือนที่เคยทำมา
    • ตั้งใจว่าจะหา cloud free tier มาใช้แทน vps เก่าที่เก่ามากๆ ที่เริ่มงอแงมากในช่วง 2 เดือนให้หลัง(มี.ค.-พ.ค.)
      • ตัวที่มีปัญหาชื่อว่า passenger ซึ่งก็เพิ่งได้รู้จักตอนที่มันพัง ถ้ามีเวลาอาจจะลองหาอะไรไปใช้กับมันดู
  • ปลูกผักกินเอง
  • ค่อนข้างติดใจ concept 1 program type per 1 desktop ที่หลายคนใช้ใน i3-wm หลังจากลองใช้ i3 ใน zorin os มาหลายเดือนแล้วก็หาทาง setup macos/linux de อื่นให้มันทำแบบเดียวกันได้

Table of contents


This site uses Just the Docs, a documentation theme for Jekyll.