Categories
สุขภาพ หนังสือ

สรุปหนังสือ “เล่าเรื่องโปรตีน กินแบบนี้สุขภาพดีแน่”

หนังสือบน Goodreads

รีวิว

คะแนน  4.8/5⭐

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

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

ความสำคัญของโปรตีน

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

ประโยชน์ของโปรตีน

  • ช่วยควบคุมระดับน้ำตาลในเลือดให้คงที่ เพิ่มความเสถียร
  • บริโภคโปรตีนเพียงพอช่วยให้ผิวพรรณดีและลดการสูญเสียกล้ามเนื้อ
  • มีความสำคัญต่อผู้สูงอายุ ช่วยป้องกันภาวะมวลกล้ามเนื้อน้อย (Sarcopenia)
  • ช่วยให้การลดน้ำหนักมีประสิทธิภาพและป้องกันโยโย่เอฟเฟกต์

ปริมาณโปรตีนที่ควรบริโภค

  • คนออกกำลังกาย: 1.6 กรัม/น้ำหนักตัว 1 กิโลกรัม
  • คนทั่วไป: 0.9 กรัม/น้ำหนักตัว 1 กิโลกรัม
  • ผู้สูงอายุ: 1.06 กรัม/น้ำหนักตัว 1 กิโลกรัม
  • ตัวอย่าง: เนื้อสัตว์ขนาด 1 ฝ่ามือ = โปรตีนประมาณ 20 กรัม ควรบริโภค 20-30 กรัมต่อมื้อ

สารอาหารที่ช่วยเสริมโปรตีน

  • วิตามิน D: ช่วยสร้างกล้ามเนื้อ
  • วิตามิน B1: ลดอาการเหนื่อยล้า
  • แคลเซียม, วิตามิน C, เหล็ก, สังกะสี, และ คาร์โบไฮเดรต: ช่วยสนับสนุนการทำงานของร่างกายร่วมกับโปรตีน

เคล็ดลับการบริโภคโปรตีน

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

การออกกำลังกายและโปรตีน

  • กล้ามเนื้อจะสลายระหว่างออกกำลังกาย จำเป็นต้องทานโปรตีนเพียงพอเพื่อเสริมสร้าง
  • ออกกำลังกายเพื่อเพิ่มกล้ามเนื้อมีประสิทธิภาพมากกว่าเน้นการเผาผลาญอย่างเดียว
  • เน้นการฝึกกล้ามเนื้อมัดใหญ่ เช่น กล้ามเนื้อขา
  • การบริโภคโปรตีน:
    • ก่อนออกกำลังกาย: บริโภคเล็กน้อยเพื่อลดการสูญเสียกล้ามเนื้อและเพิ่มพลังงาน
    • หลังออกกำลังกาย: บริโภคเพื่อการซ่อมแซมและสร้างกล้ามเนื้อ
  • วันพักผ่อนก็ต้องบริโภคโปรตีนให้เพียงพอ

การนอนหลับ

  • การนอนน้อยกว่า 7 ชั่วโมงต่อวันอาจเพิ่มความเสี่ยงต่อการอ้วน และไม่ดีต่อสุขภาพด้วย
  • ควรนอน 7-9 ชั่วโมง การนอนมากไปหรือน้อยไปล้วนไม่ดี

แอลกอฮอล์และโปรตีน

  • การดื่มแอลกอฮอล์ลดการสังเคราะห์โปรตีนในร่างกายลงถึง 30-40%

Sarcopenia (ภาวะมวลกล้ามเนื้อน้อย)

  • ภาวะนี้อาจส่งผลให้เกิดโรคหลายอย่าง เช่น โรคหัวใจ โรคเบาหวาน คอเลสเตอรอลสูง
  • การป้องกัน: บริโภคโปรตีนเพียงพอและออกกำลังกายสม่ำเสมอ

การลดน้ำหนักและโปรตีน

  • การบริโภคโปรตีนเพียงพอช่วยป้องกันการสูญเสียกล้ามเนื้อ ลดความเสี่ยงต่อการลดค่า BMR (อัตราเผาผลาญพื้นฐาน)
  • กล้ามเนื้อลดลงตามอายุ:
    • หลังอายุ 20 ปี: กล้ามเนื้อลดลงเล็กน้อย
    • หลังอายุ 40 ปี: ลดลง 8-10% ทุก 10 ปี
    • หลังอายุ 70 ปี: ลดลง 15% ทุก 10 ปี
  • การเพิ่มกล้ามเนื้อช่วยให้รูปร่างดูดีและผอมเพรียว

Categories
utility

monitor และ re-run แอพบน windows ด้วย batch script

Batch script นี้ จะ monitor แอพที่เราสนใจและหากแอพในรายการที่กำลัง monitor อยู่ปิดตัวลง สคริปต์นี้จะ re-run แอพนั้นให้โดยอัตโนมัติ

ตัวอย่างนี้ผมทดสอบโดย monitor แอพ 2 ตัวคือ Postman และ Git Bash สามารถทดสอบโดยนำสคริปต์นี้ไปสร้างไฟล์ batch เช่น CheckAppAndRerun.bat แล้วคลิกไฟล์ที่สร้างขึ้นเพื่อรันสคริปต์ได้เลย

@echo off
:loop
rem Application names and paths
set app1=Postman.exe
set app2=git-bash.exe

set app1path=C:\Users\surat\AppData\Local\Postman\Postman.exe
set app2path=C:\Program Files\Git\git-bash.exe

rem Check App1
tasklist /FI "IMAGENAME eq %app1%" 2>NUL | find /I "%app1%" >NUL
if %ERRORLEVEL% NEQ 0 (
    echo [%date% %time%] %app1% is not running. Starting it now...
    start "" "%app1path%"
) else (
    echo [%date% %time%] %app1% is running.
)

rem Check App2
tasklist /FI "IMAGENAME eq %app2%" 2>NUL | find /I "%app2%" >NUL
if %ERRORLEVEL% NEQ 0 (
    echo [%date% %time%] %app2% is not running. Starting it now...
    start "" "%app2path%"
) else (
    echo [%date% %time%] %app2% is running.
)

rem Wait for 30 seconds before checking again
timeout /T 30 /NOBREAK >NUL
goto loop

เมื่อรันแล้วจะได้ผลลัพธ์ดังนี้

ในตัวอย่างนี้ผม monitor แอพที่อยู่ในเครื่องของผมเอง หากต้องการทดสอบบนคอมพิวเตอร์เครื่องอื่น กรุณาแก้ชื่อ app process name และ app path ให้ตรงกับแอพบนคอมพิวเตอร์ที่ต้องการ monitor

สามารถ monitor แอพได้มากกว่านี้ โดยเพิ่มรายการ app, app path และโค้ดในการ check app ครับ

สามารถปรับเวลา Interval ในการตรวจสอบแอพได้ที่บรรทัดนี้

timeout /T 30 /NOBREAK >NUL

ซึ่งในตัวอย่างนี้ผมกำหนดไว้ที่ 30 วินาที

Categories
การพัฒนาซอฟท์แวร์

รูปแบบ Commit Message ของ Git ที่น่าสนใจ

ที่มา: dev.to

เพื่อให้การทำงานเป็นทีมมีประสิทธิภาพมากขึ้น เราควรใส่ใจกับ Commit Message ของ Git

เพราะ Commit Message ช่วยในการสื่อสารกับเพื่อนร่วมทีม หรือแม้แต่เป็นการสื่อสารกับตัวเราเองในอนาคต เพื่อให้รู้ว่ามีการเปลี่ยนแปลงอะไรบ้าง จะเกิดผลกระทบอะไรบ้าง

บล็อกนี้นำเสนอรูปแบบหนึ่งสำหรับ Commit Messageของ Git ที่น่าสนใจ

รูปแบบของ Commit Message

!type(?scope): !subject

❗คือ บังคับว่าต้องมี
❓คือ มีหรือไม่มี ก็ได้


Type

  • ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject

Type บอกว่าการเปลี่ยนแปลงนี้ทำเกี่ยวกับอะไร โดยมี Types ให้เลือก ดังนี้

  • test
    • สร้างหรือเปลี่ยนแปลง Test Code
  • feat
    • เพิ่ม Feature ใหม่ สำหรับ Project
  • refactor
    • ทำ Code Refactoring โดยไม่กระทบกับ Logic หรือ Rules
  • style
    • เมื่อมีการเปลี่ยน Code Style หรือมีการ Formatting Code
  • fix
    • แก้ Error หรือ Bugs ในระบบ
  • docs
    • เปลี่ยนแปลง Document ของ Project
  • chore
    • มีการเปลี่ยนแปลงที่ไม่เกี่ยวกับ Code หรือ Test
    • เป็นการเปลี่ยนแปลงด้าน Development Dependency หรือ Tools เช่น
      • eslint
      • prettier
      • .gitignore
  • build
    • มีการเปลี่ยนแปลงที่ส่งผลต่อ Build Process หรือ External Dependency
    • เปลี่ยนแปลง Dependency ของ Project
  • perf
    • การเปลี่ยนแปลงที่เกี่ยวข้องกับการเพิ่ม Performance ของระบบ
  • ci
    • เปลี่ยนแปลง CI/CD Configuration File เช่น
      • Circle
      • Travis
      • Jenkins
  • revert
    • มีการย้อยกลับไปที่ Commit ก่อนหน้านี้
📝 Notes (เกี่ยวกับ Type)
  • ใน Commit message ต้องมี Type เสมอ
  • ต้องมีแค่ 1 Type ต่อ 1 Commit
  • ถ้าไม่รู้จะใช้ Type ใด เป็นไปได้ว่า Commit ใหญ่เกินไป
    • ควรแยก Commit ให้เล็กพอที่จะเลือก Type ได้
    • และแต่ละ Commit ต้องเป็นการเปลี่ยนแปลงเพียงเรื่องเดียว

Subject

  • ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject

Subject ต้องใช้ประโยคเชิงคำสั่งที่ขึ้นต้นด้วย Verb.1 (โดยไม่มี to) แทนที่จะเป็น Past Tense

เพื่อบอกทีมว่า commit นี้จะทำอะไร ถ้าเรา apply มัน:

If applied, this commit will do something according to this message

เปรียบเทียบ 2 commit message นี้ดู

ตัวอย่าง: การใช้ Subject ใน Commit Message ของ Git
ตัวอย่าง: การใช้ Subject ใน Commit Message ของ Git

จะเห็นว่า

If applied, this commit will change the markup ✅, ดู make sense กว่า

“If applied, this commit will changed the markup” 🟥

นอกจากนี้การเขียน Subject ควรเขียนสั้น ๆ กระชับ โดยทั่วไปไม่ควรเกิน 50 ตัวอักษร ถ้าต้องการเขียนยาวกว่านี้ให้ไปเขียนใน Body ของการ Commit


Scope

  • ❓ มีหรือไม่มี ก็ได้
  • บอก Context หรือบริบทของ Commit นี้

จากรูปแบบ Commit Message :

!type(?scope): !subject

จากรูปแบบที่เขียนมาก่อนหน้านี้ เราจัดการ Commit Message ให้ชัดเจนด้วยการใช้

  • Type บอกประเภทของการเปลี่ยนใน Commit นี้
  • Subject บอกอย่างชัดเจนว่าจะเกิดอะไรขึ้น เมื่อ Apply Commit นี้

แม้ว่า Scope ไม่จำเป็นต้องมีก็ได้ แต่มันช่วยบอก Context ของ Commit นี้เพิ่มเติมได้

และยังช่วยลดภาระของ Subject ลงได้ ทำให้ Subject สั้นและกระชับกว่าเดิม

หมายเหตุ :

  1. Scope ต้องใส่ใน “วงเล็บ” เช่น (Scope) เสมอ
  2. Scope จะถูกแบ่งแยกด้วย “/” (Slash) ได้ เช่น
    • (module/AuthService)
    • (package/PackageName)

ตัวอย่าง

ตัวอย่าง: การใช้ Scope ใน Commit Message ของ Git
ตัวอย่าง: การใช้ Scope ใน Commit Message ของ Git

แนวปฏิบัติเพิ่มเติมเพื่อการ Commit ที่ดี

  • Commit บ่อย ๆ และ เล็ก ๆ
    • ช่วยให้การ review code ง่ายขึ้น
    • ช่วยให้ย้อนกลับไปยังจุดที่ต้องการได้ง่าย
    • ช่วยให้การ merge ง่ายขึ้น เพราะเมื่อเกิด merge conflict จะมี code ไม่มากที่ต้องพิจารณา
    • การเปลี่ยนแปลง code ทีละน้อย ทำให้คุณภาพโค้ดดีขึ้น พัฒนาขึ้นอย่างต่อเนื่อง
  • การเขียน Body ใน Commit
    • เว้น 1 บรรทัดจากหัวข้อ
    • ควรเขียนให้สั้น และกระชับเช่นกัน
    • ควร Wrap ความยาวต่อ 1 บรรทัด ไม่เกิน 72 ตัวอักษร
    • ควรเขียนอธิบายว่าทำอะไร และทำไม (What + Why)
    • ขึ้นต้นประโยคด้วยตัวพิมพ์ใหญ่ และปิดท้ายประโยคด้วยจุด
  • Commit Message เป็นเพียงเครื่องมือหนึ่งในการสื่อสาร ทีมพัฒนาซอฟต์แวร์ยังจำเป็นต้องคุยกัน สื่อสารกันบ่อย ๆ
Categories
หนังสือ

รีวิวหนังสืออวสานอัลไซเมอร์ (THE END OF ALZHEIMER’S)

เป็นหนังสือที่มีประโยชน์และน่าอ่านมาก ๆ อ่านเพลิน อ่านสนุก (สำหรับคนที่ชอบอ่านหนังสือที่เป็นข้อมูลทางวิทยาศาสตร์)
ให้คะแนน 10/10

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

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

ผู้เขียนได้อธิบายแต่ละปัจจัยด้วยข้อมูลทางวิทยาศาสตร์
ซึ่งมาจากการทุ่มเทศึกษาและวิจัยถึง 30 ปี

การที่จะรักษาโรคอัลไซเมอร์ได้นั้นต้องแก้ไขทั้ง 36 ปัจจัยพร้อมกัน
ด้วยกระบวนการที่เรียกว่า ReCODE

กระบวนการ ReCODE ไม่ใช่วิธีสำเร็จรูปซะทีเดียว
เราต้องตรวจหาค่าหลายอย่างของร่างกาย
และแก้ไขค่าต่าง ๆ ให้กลับมาเป็นค่าที่เหมาะสม
ซึ่งแต่ละคนจะมีค่าที่ต้องให้ความสำคัญไม่เหมือนกัน

กระบวนการ ReCODE มีรายละเอียดเยอะมาก ๆ
ซึ่งวิธีการส่วนใหญ่นั้นเราต้องปรับพฤติกรรมและการใช้ชีวิต เช่น
– โภชนาการ อาหารที่ควรทาน ไม่ควรทาน รวมถึงอาหารเสริม
– แก้ไขการอักเสบในร่างกาย
– ออกกำลังกาย
– การนอน
– ความเครียด
– การฝึกสมอง
– รักษาลำไส้
– ปรับสมดุลฮอร์โมน
– กำจัดสารพิษและเชื้อโรค
– การใช้ยา

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

Categories
หนังสือ

หนังสือ Building a Second Brain

โดยส่วนตัวแล้วผมคิดว่าหนังสือเล่มนี้น่าจะเป็นหนึ่งในหนังสือที่ดีที่สุด เปลี่ยนชีวิตของผมที่สุด และอยากแนะนำมากที่สุดอีกเล่มหนึ่ง

ก่อนหน้านี้ผมรู้สึกว่าทุกอย่างในชีวิตมันมากเกินไป เข้ามาเร็วเกินไป เปลี่ยนแปลงเร็วเกินไป จนจัดการไม่ทัน เรียนรู้ไม่ทัน จำได้ไม่หมด ทำให้รู้สึกเครียดอยู่บ่อย ๆ

แม้ว่าหนังสือ Building a Second Brain เล่มนี้จะไม่หนามาก แต่ผมใช้เวลาอ่านนานมากถึง 2 เดือนเต็ม เพราะระหว่างที่อ่าน ผมค่อย ๆ ลองนำไอเดียที่ได้จากหนังสือมาทดลองใช้ อ่านแต่ละบทซ้ำ ๆ เพื่อปรับระบบที่สร้างขึ้นซ้ำแล้วซ้ำอีก จนได้ระบบที่เริ่มเหมาะสมกับตัวเอง

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

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

แม้วันนี้เรามีระบบเป็นของตัวเองแล้ว เราก็ต้องปรับเปลี่ยนระบบของเราอยู่เสมอตามแต่ละช่วงเวลาและความต้องการในชีวิต

หนังสือเล่มนี้นำเสนอหลากหลายแนวคิด อธิบายเข้าใจง่าย แนวคิดหลักจะถูกอธิบายซ้ำจนเราจำขึ้นใจและนำไปใช้ได้ ซึ่งแนวคิดที่เป็นแกนหลักที่สุดคือ CODE ซึ่งมาจาก

  • Capture : เก็บข้อมูลที่เรารู้สึกว่ามันสำคัญกับเราจริง ๆ จากหลายแหล่ง ให้มารวมกันในที่เดียว
  • Organize : จัดการกับข้อมูลต่าง ๆ เหล่านั้นตามการใช้งาน โดยใช้หลักการของ PARA : Project, Area, Resource และ Archives
  • Distill : สกัดสาระลำคัญด้วย Progressive Summarization
  • Express : แชร์ความรู้ของเรา โดยที่เราจะมี Note และระบบที่เราสร้างขึ้นมาช่วยสนับสนุน

ในตอนนี้ผมเองมีระบบในการ Capture และ Organize ที่ช่วยผมได้มากและผมพอใจในระดับหนึ่งแล้ว แต่ยังต้องทบทวนและฝึกฝน Distill และ Express ต่อไป

นอกจาก CODE ที่เป็นแนวคิดหลักของหนังสือแล้ว PARA ซึ่งเป็นแนวคิดในการ Organize ข้อมูลต่าง ๆ ก็สำคัญไม่แพ้กัน และอาจเป็นเรื่องที่ผู้อ่านส่วนใหญ่สนใจที่สุดด้วย ซึ่ง PARA ประกอบด้วย

  • Project : เก็บสิ่งที่เรากำลังทำ กำลังสนใจที่สุดอยู่ในขณะนี้ ซึ่งมักจะเป็นสิ่งที่มีขอบเขตเวลาจำกัด และในเวลาหนึ่ง ๆ จะมีเพียงไม่กี่อย่าง
    ซึ่งเท่าที่ผมอ่านความเห็นของผู้อ่านท่านอื่น ๆ ที่ได้อ่านหนังสือ Building a Second Brain เล่มนี้ มีหลายคนที่ไม่ชอบแนวคิด PARA เพราะคิดว่าตนเองไม่มี Project ที่กำลังทำอยู่ แต่ถ้าทำความเข้าใจดี ๆ จะพบว่า Project สามารถเป็นได้มากกว่าโครงการที่เกี่ยวกับงานหรือการเรียน เช่น
    • รายการซื้อของประจำสัปดาห์
    • วางแผนจัดงานวันเกิดให้ลูก
    • วางแผนสำหรับการหางานใหม่
    • วางแผนการท่องเที่ยวญี่ปุ่น
  • Area : มีความคล้ายกับ Project แต่มีขอบเขตเวลายาวกว่า หรืออาจจะยังไม่มีขอบเขตเวลาที่สิ้นสุด ณ ตอนนี้ เช่น
    • วางแผนการออกกำลังกายและติดตามผล
    • วางแผนการเงินของครอบครัว
    • วางแผนสำหรับการเกษียณ
  • Resource : คือข้อมูลอ้างอิงที่เราสามารถนำมาใช้ใน Project อื่น ๆ ในอนาคต
  • Archives : คือ Project หรือ Area ที่ไม่ต้องทำหรือไม่สนใจในตอนนี้แล้ว แต่เราไม่อยากลบทิ้งไปเพราะอาจนำกลับมาทำใหม่อีกครั้ง หรืออาจนำข้อมูลมาใช้กับโปรเจคใหม่ ๆ ในอนาคต เช่น
    • โควิด-19 กลับมาระบาดอีกครั้ง ทำให้เราต้องพักแผนการไปเที่ยวญี่ปุ่นไว้ก่อน เราก็สามารถย้ายโปรเจค “วางแผนการท่องเที่ยวญี่ปุ่น” มาที่ Archives ได้ และหากสามารถไปท่องเที่ยวได้อีกครั้ง เราก็สามารถย้ายโปรเจค “วางแผนการท่องเที่ยวญี่ปุ่น” กลับไปที่ Project ได้เช่นกัน
    • บริษัทได้ลูกค้ารายใหญ่ซึ่งมาพร้อมกับโปรเจคใหม่ ทำให้ทั้งทีมต้องพักโปรเจคที่กำลังทำอยู่แล้วมาช่วยกันทำโปรเจคใหม่ เราก็สามารถย้ายโปรเจคที่ถูกพักไว้มาที่ Archives ได้เช่นกัน

ใครที่อยากสร้างระบบที่ช่วยจัดการชีวิตและข้อมูลในโลกดิจิตอลของตนเอง ในขณะที่ทุกอย่างถาโถมเข้ามาจากทุกทิศทุกทาง ผมแนะนำหนังสือ Building a Second Brain เล่มนี้ครับ

Categories
หนังสือ

หนังสือ วะบิ ซะบิ

เป็นหนังสือที่จะอ่านง่าย ๆ สบาย ๆ อ่านไปเรื่อย ๆ ก็ได้

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

โดยความเข้าใจหลังจากอ่านจบ
วะบิ ซะบิ มีหลัก 3 เรื่อง
1. ไม่มีสิ่งใดสมบูรณ์แบบ
2. ไม่มีสิ่งใดเสร็จสมบูรณ์
3. ไม่มีสิ่งใดคงอยู่ตลอดไป

โดยส่วนตัว อ่านแล้วรู้สึกดี รู้สึกสบายใจ ปล่อยวาง
รู้สึกว่าแนวคิดของ วะบิ ซะบิ เป็นแนวคิดที่ ชีวิตเบาสบาย

Categories
การพัฒนาซอฟท์แวร์

การเลือกใช้ Integer ใน Golang

การเลือกใช้ Integer ใน Golang

Golang เป็นภาษาที่มีประเภทของ Integer มากกว่าภาษาอื่นบางภาษา จากตัวเลือกที่ค่อนข้างเยอะ บางครั้งเราอาจสงสัยว่าเมื่อใดที่เราควรใช้ Integer ประเภทใด บทความนี้แนะนำการเลือกใช้ Integer ใน Golang ครับ

ก่อนที่เราจะไปดูหลักเกณฑ์ในการเลือกใช้ เรามาดูกันก่อนว่า Golang มี Integer กี่แบบ

ประเภทขนาด ช่วงของข้อมูลที่เก็บได้
int88 bits-128 ถึง 127
int1616 bits-32768 ถึง 32767
int3232 bits–2147483648 ถึง 2147483647
int6464 bits–9223372036854775808 ถึง 9223372036854775807
uint88 bits0 ถึง 255
uint1616 bits0 ถึง 65536
uint3232 bits0 ถึง 4294967295
uint6464 bits0 ถึง 18446744073709551615
ตาราง แสดงประเภทและช่วงข้อมูลที่เก็บได้สำหรับ Integer แต่ละชนิดใน Golang

นอกจากนี้ Golang ยังมี int และ uint ซึ่งขนาดของมันสามารถเป็นได้ทั้ง 32 bits หรือ 64 bits ขึ้นกับ platform เช่น ถ้าบนเครื่อง 32-bits compiler ก็จะใช้ค่า int และ uint เป็น 32 bits

ในทางตรงข้าม ถ้าบนเครื่อง 64-bits ส่วนใหญ่แล้ว compiler ก็จะใช้ค่า int และ uint เป็น 64 bits (แต่จาก FAQ ของ Golang เค้าบอกว่าไม่ได้เป็นอย่างนี้เสมอไป แต่ก็ไม่ได้ให้ข้อมูลอะไรเพิ่มเติม และผมเองก็หาข้อมูลเพิ่มเติมไม่ได้ด้วยครับ)

FAQ : size ของ int ใน golang

Zero value

ถึงแม้ Golang จะมีประเภทของ Integer หลายประเภท แต่ค่า zero value ของ Integer ทุกประเภท คือ 0

เลือกประเภทของ Integer

เมื่อเรารู้จัก Integer แต่ละประเภทใน Golang แล้ว การเลือกว่าจะใช้ Integer ประเภทใด มีหลักที่เรียบง่ายอยู่ 3 ข้อ คือ

1. ถ้ารู้ขนาดและเครื่องหมาย

ถ้าเราทำงานกับ Binary file หรือ Network protocol หรือข้อมูลที่เรารู้ขอบเขตของขนาดข้อมูลและเครื่องหมายว่าเป็นจำนวนเต็มบวกหรือลบอย่างแน่นอนล่วงหน้าแล้ว ให้เราเลือกใช้ Integer เจาะจงประเภทใดประเภทหนึ่งจากตารางข้างบนไปเลย

2. ถ้าต้องรองรับ Integer ประเภทใดก็ได้

ถ้าเราต้องเขียน Function ที่ควรทำงานกับจำนวนเต็มประเภทใดก็ได้ ให้เขียน function มาคู่หนึ่ง โดยที่ function หนึ่งมี parameter เป็น int64 และอีก function หนึ่งมี parameter เป็น uint64

💡 เราสามารถเห็น pattern นี้ได้ใน Go standard library เช่น ฟังก์ชัน FormatInt / FormatUint หรือ ParseInt / ParseUint ใน strconv package

เหตุผลที่ int64 และ uint64 เหมาะสมในสถานการณ์นี้ เพราะในตอนนี้ Golang ยังไม่มี Generics (เฉพาะตอนนี้) และ Golang ไม่มี Function Overloading อีกด้วย จากเหตุผลเหล่านี้ ส่งผลให้เราต้องเขียนหลาย Function และต้องตั้งชื่อให้ต่างกัน

การใช้ int64 และ uint64 ช่วยให้เราเขียน Function แค่ครั้งเดียว แล้วให้ผู้ที่เรียกใช้แปลงค่า Arguments ที่จะส่งให้ Function และแปลงค่าที่รับคืนจาก Function ได้เองไม่ยากนัก

💡 แต่ถ้าขนาดของ Integer มีความสำคัญ เราควรเขียน Function แยกให้กับ Integer แต่ละประเภท เหมือนกับ math/bits package

3. กรณีอื่น ๆ

กรณีอื่น ๆ นอกจากข้อ (1) และ (2) ให้ใช้ int

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

อ้างอิง

Categories
การพัฒนาซอฟท์แวร์

รีวิวหนังสือ Head First Go

หนังสือ Head First Go
หนังสือ Head First Go

หนังสือ Head First Go เล่มนี้ เป็นหนังสือ Golang ที่ผมคิดว่าอ่านง่าย อ่านสนุกมาก

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

ตัวอย่างการอธิบายโค้ด Golang ในหนังสือ Head First Go
ตัวอย่างรูปประกอบการอธิบายเนื้อหา
ตัวอย่างการอธิบายโค้ด Golang ในหนังสือ Head First Go
ตัวอย่างรูปประกอบการอธิบายเนื้อหา
ตัวอย่างการอธิบายโค้ด Golang ในหนังสือ Head First Go
ตัวอย่างรูปประกอบการอธิบายเนื้อหา

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

อีกส่วนที่ผมชอบมาก คือ หัวข้อ “there are no Dumb Questions” ที่มีแทรกอยู่เรื่อย ๆ ซึ่งจะตอบคำถามสำหรับมือใหม่ที่เพิ่งจะมาเรียนรู้ Golang แล้วสงสัยว่า

  • ทำไม Golang ไม่มีสิ่งนี้ ?
  • ในภาษาอื่นทำแบบนี้ แต่ทำไม Golang ทำอีกแบบนึง ?
ผมชอบเนื้อหาส่วน "there are no Dumb Questions" ในหนังสือ Head First Go เล่มนี้มาก
ผมชอบเนื้อหาส่วน “there are no Dumb Questions”

ผมว่าเนื้อหาส่วนนี้ช่วยให้คนที่เคยเขียนภาษาอื่นมาก่อน เข้าใจธรรมชาติของ Golang มากขึ้น

และช่วยให้คนที่เขียน Golang มาซักพักแล้ว เข้าใจมากขึ้นว่า ผู้ที่พัฒนา Golang ขึ้นมา มีเจตนาอะไรที่เลือกทำอย่างนั้น

ในส่วนของเนื้อหา หนังสือเล่มนี้ก็ครอบคลุมส่วนหลัก ๆ ของ Golang ได้ครบถ้วนเพียงพอสำหรับมือใหม่ที่จะเริ่มเขียน Golang แล้ว

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

ผมอ่านหนังสือเล่มนี้ใน oreilly.com ผมคิดว่าการจัด format ดีมาก ไม่ต่างจากหนังสือที่เป็นเล่มเลย ส่วนถ้าเป็น kindle ก็ไม่ได้แย่มาก แต่สู้อ่านใน oreilly.com ไม่ได้ (ลองไปกดดาวน์โหลด kindle version มาลองอ่านดูก่อนก็ได้ครับ)

หนังสือเล่มนี้หนา 560 หน้า ผมใช้เวลาอ่านวันละ 2-3 ชั่วโมง + coding ตามเนื้อหาแทบทุกส่วน และยังทดลองเพิ่มเติมเองเพื่อให้เข้าใจมากขึ้น เรียกว่าอ่านละเอียดมาก อ่านเหมือนคนไม่เคยเขียน Golang มาก่อน ผมใช้เวลาอ่าน 10 วันก็จบครับ

……

มือใหม่ที่ต้องการศึกษา Golang ผมแนะนำหนังสือเล่มนี้เลยครับ

Categories
การพัฒนาซอฟท์แวร์

Hosting ฟรี สำหรับ Static Website

รวม Hosting ฟรี (หรือราคาถูก) สำหรับวาง Static Website ที่น่าใช้งาน

Netlify

Github Pages

Gitlab Pages

Render

Vercel

Firebase Hosting

Cloudflare Pages

Surge

Amazon S3

Statically

VULTR

DigitalOcean App Platform

000webhost

Freehostia

AwardSpace

Categories
หนังสือ

รีวิวหนังสือ The Power of INPUT

หนังสือ The Power of Input เล่มนี้ เป็นหนังสือที่ต่อเนื่องจากหนังสือ The Power of Output ของผู้เขียนท่านเดียวกัน
ถึงแม้จะเป็นหนังสือเกี่ยวกับ Input แต่ตลอดทั้งเล่มผู้เขียนได้พูดถึง Output อยู่ตลอดเวลา เมื่ออ่านจบเราจะยิ่งเข้าใจเรื่องของการ Output มากขึ้น

หนังสือเล่มนี้นำเสนอเทคนิคดี ๆ เกี่ยวกับ Input เช่น การอ่าน การฟัง การเรียน การพูดคุย การจัดการการใช้งานคอมพิวเตอร์และ Internet และอีกหลาย ๆ เรื่อง

โดยส่วนตัวผมคิดว่าหนังสือเล่มนี้อ่านง่าย อ่านให้จบได้อย่างรวดเร็ว เพราะแม้เนื้อหาจะเยอะ(300 กว่าหน้า) แต่ผู้เขียนแบ่งเนื้อหาออกเป็นหัวข้อย่อย ๆ โดยแต่ละหัวข้อจบใน 2-3 หน้า นอกจากนี้แต่ละหัวข้อผู้เขียนได้สรุปใจความสำคัญไว้ให้แล้ว มีรูปประกอบซึ่งเป็นใจความสำคัญในทุกหัวข้อ และไฮไลต์ข้อความสำคัญไว้ให้ด้วย

สรุปสั้น ๆ สำหรับบางหัวข้อที่ผมให้ความสนใจ
กฎพื้นฐานของ Input
วิธีอ่านหนังสือ