Author: Shinin Varongchayakul

  • เกิดใหม่ไปเดินเขาที่ Nepal: บันทึกการเดินทางเส้นทาง ABC และ Mardi Himal ฉบับ Gamified, Part 1/4: Perfect Preparation

    เกิดใหม่ไปเดินเขาที่ Nepal: บันทึกการเดินทางเส้นทาง ABC และ Mardi Himal ฉบับ Gamified, Part 1/4: Perfect Preparation

    เทือกเขาหิมาลัยเป็นหนึ่งในไม่กี่ที่ในโลกที่ผมอยากไปก่อนที่ผมจะไม่มีโอกาส

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

    โอกาสของผมมีน้อยลงเรื่อย ๆ

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

    Quest นี้แบ่งเป็น 2 arcs:

    1. Arc 1: Annapurna Base Camp (ABC)
    2. Arc 2: Mardi Himal

    ในแต่ละวัน เราจะต้องเดินเขา 3–6 ชั่วโมงในสภาพอากาศที่คาดเดาไม่ได้ ในระดับความสูงที่ต่างกัน แต่สภาพร่างกายไม่พร้อม หรือป่วยขึ้นมาจนไปต่อไม่ได้ ก็ต้องเรียก ฮ. มารับ และ game over ทันที

    ผมไม่รู้ว่าจะเจอกับอะไรบ้าง แต่ไม่ลองก็ไม่รู้

    บทความ 4 ส่วนนี้เป็น quest log การเดินทางของผม:

    1. Part 1. Perfect Preparation: quest ก่อนเริ่มเดินเขา
    2. Part 2. The Conquest of Annapurna Base Camp: Boss Fight 1
    3. Part 3. The Search for Tissue, Tato Paani, & Fishtail: Boss Fight 2
    4. Part 4. Beyond Journey’s End: เนื้อเรื่องตอนจบเกม

    บทความนี้ คือ 👉 Part 1. Perfect Preparation

    ถ้าพร้อมแล้ว ไปดู Quest Map, การเตรียมตัว, และตัวละครกัน

    สำหรับคนใจร้อน จะ ⏭️ skip ไปที่เริ่ม quest ที่ Day 01 เลยก็ได้ 👍


    1. 🗺️ Quest Map
    2. 🧳 Preparation
    3. 👤 Characters
      1. 🗿 Hero Guild: Main Party
      2. 👼 Tour Guild: Heaven on Nepal
      3. 🌏 NPC
    4. ▶️ Start
    5. ✈️ Day 01. Bangkok to Kathmandu
    6. 💻 Day 02. Kathmandu
    7. 🚌 Day 03. Kathmandu to Pokhara
    8. ⏭️ To Be Continued …
    9. 🤫 Cheat Code
    10. 🙏 End Credits

    🗺️ Quest Map

    Arc 1. Annapurna Base Camp (ABC):

    DayFromToTransport
    1BangkokKathmanduFlight
    2KathmanduKathmandu
    3KathmanduPokharaCoach
    4PokharaChhomrongJeep + Trekking
    5ChhomrongDovanTrekking
    6DovanDeuraliTrekking
    7DeuraliABCTrekking
    8ABCBambooTrekking

    Arc 2. Mardi Himal:

    DayFromToTransport
    10Jhinu DandaForest CampJeep + Trekking
    11Forest CampHigh CampTrekking
    12High CampMardi ViewpointTrekking
    13High CampPokharaTrekking + Jeep
    14PokharaKathmanduCoach
    15KathmanduBangkokFlight

    🧳 Preparation

    ดูวิธีการเตรียมตัวไปเดินเขาที่เนปาล 👇

    Complete Preparation Guide for Nepal Trekking: แนะนำการเตรียมตัวและจัดของ เพื่อไปเดินเขาที่ Nepal ฉบับสมบูรณ์ (จากคนเดินเขาครั้งแรก)


    👤 Characters

    แนะนำตัวละครใน Quest:

    .

    🗿 Hero Guild: Main Party

    1️⃣ ผม (คนเล่าเรื่องและตัวเอกของเรื่อง 😎)

    • Class: Newbie Trekker
    • Trait: เดินเขาเป็นครั้งแรก (ไม่ดูเลยว่าจะไปที่ไหน 😂)
    • Goal: อยากเห็น Himalaya ก่อนที่ร่างกายจะไม่ไหว

    2️⃣ ตรี

    • Class: Veteran
    • Trait: เป้าหมายชัด = กินเบียร์หลังเดินเขา 🍻
    • Passive: Energy เยอะ (ช่วงแรก)

    3️⃣ พี่นัน

    • Class: Party Leader ✊
    • Trait: คนเริ่ม Quest
    • Passive: +10 Leadership, +100 ความมั่นใจ
    • Kryptonite: garlic, curry, mala, spice, etc.

    4️⃣ พี่อู๋

    • Class: Endurance Tank 🛡️
    • Trait: พูดน้อย แต่เดินไหว
    • Passive: พลังลมปราณจากภายใน

    .

    👼 Tour Guild: Heaven on Nepal

    1️⃣ Arbin

    • Class: Tour Master
    • Skill: จัดทัวร์ให้เป็นจริง 💪
    • Language: Nepali, English, Thai

    2️⃣ Ro & Anup

    • Class: City Guide
    • Skill: Urban Navigation
    • Passive: รู้อย่างเกี่ยวกับเมือง พาไปไม่มีหลง 👍
    • Language: Nepali, English, Thai

    3️⃣ Sona

    • Class: Mountain Guide
    • Skill: Trekking Survival + network แน่นทุกที่พัก
    • Language: Nepali, English, Thai (แค่บางคำ 😂)

    4️⃣ Dorji & Furlakpa

    • Class: Porter (Real MVP 🏆)
    • Skill: แบกของหนักกว่า + เดินเร็วกว่า
    • Language: Nepali, English (listening > speaking)

    .

    🌏 NPC

    1. พนักงานโรงแรม
    2. เจ้าของที่พัก
    3. คนเดินเขาคนอื่น

    ▶️ Start

    Loading …


    ✈️ Day 01. Prologue: Bangkok to Kathmandu

    == Daily Quest ==
    [ ] Get to Kathmandu (✈️ 3h)

    .

    ผมตื่นขึ้นมาก็ตอนที่ลูกเรือประกาศว่า เครื่องบินจะลงในอีกไม่ช้า

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

    ข้างล่างเต็มไปด้วยแนวเขาสีน้ำตาลที่ดูไม่สูงมาก ตรีที่นั่งอยู่ข้างผมบอกว่า ถ้าดูจาก Google Map จะเห็น เนปาลมีทั้งแนวสีเขียวและสีน้ำตาล

    ดูเหมือนเราจะอยู่ในโซนสีน้ำตาลในตอนนี้

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

    .

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

    🎉 Daily Quest Complete
    [/] Get to Kathmandu (✈️ 3h)

    ผู้คนทยอยลงจากเครื่องมาบนลานบิน เพื่อขึ้น shuttle bus ที่รอรับไปที่อาคารผู้โดยสารที่เป็นสีน้ำตาลเข้ม

    อากาศของเมือง Kathmandu ไม่ได้เย็นอย่างที่คิด ผมคิด

    ในอาคารโดยสาร เราผ่านด่านตรวจคนเข้าเมืองได้อย่างราบรื่น เพราะทุกคนทำวีซ่ามาก่อนแล้ว (รายละเอียดการทำวีซ่าเนปาล)

    หลังด่านตรวจคนเข้าเมือง เราต้องเดินผ่านเครื่องตรวจโลหะ ก่อนจะไปรอรับกระเป๋าที่สายพาน

    รอรับกระเป๋าไม่นาน เราก็เดินไปที่ทางออก ตามโถงทางเดินมีร้านแลกเงินและร้านขาย SIM card อยู่เป็นช่วง ๆ ตอนแรกผมตั้งใจว่าจะถามราคา SIM card ดู เพราะผมเป็นคนเดียวในกลุ่มที่ไม่ได้ซื้อ roaming package มาจากไทย

    แต่ผมก็ขี้เกียจเกินจะเข้าไปถาม และรอไปเห็นราคาทีเดียวตอนอยู่ในเมืองแล้ว

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

    ที่ชั้นล่าง มีคาเฟ่เล็ก ๆ ตั้งอยู่ข้างห้องน้ำ พี่นันที่ยังไม่ได้กินอะไรขอเข้าไปซื้ออะไรลองท้อง เรายังไม่มีเงิน Nepalese Rupee (NPR) ติดตัวกัน พี่นันเลยจ่ายเงินเป็น USD และรับทอนมาเป็น NPR

    ออกจากอาคาร ที่ฝั่งตรงข้ามก็มีคนรอรับเราอยู่แล้ว

    “สวัสดีครับ พี่” Ro ยกมือไหว้ทักทายทุกคน ทักทายเป็นภาษาไทยชัดทุกคำ “Flight เป็นยังไงบ้าง พี่?”

    “Ro เขาเคยไปเรียนที่ไทยด้วย” พี่นันที่เดินนำหน้าคุยกับ Ro หันมาบอกทุกคน

    Group photo แรก: พี่อู๋ พี่นัน ตรี ผม Ro (ซ้ายไปขวา) (credit: Kullanan Pananukooln)

    Ro พาเราไปที่ลานจอดรถที่รถตู้จอดรออยู่ ก่อนขึ้นรถก็ให้ผ้าสีขาวพาดคอเป็นของขวัญต้อนรับคนละผืน

    Welcome to Nepal

    .

    รถตู้ออกจากสนามบินไปตามถนนที่เต็มไปด้วยรถรา และสองข้างทางเต็มไปด้วยผู้คน

    ถนนแคบลงเรื่อย ๆ จากทาง 4 เลน เหลือ 2 และจากนั้นก็ 1 เลน อาคารเตี้ย ๆ ไม่เกิน 3–4 ชั้นปลูกติด ๆ กันมา และไม่มีบาทวิถีให้คนเดินโดยเฉพาะ ทำให้ทั้งคนทั้งรถต้องใช้ทางร่วมกัน

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

    .

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

    Ro ช่วย check in และรับกุญแจจากเคาน์เตอร์มาให้ เราขนขึ้นไปเก็บบนห้องแล้วก็กลับลงมาที่ล็อบบี้ พร้อมที่จะออกไปข้างนอกกัน

    .

    เราเดินย้อนมาตามซอยที่รถมาส่ง พี่นันสังเกตร้านอาหารจีนชื่อ Dongfang ที่หน้าปากซอย

    Ro พาเดินไปตามถนน เราต้องคอยหลบรถและคนเดินถนนคนอื่น รถจะคอยบีบแตรเตือนเวลาเข้ามาใกล้จากด้านหลัง

    ที่แรกที่เราไปเป็นร้านแลกเงินเล็ก ๆ ป้ายในร้านบอกว่า ราคา NPR อยู่ที่:

    • 1 THB = 4.5 NPR
    • 1 USD = 145 NPR

    (รายละเอียดการเตรียมเงินไปเนปาล)

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

    ออกจากร้านแลกเงิน เดินไปไม่ไกล Ro ก็พาเข้าร้านขายของเล็ก ๆ เจ้าของร้านเอาป้ายราคา SIM card ออกมาให้ดู

    ราคา SIM card ของ Nepal Telecom (NTC) (credit: Rohil Shakya)

    “แค่ 20 GB ก็พอ” Ro บอก

    “ไม่มีแบบ 15 วันหรอ?” ผมถาม

    “ไม่มี มีแค่ 7 วันกับ 28 วัน”

    “แบบ 28 วันก็ได้” ผมบอกชี้ไปที่แผน 28 วัน แบบ data 20 GB

    “เก็บไว้ก่อน” Ro บอกเมื่อผมจะหยิบเงินที่เพิ่งแลกได้ออกมาจ่าย

    เจ้าของร้านยื่นมือถือที่มีฟอร์มให้ผมกรอก

    “ต้องชื่อ grandfather ด้วยหรอ?” ผมถาม เพราะนอกจากชื่อตัวเอง ชื่อพ่อแม่แล้ว ยังต้องกรอกชื่อ grandfather ด้วย

    “ต้องกรอกด้วย” Ro ตอบ “มันเป็นระบบเก่า จริง ๆ จะกรอกเป็นอะไรก็ได้ เขาไม่ดูกัน”

    ผมเว้นว่างไว้ เพราะไม่รู้จะกรอกยังไง

    Ro หยิบมือถือไป และพิมพ์ว่า John Wick ก่อนส่งให้เจ้าของร้าน

    🏅 Achievement Unlocked
    Grandfather: John Wick

    “เดี๋ยวถ่ายรูป” Ro บอก ชี้ให้ผมนั่งที่ม้านั่งสั้น ๆ หน้าเคาน์เตอร์

    “ที่นี่ไม่มี e-SIM หรอ?” ผมถามหลังจากถ่ายรูปเสร็จ

    “ไม่มี” Ro ตอบ “ถ้าจะเอา e-SIM จะต้องไปอีกที่”

    เจ้าของร้านขอมือถือไปถอด SIM เก่าออก แล้วใส่ SIM ใหม่ให้แทน พอเรียบร้อย ผมก็จ่ายเงินไป 1,100 NPR

    .

    ต่อมา เราไปที่ร้านขายอุปกรณ์เดินเขา และซื้อ Aquatabs ซึ่งเป็นยาสำหรับฆ่าเชื้อในน้ำ สำหรับเปลี่ยนน้ำก๊อกและน้ำจากลำธารให้กลายเป็นน้ำกิน

    และซื้อ crampons คนละคู่ คู่ละ 1,000 NPR

    (เสื้อผ้าและยาที่ควรเตรียมไปเนปาล)

    ได้ของกันมาแล้ว Ro ก็พาเดินดูของอื่น ๆ ในเมือง พอใกล้มืด ก็พาเดินกลับไปทางโรงแรม และเข้าไปในร้านอาหารแห่งหนึ่ง

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

    มื้อเย็นแรกในเนปาล

    พนักงานทยอยนำอาหารมาเสิร์ฟ บนเวทีด้านหน้า มีการแสดงพื้นเมืองให้ดูเป็นช่วง ๆ

    การแสดงพื้นเมืองของเนปาล

    พอถึงมื้อหลัก พนักงานก็เอาจานเหล็กขนาดใหญ่มาวาง พนักงานแต่ละคนถือชามใหญ่ที่ใส่อาหารต่างกัน ทยอยมาตักใส่จานให้

    “Ro ฝากถามหน่อยว่ามีกระเทียมมั้ย” พี่นันบอก Ro ที่นั่งประกบเราอยู่อีกโต๊ะ “เรากินกระเทียมไม่ได้ เราแพ้กระเทียม”

    Ro ยั้งพนักงานที่กำลังจะตักอาหารใส่จานพี่นัน แล้วก็ถามเป็นภาษาเนปาล ผมได้ยินคำว่า Garlic แล้วพนักงานก็เดินไปตักให้คนอื่นแทน

    พนักงานคนต่อมา จะตักอาหารให้พี่นัน Ro ก็ยั้งไว้ แล้วถามเหมือนเดิม คนต่อไปก็เช่นกัน

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

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

    Dal bhat

    พนักงานคอยเดินมาเติมอาหารให้เรื่อย ๆ Ro อยู่คอยกันไม่ให้อาหารที่มีกระเทียมเติมในจานพี่นัน พอเห็นเราอยู่ตัวแล้ว Ro ก็หายตัวไป

    “เขาน่าจะไปกินข้าว” พี่นันบอก

    การแสดงบนเวทีจบด้วยคนที่แต่งเป็น yak เดินลงมารับทิปตามโต๊ะ

    .

    Ro พาเราไปส่งที่โรงแรม แล้วก็ขอตัวกลับไป

    หลังจากนอนไม่เต็มอิ่มจากวันก่อนและบนเครื่อง เตียงที่โรงแรมก็ดูน่านอนเลยทีเดียว

    ห้องพักที่ Kantipur Village

    Loading …


    💻 Day 02. Side Quest: Kathmandu

    == Daily Quest ==
    [ ] Complete work (🧑‍💻 8h)
    [ ] Exchange money for trekking
    [ ] Pack the bag

    อาหารเช้าเป็นแบบ international

    บนเคาน์เตอร์มีไส้กรอก ไข่ดาว ซุปถั่วแบบอังกฤษ ซีเรียลและนม ข้าวโอ๊ต ขนมปัง และ croissant พร้อมเครื่องปิ๊ง

    อาหารเช้าที่ Kantipur Village

    ตักอาหารแล้ว ผมก็เดินไปที่เคาน์เตอร์เครื่องดื่ม

    “รับกาแฟหรือชาดีคะ?” พนักงานถาม ผมไม่ได้ตั้งใจสั่งอะไร เพราะไม่รู้ว่าสั่งเพิ่มได้นอกเหนือจากน้ำส้ม น้ำเปล่า และกาแฟที่วางให้

    “เดี๋ยวนี้ไม่ค่อยมีแล้ว” ผมนึกถึงคำ Ro เมื่อวาน “ถ้าจะกิน ก็กินที่นี่อร่อยที่สุด”

    “Masala tea ครับ” ผมตอบ

    พนักงานยิ้มรับแล้วก็หายไปในครัว

    ผมกับพี่อู๋ลงมาก่อน ตรีกับพี่นันตามมา มาถึงก็นั่งที่โต๊ะมุมในสุดซึ่งติดกับปลั๊กไฟ เพราะพี่นันจะเข้าประชุม

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

    เวลาที่เนปาลช้ากว่าไทย 1 ชั่วโมง 15 นาที แสดงว่าตอนที่เรากินข้าว ก็ใกล้เวลาเข้างานที่ไทยแล้ว

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

    🏅 Achievement Unlocked
    Masala Tea: First Sip

    ถึงอย่างนั้น ผมก็ยังกินหมดอย่างรวดเร็ว และสั่งถ้วยที่สองตอนที่พนักงานเดินมาใกล้โต๊ะ

    Masala tea

    “ชิน์อยากทำงานที่นี่หรือที่คาเฟ่” พี่นันถามจากอีกโต๊ะ MacBook เปิดอยู่ข้างตัว

    “ผมอยากทำงานที่ห้อง” ผมตอบ “แต่ที่ห้องผมต่อเน็ตไม่ได้ อาจจะต้องไปคาเฟ่”

    “ลองหาดูว่า จะไปที่ไหน”

    ผมลองหาในอินเทอร์เน็ตก็เจอคาเฟ่สำหรับนั่งทำงานที่คนแนะนำ 2–3 ที่ แต่พอดูใน Google Map แล้ว ไม่ค่อยน่านั่งสักเท่าไร และบางที่ก็เหมือนปิดร้านไปแล้ว

    ผมลองเปิดดูข้อมูลโรงแรม ก็เห็นว่า “cafe with work lounge” อยู่ในรายการ “coffee shop with work lounge”

    Facilities ของ Kantipur Village

    ผมเดินออกจากห้องอาหารไปที่เคาน์เตอร์เช็กอิน

    “มีอะไรให้ช่วยมั้ยครับ” พนักงานหลังเคาน์เตอร์ถาม

    “ผมอยากให้ช่วย 3 เรื่อง” ผมพูด ดูกระดาษที่จดมา “ผมอยากได้น้ำที่ห้องเพิ่ม แต่ผมแขวน Do Not Disturb ไว้”

    “อยากให้พนักงานทำความสะอาดห้องด้วยมั้ยครับ?”

    “ไม่เป็นไรครับ ขอแค่น้ำเพิ่มก็พอ”

    “ได้ครับ”

    “แล้วก็ผมมีปัญหาต่อเน็ตในห้อง” ผมพูด “ถ้าต่อด้วยคอมแล้วจะต่อไม่ได้ แต่ถ้าด้วยมือถือ จะต่อได้บ้างไม่ได้บ้าง อยากให้ช่วยดูให้หน่อยครับ”

    “ครับ”

    “แล้วก็ปลั๊กไฟในห้องตรงที่เสียบกาน้ำร้อนเหมือนจะใช้ไม่ได้ ผมเสียบปลั๊กไม่เข้าเลย”

    พนักงานพยักหน้า

    “ผมขอกระดาษไว้นะครับ”

    ผมงุนงงเล็กน้อย เพราะลายมือผมแย่มาก ไม่รู้ว่าคนอื่นจะอ่านออกไหม

    “เดี๋ยวผมดูให้นะครับ” พนักงานบอก เก็บกระดาษไป

    “แล้วก็” ผมพูด “เห็นในเว็บไซต์เขียนว่ามี work lounge ไม่แน่ใจว่าอยู่ตรงไหนครับ”

    “ตรงนี้เลยครับ” พนักงานชี้ไปทางขวามือของผม

    “ตรงนี้?”

    “ใช่ครับ ตรงไปก็เจอเลย”

    “ผมต้องจ่ายเงินเพื่อใช้งานยังไงบ้างมั้ย?”

    “ไม่ต้องครับ ใช้ฟรีได้เลย” พนักงานตอบ

    “ตรงนี้มี work lounge ไปนั่งได้นะ” ผมบอกคนอื่นตอนเดินกลับเข้าไปในห้องอาหาร

    พี่นันกำลังประชุมอยู่แล้ว ในห้องมีแขกอีก 1–2 โต๊ะที่นั่งทานข้าวอยู่

    “ดีเลย” พี่นันตอบ

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

    ทุกคนปักหลักกันที่โต๊ะติดผนัง ซึ่งมีปลั๊กไฟให้ใช้

    “เดี๋ยวผมไปเอาคอมก่อนนะ” ผมบอก แล้วก็ขึ้นไปบนห้อง

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

    ผมไม่ได้เช็กว่าต่ออินเทอร์เน็ตได้ไหม แต่เดาว่าน่าจะต่อได้ปกติแล้ว

    พนักงานจัดการดูแลให้อย่างรวดเร็วมาก สมกับที่เป็นโรงแรม 4.8 ดาวบน Google Maps

    .

    เรานั่งทำงานในร้านกาแฟทั้งวัน ตอนกลางวันเราสั่งพิซซ่ากับเฟรนช์ฟรายส์ ซึ่งอร่อยถูกปากมาแชร์กัน

    อาหารกลางวัน: พิซซ่าและเฟรนช์ฟรายส์

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

    ไม่นานก็หมดเวลางาน เป็นครั้งแรกที่ผมได้ทำงานที่ต่างประเทศ

    🏅 Achievement Unlocked
    Work Mode: International
    == Daily Quest ==
    [/] Complete work (🧑‍💻 8h)
    [ ] Exchange money for trekking
    [ ] Pack the bag

    .

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

    ราคาตกไม้ละ 100 NPR (ประมาณ 22 บาทเท่านั้น)

    เนื้อแกะเสียบไม้ย่าง

    “หวัดดีครับ พี่”

    Ro กับ Arbin มาหาเราที่ร้าน

    “วันสุดท้าย จะพาไปกินอาหารไทย” Arbin บอกเป็นภาษาไทย

    “เราเลือกเป็นอาหารอื่นได้มั้ย?” พี่นันถาม ติดใจเนื้อแกะที่สั่งมาเติม 2–3 รอบ

    “ไม่ได้ จองไว้แล้ว” Arbin ตอบ

    พอกินเสร็จ เราก็เดินกลับโรงแรมกัน มีแค่ตรีที่ซ้อนท้ายมอเตอร์ไซต์ไฟฟ้าของ Ro นำไปก่อน

    Arbin’s briefing (credit: Kullanan Pananukooln)

    ที่โรงแรม Arbin เริ่ม brief เกี่ยวกับการเดินเขา ทั้งแผนการเดินทาง (ดู Quest Map ข้างบน) และสิ่งที่ควรและไม่ควรทำ ซึ่งผมจดตามไว้เท่านี้:

    • เดินช้า ๆ ไม่ต้องรีบ เพื่อป้องกัน altitude sickness
    • ดื่มน้ำเยอะ ๆ (3–4 ลิตร ตามระดับความสูง) เพื่อป้องกัน altitude sickness
    • ถ้าปวดฉี่ ต้องห้ามอั้น เพราะจะทำให้ไม่หิวน้ำ และจะยิ่งกินน้ำน้อยลง
    • อาบน้ำเมื่อมีโอกาส แต่ควรอาบน้ำอุ่น เพราะน้ำเย็นจะทำให้ป่วยง่าย
    • เข้านอนหลังอาหารเย็น
    • ไม่ควรนอนกลางวัน เพราะจะนอนไม่หลับตอนกลางคืน
    • ใส่ beanie เวลานอน เพื่อช่วยให้ร่างกายอบอุ่น
    • ให้เอาของที่จำเป็นติดตัวไประหว่างเดิน ของที่เหลือให้ทิ้งไว้ใน duffle bag ที่ porter (ลูกหาบ) จะแบกนำไปก่อน
    • เริ่มทานยาแก้ altitude sickness ตั้งแต่พรุ่งนี้
    • คืนนี้ จัดของใส่ duffle bag ให้พร้อม (ของที่เหลือให้ฝากไว้ที่โรงแรม)
    • Porter 1 คนจะแบกน้ำหนักได้ 25 kg ซึ่งแบ่งเป็นกระเป๋า 2 ใบ (แสดงว่าได้กระเป๋าละ 12.5 kg)

    Brief แล้ว เราก็จ่ายเงินค่าทัวร์เป็น USD คนละ 634 USD

    Hero Guild และ Tour Master: ผม ตรี Arbin พี่นัน พี่อู๋ (ซ้ายไปขวา)

    .

    Arbin กับ Ro ก็พาเราเดินไปในเมือง เพื่อแลกเงิน ครั้งนี้เราไปที่อีกร้านหนึ่ง

    “เอาเงินติดตัวไปวันละ 50 dollars” Ro บอก “ทั้งหมดประมาณ 50,000 rupees เผื่อไว้”

    “ถ้าเหลือก็ให้ทิปไกด์กับลูกหาบ” Arbin เสริม

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

    (ดูจำนวนเงินที่ควรนำติดตัวไปเนปาล)

    “อยากกินไอติม” ผมพูด

    Ro แนะนำร้าน Silk ซึ่งอยู่ติดกับโรงแรมชื่อ Roadhouse

    Ro กับ Arbin ขอตัวกลับก่อน ปล่อยให้เราหาร้านด้วย Google Maps กันเอง

    ร้าน Silk หาไม่ยากอย่างที่คิด และร้านเล็กกว่าที่คาด เราสี่คนเดินเข้าไปก็แทบจะเต็มร้านแล้ว

    ร้านมีไอติมให้เลือกหลายรสและขอชิมก่อนได้

    ทุกคนขอชิมตามต้องการแล้วก็สั่งกันคนละถ้วย ถ้วยละ 330 NPR

    ผมเป็นคนสุดท้ายที่ตัดสินใจไม่ได้

    “ลองนี่ดู” พนักงานยื่นอีกรสให้ชิม ทั้งที่ผมไม่ได้ขอ

    “อันนี้ก็อร่อยแฮะ” ผมบอก ทำให้ตัดสินใจยากขึ้นไปอีก

    สุดท้าย ผมตัดสินใจสั่ง triple chocolate ใส่ถ้วยเหมือนคนอื่น

    ร้านขายไอติม Silk

    .

    กลับมาถึงโรงแรม เราก็จัดของใส่ duffle bag ตามที่ Arbin ได้ brief ไว้

    ผมมีของที่จะเอาไปมากกว่าน้ำหนักที่ Arbin กำหนดให้ เลยต้องใส่ของที่เกินมาไว้ใน backpack ที่จะแบกไปเอง

    ส่วนของที่จะไม่เอาไป (อย่าง laptop) ผมใส่กระเป๋าลากที่จะฝากไว้กับโรงแรม

    Duffle bag ที่ Heaven on Nepal จัดไว้ให้
    🎉 Daily Quest Complete
    [/] Complete work (🧑‍💻 8h)
    [/] Exchange money for trekking
    [/] Pack the bag

    Loading …


    🚌 Day 03. Gateway: Kathmandu to Pokhara

    == Daily Quest ==
    [ ] Kathmandu to Pokhara (🚎 7h)
    [ ] Explore Pokhara

    วันต่อมา เราไม่มีเวลากินข้าวในห้องอาหาร เพราะเราต้องออกจากโรงแรมแต่เช้า

    Anup กำลังรอเราอยู่ตอนที่เราขนกระเป๋าลงมาที่ล็อบบี้

    “คนนี้จะเป็นไกด์พี่นะครับ” Anup บอกเป็นภาษาไทย ผายมือไปที่คนเนปาลที่ยืนอยู่ข้างตัว “เขาจะนั่งไป Pokhara ด้วย ชื่อ Sona Gurman จะเรียก Sona หรือ Gurman ก็ได้”

    Sona ยิ้มทักทายทุกคน

    “เขาพูดไทยไม่ได้” Anup เสริม

    รูปหมู่ก่อนออกจากโรงแรม: พี่นัน ตรี พี่อู๋ ผม Anup และ Sona (ซ้ายไปขวา) (credit: Kullanan Pananukooln)

    “Anup ไปด้วยมั้ยคะ?” พี่นันถามเมื่อเราขึ้นไปบนรถตู้ที่จอดรอหน้าโรงแรม

    “ไม่ได้ไป พี่” Anup พูด “เดี๋ยว Sona จะดูแลพวกพี่เอง”

    “เขาชื่ออะไรนะ?” พี่นันถามอีกครั้ง เพราะเรายังไม่คุ้นกับชื่อของคนที่นี่

    “Sona Gurman” Anup ตอบเหมือนทวนเทป “จะเรียก Sona หรือ Gurman ก็ได้”

    .

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

    Sona กับคนขับรถคุยกันด้วยภาษาเนปาล พยายามมองหารถของเรา พอขับเลยคันที่มองหา คนขับรถก็กลับรถกลางถนนเพื่อย้อนกลับไปหารถทัวร์ของเรา

    ลงจากรถ เราเอา backpack และกล่องข้าวเช้าที่ Arbin ให้โรงแรมเตรียมไว้ให้ลงด้วย ส่วน duffle bag ของเรามีคนขนขึ้นท้ายรถทัวร์ให้

    ที่นั่งบนรถไม่เหมือนกับรถทัวร์แบบอื่น ๆ ที่ผมเคยเจอมา

    ภายในรถทัวร์ไป Pokhara

    ที่นั่งแบ่งเป็น 2 แถว ฝั่งหนึ่ง 1 ที่นั่ง และอีกฝั่ง 2 ที่นั่ง ทรงเก้าอี้ทำให้ผมนึกถึงเก้าอี้นวด เพราะเบาะมีขนาดใหญ่พอที่จะนั่งได้โดยไม่รู้สึกอึดอัด แม้สำหรับคนตัวใหญ่อย่างผม และปรับเอียงนอนได้สบายโดยไม่รบกวนคนข้างหลัง

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

    อาหารเช้าที่โรงแรมเตรียมใส่กล่องไว้ให้

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

    .

    พอรถออกตัว อาคารบ้านเรือนที่มีเอกลักษณ์เฉพาะของ Kathmandu ก็ค่อย ๆ เคลื่อนผ่านหน้าต่างไปเรื่อย ๆ

    พออกเขตเมือง ถนนก็เริ่มขรุขระและเป็นลูกรังมากขึ้น ฉากอาคารสีทรายถูกแทนที่ด้วยภูเขาดินและป่าไม้ ระหว่างทาง มีทั้งรถทัวร์และรถเมล์สวนไปอีกทาง

    เราหยุดเข้าห้องน้ำข้างทางครั้งหนึ่ง ก่อนจะหยุดพักเพื่อทานข้าวกลางวันกัน

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

    “เป็นยังไงบ้าง?” Sona ถามเป็นภาษาอังกฤษ เดินเข้ามาหา

    “ก็ดี” ผมตอบ “เห็นคนอื่นมั้ย?”

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

    “อ๋อ งั้นผมไปหาพวกเขาก่อน”

    “อันนี้เป็น buffet” พี่นันบอกตอนผมไปถึงจุดซื้อคูปองที่มีคนรุมซื้อคูปองกันอยู่ (ผมใช้คำว่ารุม เพราะไม่มีใครสนใจว่าใครมาก่อน ใครแทรกเข้ามาได้ก็ได้ซื้อก่อน) “มีให้เลือก ผัก ไก่ กับ mutton”

    “พี่นัน พี่อู๋กินอะไร?” ผมถาม

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

    ผมรีบนับเงินที่แลกมาเมื่อวานออกจากซองเงิน ระหว่างนั้นก็มีคนเนปาลแทรกเข้ามาซื้อคูปองเลื่อน ๆ

    “พี่ชิน์กินอะไร?” ตรีถามตอนที่เรากำลังต่อแถว

    “Mutton” ราคา 600 NPR

    แถวตักอาหารเคลื่อนไปอย่างช้า ๆ จนผมเริ่มสงสัยว่า คนรถให้เวลากินข้าวเท่าไร

    อาหารที่มีให้ตักเหมือนกับอาหารเย็นวันแรก นั่นคือ dal bhat แต่เป็นฉบับตักเอง

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

    “สรุปพี่นันกินอะไร?” ผมถามเมื่อไปถึงโต๊ะที่พี่อู๋ พี่นันนั่งอยู่

    “ข้าวผัดไข่” พี่นันตอบ “พี่ถามเขาว่า อะไรมีกระเทียมบ้าง เขาก็ชี้ ชี้ ชี้ แล้วเขาก็ทำท่าอย่างนี้” ทำท่ากวาดมือ “’All of this has garlic’ เขาพูด เขาเลยคืนเงินให้พี่นัน แล้วให้สั่งใหม่ เพราะไม่มีอะไรที่พี่นันกินได้เลย”

    Dal bhat (อีกแล้ว)

    “อาหารเป็นยังไงบ้าง?” Sona ถามเมื่อมาปรากฏตัวข้างโต๊ะเรา

    “ดี” พี่นันตอบเป็นภาษาอังกฤษ พร้อมยกนิ้วให้

    “เรามีเวลากินเท่าไร?”

    “อา” Sona มองนาฬิกา “ประมาณ 45 นาที”

    ผมไม่รู้ว่าเวลาผ่านไปนานขนาดไหนแล้ว แต่คิดว่า เรามีเวลาอีกไม่นาน

    “เราต้องรีบไปแล้วมั้ย?” ผมถาม

    “ยังพอมีเวลาอยู่” Sona ตอบ

    “งั้นผมขอไปตักเพิ่มหน่อย” ผมพูด

    ผมไปต่อแถวตักอาหารอีกครั้ง และอีกครั้งที่แถวค่อย ๆ เคลื่อนไปอย่างช้า ๆ ผมคิดว่าผ่านไป 3–5 นาทีได้ ผมยังไม่ถึงที่หยิบจานแม้แถวจะสั้นลงกว่าแรกถึง 1 ใน 3 แล้วก็ตาม

    “รีบไปขึ้นรถก่อนแล้วกัน” ผมบอก Sona ที่เดินมาหา

    “แน่ใจหรอ?”

    “ใช่” ผมตอบ เพราะตอนนั้นห้องอาหารดูโล่งแล้ว แสดงว่าคนส่วนใหญ่ รวมถึงคนที่มารถคันเดียวกับเรา น่าจะขึ้นรถกันหมดแล้ว

    “เขาให้เวลาน้อยมาก” ผมคุยกับ Sona ระหว่างเดินไปที่รถ “คนอื่นกินกันทันได้ยังไง?”

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

    .

    บนรถมีนาฬิกาดิจิทัลบอกเวลาที่ผมเฝ้ามอง รอคอยให้ถึงที่หมายเร็ว ๆ

    ก่อนหน้านี้ ผมถาม Sona ว่าจะถึง Pokhara ประมาณกี่โมง Sona บอกว่า 2 โมงกว่า ๆ ผมประมาณว่าเราน่าจะถึงตอนบ่ายสาม จากการที่เราใช้เวลากินข้าวนานกว่าปกติ

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

    และที่สำคัญ Pokhara มีสถานีขนส่งที่รถทัวร์มาจอดส่งทุกคนลง

    == Daily Quest ==
    [/] Kathmandu to Pokhara (🚎 7h)
    [ ] Explore Pokhara

    “มาจาก Indonesia หรือเปล่า?” คนแก่ที่ผมเดาว่าเป็นคนขับแท็กซี่ถาม พยายามหาผู้โดยสารจากคนที่ลงจากรถทัวร์

    กลุ่มเราไม่มีใครตอบ เพราะทุกคนกำลังง่วนกับการขน duffle bag จากท้ายรถทัวร์ขึ้นรถตู้ที่มารอรับเราอยู่แล้ว

    รถตู้เหมือนจะหาโรงแรมไม่เจอ และเมื่อถึงที่หมาย ผมก็รู้ว่าทำไม

    “คนขับหาไม่เจอ” ผมบอกคนอื่นเป็นภาษาไทย “เพราะมัน hidden นี่เอง”

    โรงแรม Hidden Kingdom

    โรงแรมของเราชื่อ Hidden Kingdom ซึ่งดูแล้วมีขนาดเล็กและดูเก่ากว่า Kantipur Village

    Sona ช่วยเรา check in แล้วก็แจกจ่ายกุญแจห้องให้ เราได้ 2 ห้องแยกเหมือนเดิม

    “ถ้าอยากออกไปเดินในเมือง” Sona บอก “ก็บอกเวลามาได้ กี่โมงก็แล้วแต่เลย”

    “บอกเขา 4 โมงครึ่งก็ได้” พี่นันพูดเป็นภาษาไทย ซึ่งหมายถึงอีกประมาณ 1 ชั่วโมงต่อจากนี้ “ดูหน้าแล้ว เขาน่าจะอยากนอน ให้เขาพักเถอะ”

    “น่าจะประมาณ 4 โมงครึ่ง” ผมบอก Sona เป็นภาษาอังกฤษ “เดี๋ยวผมลงมาเจอที่ล็อบบี้”

    “ได้ ๆ” Sona ตอบ “ถ้าพร้อมแล้วก็ทักมา” Sona หมายถึงทักผ่าน Messenger ของ Facebook เพราะเราเพิ่งเพิ่มเพื่อนกัน

    Sona ไม่มี LINE เหมือนกับ Arbin, Ro, และ Anup

    ห้องพักเราอยู่ชั้น 2 เราเลือกเดินขึ้นบันได เพราะพนักงานช่วยขนกระเป๋ามาทางลิฟต์ที่ตัวเล็กนิดเดียว แม้จะไม่ดูดีเท่า แต่ห้องของ Hidden Kingdom ก็ขนาดกว้างขวางไม่แพ้ Kantipur Village

    ห้องพักที่ Hidden Kingdom

    .

    พอ 4 โมงครึ่ง เราก็ลงมาเจอกับ Sona ที่ล็อบบี้และออกเดินจากซอยโรงแรม เรียบไปตามชายฝั่งของทะเลสาบ Phewa

    “พี่อู๋กับพี่นันเคยมาแล้ว” พี่นันบอกผมกับตรี พี่นันกับพี่อู๋เคยมาเดินเขาที่เนปาลแล้วเมื่อ 7 ปีก่อน “ชิน์กับตรีอยากนั่งเรือมั้ย หรืออยากรอวันสุดท้าย?”

    “ถ้ามีเวลาจะนั่งวันนี้ก็ได้” ผมตอบ “แต่เรามีเวลาพอมั้ย?”

    “ไม่รู้ ลองถามเขา” พี่นันหมายถึง Sona

    “ลองไปดูกัน” Sona ตอบเมื่อผมถามเป็นภาษาอังกฤษ

    เราเดินไปที่ท่าเรือซึ่งยังเต็มไปด้วยผู้คนที่มารอเดินทางไปยังเกาะกลางน้ำ

    “Sona จะไปด้วยมั้ย?” พี่นันถามเป็นภาษาอังกฤษ “พวกเราจ่ายให้”

    “โอเค” Sona ตอบ

    Sona ช่วยต่อแถวซื้อตั๋วให้ แล้วเราก็ไปรับเสื้อชูชีพมาใส่กันคนละตัว

    ที่ท่าขึ้นเรือ ผู้คนที่ใส่เสื้อชูชีพมาออแย่งกันขึ้นเรือที่แทรกหาที่จอดรับผู้โดยสารกัน

    ท่าเรือที่ทะเลสาบ Phewa

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

    ทะเลสาบ Phewa

    เรือวนรอบ Tal Barahi Mandir ซึ่งเป็นเกาะกลางน้ำที่ตั้งของศาลเจ้าพระแม่วราหิของศาสนาฮินดู 1 รอบ ก่อนจะจอดเทียบท่าบนเกาะ

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

    ทุกคนไปถึงหน้าศาลก็ยกมือไหว้แล้วก็เดินออกมา ไม่มีใครถอดรองเท้า เพราะทุกคนใส่รองเท้าเดินเขากันหมด

    Group selfie ที่ Tal Barahi Mandir: ผม Sona ตรี พี่นัน พี่อู๋ (ซ้ายไปขวา)

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

    Sona ช่วยกันหาเรือให้ แต่เราต้องนั่งแยกกันมา ผมมากับพี่อู๋ ส่วนตรีกับพี่นันตามมาทีหลังกับ Sona

    .

    “อยากกินที่นี่มั้ย?” Sona ถามเมื่อพาเรามาหยุดหน้าร้านอาหารแบบตะวันตกแห่งหนึ่ง

    “ชิน์อยากกินอะไร?” พี่นันช่วยถามเมื่อเห็นผมลังเล

    “อยากลองอาหารท้องถิ่น” ผมบอก Sona เป็นภาษาอังกฤษ

    “อาหารท้องถิ่น” Sona พูด “มีหลายร้าน ลองเดินดูตามถนนได้”

    “มี 2 ร้าน” พี่นันยื่นจอมือถือให้ดู “มีร้านนี้ที่ติดทะเลสาบ กับอีกร้านที่อยู่หัวมุมตรงนี้”

    เราไปที่ร้านตรงหัวมุมกัน

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

    เราเข้าไปนั่งแล้วก็สั่งอาหารกันคนละจาน พร้อมอาหารแชร์ตรงกลาง 2 จาน สำหรับเครื่องดื่ม ผมสั่ง masala tea ซึ่งรสชาติไม่ต่างกับ masala tea ใน Kathmandu คือมีกลิ่นหอม แต่รสไม่จัด ทำให้ผมรู้ว่า masala tea น่าจะไม่เน้นรสจัดเหมือนกับ chai tea

    มื้อเย็นที่ Pokhara

    อาหารที่ผมสั่ง คือ dal bhat แบบที่กินเมื่อวันแรกและกลางวันของวันนี้

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

    เราเดินไปตามถนนและหยุดที่ร้านวอฟเฟิลแห่งหนึ่ง สั่งไอติมและวอฟเฟิลที่เราเอามาประกอบร่างกันเอง

    Fusion: ice cream + waffle 👍

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

    “พี่นันกับพี่อู๋กลับก่อน” พี่นันบอกเมื่อออกจากร้าน “ฝากด้วย” พี่นันบอกกับ Sona

    “ไปถนนคนเดินกัน” ผมบอก Sona

    ถนนคนเดินของ Pokhara คือ ทางเดินริมทะเลสาบ ตอนนี้พระอาทิตย์ตกดินแล้ว ที่ท่าเรือมีการทำพิธีทางศาสนาที่ผมเห็นใน YouTube ก่อนมาที่นี่

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

    วิวตอนกลางคืนที่ทะเลสาบ Phewa

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

    🎉 Daily Quest Complete
    [/] Kathmandu to Pokhara (🚎 7h)
    [/] Explore Pokhara

    Sona พาเดินเข้ามาในซอยที่จะทะลุไปถึงโรงแรม

    “ซอยที่นี่ตั้งเป็นตัวเลข 1, 2, 3, 4 ไปเรื่อย ๆ” Sona ชวนคุย “ซอยโรงแรมเรา คือ ซอย 9 แต่ละโรงแรมจะมีรหัสของตัวเอง อย่างของเราคือ 9A”

    Hidden Kingdom Hotel, 9A

    เราแยกกับ Sona ที่หน้าโรงแรม Sona น่าจะพักอยู่อีกที่ที่อยู่ในซอยเดียวกัน

    “พรุ่งนี้ เจอกัน 7 โมง” Sona บอก “กินข้าวเช้าเสร็จก็ยกกระเป๋าลงมารอที่ล็อบบี้ได้เลย”

    พรุ่งนี้ เราจะเริ่มเดินเขาเป็นวันแรก

    ป้ายแรก คือ Chhomrong เพื่อไปพิชิต ABC


    ⏭️ To Be Continued …

    🏆 Part 1 Complete

    👉 กดเพื่อไป Part ถัดไป:

    • Part 2/4. The Conquest of Annapurna Base Camp (coming soon)

    🤫 Cheat Code

    Press X + O to skip to …

    • Part 3/4: The Search for Tissue, Tato Paani, & Fishtail (coming soon)
    • Part 4/4. Beyond Journey’s End (coming soon)

    🙏 End Credits

    ขอขอบคุณ:

    1. Ro และพี่นัน สำหรับภาพประกอบ
    2. บอส ที่ช่วยอ่าน draft แรก ๆ
  • Basic LangChain: วิธีใช้ LangChain เพื่อทำงานกับ LLM อย่างง่าย ใน 5 ขั้นตอน—ตัวอย่างการสร้าง AI ตอบคำถามเรื่อง Mental Model

    Basic LangChain: วิธีใช้ LangChain เพื่อทำงานกับ LLM อย่างง่าย ใน 5 ขั้นตอน—ตัวอย่างการสร้าง AI ตอบคำถามเรื่อง Mental Model

    langchain เป็น framework สำหรับสร้างแอปพลิเคชั่นที่ใช้ large language model (LLM) ที่ช่วยลดความยุ่งยากการเรียกใช้งาน API โดยตรง

    langchain มีข้อดี 3 อย่าง:

    1. Modular: ใช้งานง่าย ด้วยการเขียนเป็นส่วน ๆ หรือ module (เหมือนเลโก้)
    2. Use case: รองรับการใช้งานหลายหลาก เพราะสามารถประกอบ module เข้าด้วยกันได้หลายแบบ (ต่อเลโก้ได้หลายแบบ)
    3. Integration: ใช้งานร่วมเครื่องมือได้กับหลากหลาย เช่น OpenAI, Hugging Face, databricks

    ในบทความนี้ เรามาดูวิธีใช้ langchain เพื่อทำงานกับ LLM อย่างง่ายกัน

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 🧠 Mental Model
    2. 🤖 Step 1. Set LLM
    3. 💬 Step 2. Set Prompt
    4. 📦 Step 3. Set Output Structure
    5. ⛓️‍💥 Step 4. Chain
    6. 🏃 Step 5. Run
      1. ☝️ Single Run
      2. 🎳 Batch Run
    7. 💪 Summary
    8. 🫵 Your Turn
    9. 📄 References

    🧠 Mental Model

    การใช้งาน langchain มีอยู่ 5 ขั้นตอน ได้แก่:

    1. Set LLM: เลือก LLM ที่ต้องการ
    2. Set prompt: สร้าง prompt สำหรับคุยกับ LLM
    3. Set output structure: กำหนดหน้าตา output ที่ต้องการ
    4. Chain: เชื่อม LLM และ prompt เข้าด้วยกัน เพื่อสร้าง pipeline ในการเรียกใช้ LLM
    5. Run: เรียกใช้งาน LLM

    เราไปดูการใช้งาน ผ่านการสร้าง chatbot ตอบคำถามเกี่ยวกับ mental model กัน


    🤖 Step 1. Set LLM

    langchain รองรับการใช้งาน LLM หลายเจ้า เช่น:

    ในตัวอย่าง เราจะเลือกใช้ Gemini โดยเริ่มจากโหลด module สำหรับเชื่อมกับ Gemini:

    # Import package
    from langchain_google_genai import ChatGoogleGenerativeAI
    

    แล้วสร้าง LLM instance ขึ้นมา:

    # Create model instance
    llm = ChatGoogleGenerativeAI(
        model="gemini-2.5-flash",
        temperature=0.5,
        api_key="YOUR_API_KEY"
    )
    
    • model: ชื่อ LLM ที่เราต้องการใช้งาน
    • temperature: ระดับความสุ่มของคำตอบจาก LLM (ค่ายิ่งสูง คำตอบยิ่งมีความหลากหลาย ส่วนยิ่งค่าน้อย คำตอบจะยิ่งมีความคล้ายคลึงกัน)
    • api_key: API key สำหรับใช้งาน LLM (ดูวิธีการสร้าง Gemini API key ฟรี)

    💬 Step 2. Set Prompt

    ในขั้นที่ 2 เราจะสร้าง prompt สำหรับคุยกับ LLM กัน:

    1. โหลด module
    2. กำหนด prompt

    ขั้นย่อยที่ 1. โหลด module สำหรับสร้าง prompt:

    # Import package
    from langchain_core.prompts import ChatPromptTemplate
    

    ขั้นย่อยที่ 2. กำหนด prompt โดยแยกระหว่าง:

    1. System prompt: บทบาทและสไตล์การตอบคำถามของ LLM (เช่น ผู้เชี่ยวชาญด้าน mental model)
    2. User prompt: คำถามที่จะส่งให้ LLM (เช่น บอกให้อธิบาย mental model ที่ต้องการ)

    ตัวอย่าง system และ user prompts:

    # Define system prompt
    system_prompt = """
    You are an expert curator of mental models across science, philosophy, and applied reasoning.
    
    Your task is to explain mental models clearly and accurately using a fixed schema.
    
    If the origin of a model is unclear or debated, state that explicitly.
    
    Do not invent historical sources. Be concise and concrete.
    """
    
    # Define user prompt
    user_prompt = "Explain the following mental model: {model_query}"
    

    จากนั้น ประกอบ prompts เข้าด้วยกัน:

    # Create prompt template
    prompts = ChatPromptTemplate.from_messages(
        [
            # System prompt
            ("system", system_prompt.strip()),
    
            # User prompt
            ("human", user_prompt)
        ]
    )
    

    เราสามารถดูตัวอย่าง prompt ได้ด้วย .format_messages():

    # Inspect prompt template
    prompts.format_messages(model_query="Pareto Principle")
    

    ผลลัพธ์:

    [SystemMessage(content='You are an expert curator of mental models across science, philosophy, and applied reasoning.\\n\\nYour task is to explain mental models clearly and accurately using a fixed schema.\\n\\nIf the origin of a model is unclear or debated, state that explicitly.\\n\\nDo not invent historical sources. Be concise and concrete.', additional_kwargs={}, response_metadata={}),
     HumanMessage(content='Explain the following mental model: Pareto Princinple', additional_kwargs={}, response_metadata={})]
    

    📦 Step 3. Set Output Structure

    ในขั้นที่ 3 เราจะกำหนดหน้าตา output ที่เราต้องการ

    เช่น ถ้าเราต้องการให้คืนค่า JSON แบบนี้:

    {
    "model_name": "",
    "origin": "",
    "description": "",
    "example": "",
    "tags": []
    }

    เรากำหนดได้โดยใช้ pydantic และ typing packages แบบนี้:

    # Import packages
    from pydantic import BaseModel, Field
    from typing import List, Literal
    
    # Define output structure
    class MentalModel(BaseModel):
    
        # Mental model name
        model_name: str = Field(description="The commonly accepted name of the mental model")
    
        # Source/origin
        origin: str = Field(
            description="Where the model comes from (person, book, field, or cultural origin)"
        )
    
        # Brief description
        description: str = Field(
            description="A brief explanation of what the mental model is and why it matters"
        )
    
        # Example
        example: str = Field(
            description="A concrete real-world example illustrating the mental model"
        )
    
        # Tags
        tags: List[str] = Field(
            description="Short tags such as decision-making, systems thinking, learning, philosophy"
        )
    

    Note: ดูวิธีใช้ Pydantic

    หลังกำหนดหน้าตา output แล้ว ให้ใส่เข้าไปใน LLM instance แบบนี้:

    # Add output structure to LLM
    llm_with_structured_output = llm.with_structured_output(MentalModel)
    

    ⛓️‍💥 Step 4. Chain

    ในขั้นที่ 4 ให้เราสร้าง chain โดยเชื่อม LLM instance เข้ากับ prompts ด้วย pipe operator (|):

    # Build chain
    chain = prompts | llm_with_structured_output
    

    Note: ให้มองว่า | เป็นลูกศรชี้ทางขวา (prompt → llm)


    🏃 Step 5. Run

    ในขั้นสุดท้าย เราจะเรียกใช้งาน chain ซึ่งทำได้ 2 แบบ:

    1. Single run: เรียกใช้ครั้งเดียว
    2. Batch run: เรียกใช้หลายครั้งพร้อมกัน

    .

    ☝️ Single Run

    เราเรียกใช้งานครั้งเดียวด้วย .invoke()

    ในตัวอย่าง เราจะถามเกี่ยวกับ “compound interest” กัน:

    # Run query
    result = chain.invoke({"model_query": "Compound Interest"})
    

    แสดงผลลัพธ์ใน console:

    # Import package
    import json
    
    # Load result
    result_dict = result.model_dump()
    
    # Print
    print(json.dumps(result_dict, indent=4))
    

    ผลลัพธ์:

    {
        "model_name": "Compound Interest",
        "origin": "Finance, Mathematics; concept dates back to ancient times, formalized in the Renaissance.",
        "description": "Compound interest is the interest on a loan or deposit calculated based on both the initial principal and the accumulated interest from previous periods. It is often called 'interest on interest' and leads to exponential growth over time, making it a powerful force in finance for both wealth creation and debt accumulation.",
        "example": "If you invest $1,000 at an annual interest rate of 5% compounded annually, after the first year you'll have $1,050. In the second year, the 5% interest is calculated on $1,050, not just the original $1,000, leading to a balance of $1,102.50. This snowball effect accelerates over decades, significantly increasing the total return compared to simple interest.",
        "tags": [
            "Finance",
            "Economics",
            "Wealth Building",
            "Decision-making",
            "Long-term thinking"
        ]
    }
    

    .

    🎳 Batch Run

    สำหรับการรันหลายครั้งพร้อมกัน เราจะใช้ .batch() แบบนี้:

    # Create list of mental models
    mental_model_queries = [
        "First Principles Thinking",
        "Occam's Razor",
        "Confirmation Bias"
    ]
    
    # Create batch inputs
    batch_inputs = [{"model_query": query} for query in mental_model_queries]
    
    # Run queries
    results = chain.batch(batch_inputs)
    
    # Instantiate collector
    query_collector = [result.model_dump() for result in results]
    

    แสดงผลลัพธ์ใน console:

    # Instantiate counter
    i = 1
    
    # Loop through elements in collector
    for result in query_collector:
    
        # Print result
        print(f"👉 Query {i}:")
        print(json.dumps(result, indent=4))
        print("\\n")
    
        # Add 1 to counter
        i += 1
    

    ผลลัพธ์:

    👉 Query 1:
    {
        "model_name": "First Principles Thinking",
        "origin": "Often attributed to Aristotle; popularized in modern business by Elon Musk.",
        "description": "First Principles Thinking involves breaking down complex problems into their most basic, fundamental truths or 'first principles,' rather than reasoning by analogy or conventional wisdom. It matters because it allows for innovative solutions by challenging assumptions and building new knowledge from the ground up.",
        "example": "Instead of accepting the high cost of batteries for electric cars, Elon Musk famously broke down a battery into its constituent raw materials (cobalt, nickel, lithium, etc.) to understand their actual cost, then sought ways to procure and assemble them more efficiently, leading to significant cost reductions and innovation.",
        "tags": [
            "Problem-solving",
            "Innovation",
            "Critical Thinking",
            "Decision-making"
        ]
    }
    
    👉 Query 2:
    {
        "model_name": "Occam's Razor",
        "origin": "William of Ockham (14th-century philosopher and theologian)",
        "description": "Occam's Razor is a problem-solving principle stating that among competing hypotheses that explain an event or phenomenon equally well, the simplest solution is most likely the correct one. It advocates for parsimony, suggesting that one should not multiply entities beyond necessity, thereby favoring theories with fewer assumptions.",
        "example": "If you hear hoofbeats outside, it is more likely to be horses than zebras, assuming you are in a location where horses are common and zebras are not. The 'horse' explanation is simpler and requires fewer extraordinary assumptions.",
        "tags": [
            "Philosophy",
            "Decision-making",
            "Problem-solving",
            "Critical thinking",
            "Science"
        ]
    }
    
    👉 Query 3:
    {
        "model_name": "Confirmation Bias",
        "origin": "Psychology; early concepts traced to Francis Bacon's Novum Organum (1620)",
        "description": "Confirmation bias is the tendency to search for, interpret, favor, and recall information in a way that confirms one's pre-existing beliefs or hypotheses. It matters because it can lead to flawed reasoning, poor decision-making, and resistance to new or contradictory evidence, hindering objective analysis.",
        "example": "A person who believes a certain stock will perform well might selectively read news articles and analyst reports that support this positive outlook, while ignoring or downplaying any negative news or warnings about the company.",
        "tags": [
            "cognitive bias",
            "decision-making",
            "psychology",
            "critical thinking"
        ]
    }
    

    💪 Summary

    เราจะได้เห็นได้ว่า langchain เป็น package ที่ใช้ทำงานกับ LLM ได้อย่างง่าย ๆ ใน 5 ขั้นตอน:

    Set LLM: เลือก model
    Set prompt: กำหนด system และ user prompt
    Set output: กำหนด output structure
    Chain: สร้าง pipeline
    Run: เรียกใช้งาน (single & batch)

    🫵 Your Turn

    สำหรับคนที่สนใจศึกษา langchain เพิ่มเติม:


    📄 References

  • Complete Preparation Guide for Nepal Trekking: แนะนำการเตรียมตัวและจัดของ เพื่อไปเดินเขาที่ Nepal ฉบับสมบูรณ์ (จากคนเดินเขาครั้งแรก)

    Complete Preparation Guide for Nepal Trekking: แนะนำการเตรียมตัวและจัดของ เพื่อไปเดินเขาที่ Nepal ฉบับสมบูรณ์ (จากคนเดินเขาครั้งแรก)

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

    พอมีคนมาชวนไปเดินเขาที่ Nepal ผมเลยไม่ลังเลที่จะไปด้วย

    แต่ผมไม่ได้ดูเลยว่า แผนการเที่ยวและการเตรียมตัวเป็นยังไงบ้าง ทำเอาเกือบไม่รอดกลับมา 555 😅

    เพื่อช่วยให้คนที่อยากไป Nepal เตรียมตัวได้พร้อม ผมเลยเขียนบทความนี้ โดยรวบรวมข้อมูลเท่าที่รู้จากการไปเที่ยวเมื่อต้นเดือนที่ผ่านมาเอาไว้ให้

    บทความนี้ครอบคลุมตั้งแต่:

    1. เส้นทางการเดินเขา
    2. วีซ่า, เงิน, SIM card
    3. การเตรียมร่างกาย
    4. การจัดกระเป๋า

    ผมหวังว่า บทความนี้จะเป็นประโยชน์สำหรับคนที่กำลังจะไป Nepal นะครับ

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 🏔️ Travel Plan
    2. 🏟️ Guided vs Self-Directed
    3. 🛂 Visa
    4. 💰 Money
      1. 💴 NPR
      2. 💵 USD
      3. 💶 THB
      4. 💳 How Much to Bring?
    5. 📞 SIM Card
      1. 📶 Roaming Package
      2. ☎️ Local SIM
      3. 🧑‍⚖️ Verdict
    6. 📉 Insurance
      1. ✈️ Travel Insurance
      2. 🏞️ Trekking Insurance
    7. 🏃 Body Prep
    8. 🧳 Packing
    9. 👕 Clothes & Gear
      1. 👳‍♀️ Head
      2. 🙈 Face & Neck
      3. 💪 Arms & Hands
      4. 🎽 Upper Body
      5. 🩲 Lower Body
    10. 💊 Food & Medicine
      1. 🍔 Food & Drink
      2. 🤧 Cold
      3. 😣 Stomach
      4. 🚀 Secret Weapon
      5. ⛑️ First-Aid
      6. 🧴 Body Care
    11. 🔌 Electronics
    12. 📄 References

    🏔️ Travel Plan

    เพื่อเป็นบริบทในการอ่าน trip ของผมใช้เวลา 15 วัน (1–15 Apr 2026) โดยแบ่งเป็น 3 ส่วน:

    1. ขาไป (Days 1–3)
    2. เดินเขา (Days 4–13) ซึ่งแบ่งเป็น 2 ส่วน:
      1. ABC route (Days 4–9)
      2. Mardi route (Days 10–13)
    3. ขากลับ (Days 14–15)
    DayFromToTransport
    1BangkokKathmanduFlight
    2KathmanduKathmandu
    3KathmanduPokharaCoach
    4PokharaChhomrongJeep + Trekking
    5ChhomrongDovanTrekking
    6DovanDeuraliTrekking
    7DeuraliABCTrekking
    8ABCBambooTrekking
    9BambooJhinu DandaTrekking
    10Jhinu DandaForest CampJeep + Trekking
    11Forest CampHigh CampTrekking
    12High CampMardi ViewpointTrekking
    13High CampPokharaTrekking + Jeep
    14PokharaKathmanduCoach
    15KathmanduBangkokFlight

    Note:

    • ABC ความสูง 4,100 เมตร
    • Mardi ความสูง 4,500 เมตร
    ยอดเขา Machhapuchhare ที่เห็นจาก Mardi route

    🏟️ Guided vs Self-Directed

    การเดินเขาที่ Nepal ทำได้ 2 แบบ:

    1. ไปกับทัวร์: ข้อดี คือ มีคนดูแลเรื่องสถานที่ เส้นทาง และใบอนุญาตให้พร้อม
    2. ไปเอง: ต้องจัดการเรื่องแผน สถานที่ และใบอนุญาตเอง แต่มีอิสระในการวางแผนและจัดการมากกว่า

    ผมเลือกไปกับทัวร์ Heaven on Nepal จากที่พี่ในกลุ่มดูวิดีโอของพลอย

    == Heaven on Nepal ==
    .
    👉 Heaven on Nepal เป็นทัวร์ที่ดี รับจบเกือบทุกด้าน และให้บริการเป็นอย่างดี
    .
    Heaven on Nepal เป็นทัวร์จาก Nepal ที่จัดรับแขกคนไทยโดยเฉพาะ มีพนักงานที่สามารถพูดไทยได้คอยดูแลระหว่างอยู่ในเมือง เช่น พาไปซื้อของ พาไปแลกเงิน (ช่วยให้ได้ของและอัตราแลกเปลี่ยนที่ดีกว่าถ้าไปเอง)
    .
    Guide ที่พาเดินเขาก็มีประสบการณ์และมีเครือข่ายกับที่พักและลูกหาบ (porter) ระหว่างทางเป็นอย่างดี ทำให้ได้รับบริการที่น่าประทับใจ
    .
    เช่น ตอนขึ้นไปที่ ABC ที่อากาศหนาวจัด guide จัดให้กลุ่มผมได้นอนห้องที่อยู่ติดกับห้องครัว เพราะจะอุ่นกว่าห้องอื่น ๆ (บนเขามีนโยบายงดใช้ heater กัน ทำให้บรรยากาศหนาวกว่าเมื่อก่อน)
    .
    มีหลาย ๆ ครั้งที่พวกเราเดินช้า guide ก็จะให้ porter ที่ขนกระเป๋าไปถึงที่พักแล้ว ย้อนกลับมาช่วยขน backpack เพื่อช่วยให้เราเดินได้ง่ายขึ้น
    .
    ถ้าใครอยากซื้อทัวร์ไปเดินเขา ผมก็แนะนำ Heaven on Nepal นะครับ 😆
    Heaven on Nepal post

    🛂 Visa

    Visa นักท่องเที่ยวทำได้ 2 แบบ:

    1. On arrival: ขอวีซ่าเมื่อไปถึงสนามบิน
    2. Before arrival: ทำวีซ่าก่อนเดินทาง

    สำหรับผมเลือกทำวีซ่าก่อนไป โดยฝากทำผ่านทัวร์ ไม่ต้องเดินเอกสารเอง แค่ต้องเตรียมเอกสาร 3 อย่างให้ทัวร์:

    1. หน้า passport (ส่งผ่าน LINE)
    2. รูปถ่าย (สำหรับติดในวีซ่า)
    3. ค่าธรรมเนียม 950 บาท

    Note: สำหรับคนที่ต้องการยื่นวีซ่าด้วยตัวเอง สามารถอ่านรายละเอียดได้ที่ VISA Services Information


    💰 Money

    เราพกเงินไป Nepal ได้ 3 สกุล:

    1. Nepalese Rupee (NPR): สำหรับใช้จ่าย
    2. US dollar (USD): สำหรับใช้จ่ายหรือแลกเป็น NPR
    3. Thai Baht (THB): สำหรับแลกเป็น NPR

    .

    💴 NPR

    เงิน NPR

    NPR ใช้จ่ายหลักใน Nepal

    ข้าวจานหนึ่งใน Nepal ราคาราว ๆ 300–1,100 NPR (ขึ้นอยู่กับสถานที่และระดับความสูง)

    ในช่วงที่ผมไป ราคา NPR อยู่ที่:

    1. 1 THB ≃ 4.5 NPR
    2. 1 USD ≃ 145 NPR

    .

    💵 USD

    USD ใช้จ่ายที่ Nepal ได้ เช่น ซื้อของที่สนามบิน หรือระหว่างทางเดินเขา

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

    ทางที่ดี เราควรแลก USD เป็น NPR สำหรับใช้จ่ายใน Nepal

    เงิน USD แบบมีแถบสีฟ้าคาด
    == Old USD Notes ==
    .
    👉 ก่อนไป ผมศึกษาเกี่ยวกับอายุแบงค์ USD ที่ใช้ได้ใน Nepal เพราะผมมีแบงค์ USD ที่ผลิตก่อนปี 2009
    .
    บนอินเทอร์เน็ต คนส่วนใหญ่แนะนำให้ใช้แบงค์ใหม่ที่ผลิตตั้งแต่ ปี 2013 ขึ้นไป หรือแบงค์ที่มีแถบสีฟ้า (ตามรูปด้านบน)
    .
    พอถามทัวร์ ทัวร์แนะนำให้ใช้แบงค์ใหม่ (แต่ไม่ได้บอกว่าใหม่ขนาดไหน) เพราะแบงค์เก่าอาจจะได้อัตราแลกเปลี่ยนที่น้อยกว่า
    .
    แบงค์เก่าไม่เป็นที่ยอมรับใน Nepal เพราะความกลัวแบงค์ปลอม แบงค์ที่มีแถบสีฟ้าน่าจะเป็นตัว guarantee ที่ดีกว่า
    .
    ตอนอยู่ Nepal ผมแลกเงินด้วยแบงค์ปี 2009 และ 2021 ซึ่งมีแถบสีฟ้าทั้งคู่ และได้อัตราแลกเปลี่ยนเท่ากัน ผมเลยไม่รู้ว่าแบงค์ที่เก่ากว่าและไม่มีแถบสีฟ้าจะได้อัตราแลกเปลี่ยนน้อยลง อย่างที่ทัวร์บอกจริงไหม
    .
    เพื่อความสบายใจ ผมแนะนำให้ทุกคนพกแบงค์ใหม่ที่มีแถบสีฟ้าไปสำหรับแลกเงินหรือใช้จ่ายใน Nepal นะครับ 😉

    .

    💶 THB

    THB ใช้จ่ายใน Nepal ไม่ได้ แต่ใช้แลกเป็น NPR ได้ตามร้านแลกเงินใน Thamel (Kathmandu) และ Pokhara

    การแลกด้วย THB สะดวกสบายกว่า USD เพราะเราไม่ต้องแลกเงินไปก่อน และไม่ต้องโดนค่าแลกเปลี่ยน 2 ต่อ

    ก่อนไป Nepal เราสามารถคิดเลขคร่าว ๆ ได้ว่า ใช้เงินสกุลไหน (USD vs THB) แลกเป็น NPR ได้คุ้มกว่ากัน (อย่างตอนผมไป ใช้ THB จะได้ราคา NPR ที่ดีกว่าเล็กน้อย)

    เท่าที่ผมรู้ ในไทยยังไม่มีที่ให้แลก THB เป็น NPR โดยตรง ถ้าจะแลก จะต้องไปแลกที่ Nepal อย่างเดียว

    .

    💳 How Much to Bring?

    เราควรเตรียมเงินไปเท่าไร?

    สำหรับวันเดินเขา อินเทอร์เน็ตแนะนำให้เตรียมเงินวันละ 20–35 USD ส่วนทัวร์แนะนำให้พก 40–50 USD (เพราะต้องให้ทิปกับ guide และ porter หลังจบทัวร์) ซึ่งทั้งสองช่วงเมื่อตีเป็นเงิน Nepal จะอยู่ที่ 3,000–8,000 NPR ต่อวัน

    สำหรับการเดินทางจริง ผมแนะนำให้นำเงินติดตัวไป 4,500–5,000 NPR ต่อวัน โดยคำนวณจาก:

    1. อาหาร: ถ้ากิน dal bhat (อาหาร Nepal ที่เติมข้าวและกับไม่อั้น สำหรับนักเดินเขาและคนกินจุ) ราคา 800–1,100 NPR ต่อมื้อ
    2. น้ำกิน: ขึ้นอยู่กับว่า ตอนกินข้าว เราสั่งน้ำเป็นแก้วหรือกา (ขนาดเล็ก ใหญ่ ใหญ่มาก 😂) ซึ่งราคาอยู่ในช่วง 100–2,100 NPR
    3. ชาร์จไฟ: ครั้งละ 200–400 NPR ต่ออุปกรณ์ (ไม่ได้ชาร์จทุกวัน ถ้ามี power bank อาจจะชาร์จทุก ๆ 2–3 วันแทน)
    4. อาบน้ำร้อน: ครั้งละ 300–400 NPR ต่อคน (ไม่ได้อาบทุกวัน จะได้อาบแค่ช่วงขาไปและขากลับ ขาละ 1–2 วันแรกเท่านั้น)

    Note: ค่าอาหารและของต่าง ๆ จะแพงขึ้นตามระดับความสูง เช่น dal bhat ราคาเริ่มต้นจาก 800 ขึ้นไปเรื่อย ๆ จนถึง 1,100 NPR

    Dal bhat ขุมพลังงานสำหรับการเดินเขา 🐦‍🔥

    📞 SIM Card

    เราเลือก SIM card ได้ 2 แบบ:

    1. Roaming package
    2. Local SIM

    .

    📶 Roaming Package

    Roaming package มีข้อดี 2 อย่าง คือ:

    1. ใช้งานง่าย: ไม่ต้องเปลี่ยน SIM แค่ซื้อ package แล้ว activate ตอนไปถึง Nepal ก็สามารถใช้งานได้เลย
    2. เลือกเครือข่ายได้: เลือกใช้เสาสัญญาณของ Nepal Telecom (NTC หรือ Namaste) หรือ NCell ซึ่งเป็น 2 เจ้าหลักใน Nepal ได้

    Note:

    • NTC จะมีสัญญาณครอบคลุมนอกตัวเมืองและระหว่างเดินเขามากกว่า
    • NCell จะครอบคลุมการใช้งานในเมืองเป็นหลัก

    .

    ☎️ Local SIM

    Local SIM มีข้อดี คือ ราคาถูกกว่า

    ยกตัวอย่างการเดินทาง 15 วัน ราคา roaming package ของ True อยู่ที่ 699+ บาท (data 10 GB)

    True roaming package

    ถ้าซื้อ local SIM อย่าง Namaste ของ NTC จะได้ราคาอยู่ที่ประมาณ 1,100 NPR (~245 บาท) มีอายุใช้งาน 28 วัน (ตอนผมไป มีให้เลือกแค่ 7 วัน หรือ 28 วัน) พร้อม data 20 GB

    จะเห็นได้ว่า local SIM ราคาถูกกว่า และได้วันและ data ที่เยอะกว่ามาก

    ราคา SIM card ของ NTC ใน Kathmandu (Credit: Rohil Shakya)
    Namaste SIM card ของ NTC

    Note:

    • เราสามารถขอ local SIM แบบ e-SIM ได้ แต่ค่าใช้จ่ายและการติดต่ออาจจะต้องเปลี่ยนไป
    • ผมซื้อ local SIM จากร้านข้างทางที่ทัวร์พาไป

    .

    🧑‍⚖️ Verdict

    สำหรับคนที่ต้องการความสะดวกสบาย ให้ใช้ roaming package

    ส่วนสำหรับคนที่ต้องการประหยัดเงิน ให้ซื้อ local SIM ที่ Nepal


    📉 Insurance

    สำหรับการเดินเขาที่ Nepal เราจะต้องซื้อประกัน 2 แบบ:

    1. ประกันเดินทาง: สำหรับการเดินทางทั่วไป (เช่น กระเป๋าหาย, เที่ยวบิน delay, เจ็บป่วยระหว่างเดินทาง)
    2. ประกันเดินเขา: คุ้มครองการบาดเจ็บหรือเจ็บป่วยในระหว่างเดินเขาที่มีความสูงกว่าปกติ (เช่น สูงกว่า 4,500 เมตร)

    .

    ✈️ Travel Insurance

    สำหรับประกันเดินทาง กลุ่มผมเลือกใช้ 2 เจ้า:

    1. MSIG: ผมเลือกเจ้านี้ เพราะใช้สำหรับเดินทางไปประเทศอื่นในปีเดียวกันด้วย
    2. Chubb: คนอื่นเลือกใช้เจ้านี้ เพราะราคาย่อมเยา

    .

    🏞️ Trekking Insurance

    สำหรับประกันเดินเขา เรามีให้เลือกหลายตัว

    จากการเปิดดูใน Facebook จะเห็นว่าเจ้าที่คนนิยมใช้ คือ:

    1. WorldTrips
    2. ASC 360
    3. Sompo
    4. Nepal Trekking Insurance

    ส่วนทัวร์แนะนำประกัน 2 เจ้านี้:

    1. Himalayan Guardian
    2. ISA
    Heaven on Nepal post

    กลุ่มผมเลือก Himalayan Guardian โดยผมซื้อผ่านทัวร์อีกที เพราะ:

    1. ประกันอื่นเป็นของต่างประเทศ ซึ่งหากเกิดเหตุฉุกเฉิน จะติดต่อยาก (เช่น เรียก ฮ. มารับยาก)
    2. ประกันบางเจ้า claim ยาก หรือ claim ไม่ได้ตามจริง

    แผนที่ผมเลือกเป็นแผน 14 วัน ซึ่งครอบคลุมความสูง 5,500 เมตร (ไม่มี 4,500 เมตรให้เลือก) ราคาอยู่ที่ 162 USD ซึ่งครอบคลุมการเรียก ฮ. มารับในกรณีฉุกเฉิน (emergency medical evacuation)

    == Buy or Not to Buy? ==
    .
    👉 ทัวร์แนะนำว่า ไม่จำเป็นต้องซื้อประกันเดินเขาก็ได้ เพราะโอกาสที่จะเรียก ฮ. มารับมีน้อยมาก (~5%)
    .
    สำหรับใครที่คิดว่า ไม่น่าเจอเหตุฉุกเฉินระหว่างเดินเขา ก็สามารถ skip ประกันเดินเขาไปได้
    .
    แต่ใครที่อยากซื้อประกันเพื่อความสบายใจ แนะนำให้ดู 2 อย่าง:
    ระดับความสูงที่คุ้มครอง 🗻
    ครอบคลุมการเรียก ฮ. มารับในกรณีฉุกเฉินไหม 🚁
    เฮลิคอปเตอร์แบบที่ใช้สำหรับ emergency medical evacuation

    🏃 Body Prep

    ผมออกกำลัง 2 แบบ สำหรับเตรียมตัวไปเดินเขา:

    1. Cardio เพื่อเพิ่มความอึด (ปกติ ผมเป็นคนไม่ออกกำลังกาย)
    2. Leg day เพื่อฝึกกล้ามเนื้อของขา

    Note: ปกติ ผมเป็นคนที่ไม่ออกกำลังกาย และใช้เวลาส่วนใหญ่ไปกับการนั่ง/นอน

    ผมเตรียมการออกกำลังกายไว้ 4 อย่าง เพื่อเล่นสลับกันไปเรื่อย ๆ เป็นเวลา 2 เดือนก่อนเริ่มเดินทาง:

    ExerciseDurationHR Zone
    เดินชัน (ความชัน 8–12)45–60 min2
    ปั่นจักรยาน45–60 min2
    Elliptical45–60 min2
    Leg day

    Note: ตอนแรก ผมจะต้องออกกำลังกาย 3 เดือน แต่ด้วยตารางเวลา ทำให้ออกได้ไม่ครบ

    == Do Your Leg Day ==
    .
    👉 Cardio ว่ายากแล้ว leg day ยากกว่า
    .
    Leg day เลยกลายเป็นการออกกำลังกายที่ผม skip เยอะที่สุด 😂
    .
    และผลที่ตามมาก็ คือ เจ็บเข่าตอนขาลงเขา เพราะกล้ามเนื้อขาไม่ชินกับการใช้งานหนัก
    .
    สำหรับคนที่เตรียมตัวไป Nepal ผมแนะนำให้ฝึก leg day เยอะหน่อย และอาจจะเสริม cardio การเดินขึ้นลงบันได เพื่อให้กล้ามเนื้อชินกับขาขึ้นขาลง 🙂‍↕️

    🧳 Packing

    .

    🛄 Weight

    การเดินทางจะมีการจัดกระเป๋า 3 ครั้ง:

    1. ขาไป: จัดกระเป๋าสำหรับบินไป Nepal
    2. เดินเขา: ถ่ายของจากกระเป๋าลาก ใส่ duffle bag (กระเป๋ากันน้ำ) ที่ทัวร์เตรียมไว้ให้ เพื่อให้ลูกหาบ (porter) ขนขึ้นเขาให้
    3. ขากลับ: ถ่ายของจาก duffle bag กลับกระเป๋าลาก
    Duffle bag ที่ทัวร์เตรียมไว้ให้

    ในการจัดกระเป๋า เราต้องคำนึงถึง 2 อย่าง:

    1. น้ำหนักขึ้นเครื่อง: ขึ้นอยู่กับสายการบิน อย่างผมได้น้ำหนัก 15 kg โหลด และ 7 kg ถือขึ้นเครื่อง
    2. น้ำหนักที่ลูกหาบ (porter) ขนได้: porter 1 คนจะขนน้ำหนักได้ไม่เกิน 20–30 kg ในกรณีผม porter 1 คนจะขนกระเป๋าของลูกทัวร์ 2 คน (25 kg) ทำให้กระเป๋าผมต้องมีน้ำหนักไม่เกิน 12.5 kg (ถ้ามากกว่านั้น จะต้องใส่ backpack ที่ติดตัวไป)

    ถ้าเราเอาน้ำหนักไปเยอะ แต่มี porter ไม่พอ เราก็จะขนของขึ้นเขาได้ไม่หมด เราควรจะต้องจัดของให้พอดีกับจำนวน porter ที่เราจะได้รับ

    .

    🎒 Bags

    กระเป๋าที่ควรเอาไป มี 2 ใบ:

    1. กระเป๋าลาก: สำหรับใส่ของส่วนใหญ่ ไว้โหลดใต้ตอนเครื่อง
    2. Backpack: สำหรับใส่ของติดตัวระหว่างเดินเขา ควรเป็นแบบสำหรับเดินเขา เพื่อลดอาการปวดเมื่อยเวลาตอนสะพายนาน ๆ

    Note: ควรซื้อที่คุม backpack แบบกันฝนด้วย โดยเฉพาะถ้าไม่ใช้เสื้อกันฝนแบบคุมทั้งตัวและกระเป๋า

    กระเป๋าอื่น ๆ ที่แนะนำให้เอาไปด้วย:

    1. ถุงผ้ากีฬา: สำหรับใส่ของเวลาเดินเขาระยะสั้น (เช่น เดินขึ้นไปกลับจาก Mardi Viewpoint มาที่พักที่ High Camp และใส่ของ เช่น ของกิน กระติกน้ำ เสื้อกันหนาวสำรอง)
    2. ถุงผ้าใส่ของ: สำหรับซื้อของในเมือง (เช่น ของฝาก)

    👕 Clothes & Gear

    เสื้อผ้าและอุปกรณ์เดินเขาที่ต้องเตรียมไป จะต้องพร้อมสำหรับ 3 สภาพอากาศ:

    1. ร้อน
    2. ฝน
    3. หนาว + หิมะ + ลมแรง

    ตามที่ผมจัดกระเป๋า แนะนำให้เตรียมไปตามนี้:

    .

    1. หมวกกันแดด: จะเป็น cap หรือหมวกปีกบานก็ได้
    2. หมวกไหมพรม (beanie): สำคัญมาก เพราะช่วยให้ร่างกายอบอุ่นและไม่ป่วยง่าย ใส่ทั้งระหว่างเดินเขาและตอนนอนในอากาศหนาว
    3. ไฟฉายติดหัว (head lamp): สำหรับใช้เดินเขาตอนมืด และเข้าห้องน้ำตอนกลางคืน (บางที่ไม่มีไฟให้ใช้ตอนกลางคืน)

    .

    🙈 Face & Neck

    1. แว่นกันแดด: สำหรับกันแดดในอากาศร้อนและในหิมะ
    2. ผ้าบัฟ (buff): สำหรับกันฝุ่นเวลาเจอทางลูกรัง และปิดจมูก/หัวเพื่อให้อบอุ่นในอากาศหนาว
    3. ผ้าพันคอ: สำหรับกันหนาว

    .

    💪 Arms & Hands

    1. ปลอกแขน: สำหรับกันแดด
    2. ถุงมือ: สำหรับกันหนาว แนะนำให้เตรียมไว้หลายคู่ที่หนาต่างกัน เพื่อใส่ในแต่ละระดับความสูง และควรมีคู่ที่กันน้ำ/หิมะได้
    3. นาฬิกากีฬา: สำหรับวัด heart rate (เพราะถ้าหัวใจเต้นแรงเกิน จะต้องหยุดพัก) และถ้าวัดระดับ oxygen และความสูงระหว่างเดินเขาได้ด้วยก็จะดี
    4. ไม้เดินเขา: แนะนำให้เอาไป 2 ไม้ แต่ระหว่างเดินอาจใช้ข้างเดียวหรือไม่ใช้เลยก็ได้ แล้วแต่คนถนัด
    ไม้เดินเขา

    .

    🎽 Upper Body

    1. เสื้อยืด: แนะนำแบบแห้งเร็ว เช่น เสื้อวิ่ง/ออกกำลังกาย เพราะจะเหงื่อออกระหว่างเดินเขา (แม้ในอากาศหนาว) และเผื่อซัก-ตากเพื่อใส่ซ้ำได้ง่าย
    2. เสื้อกันหนาว: แนะนำให้เตรียมไว้หลายตัว สำหรับใส่ซ้อนกันหรือใส่ทีละตัวก็ได้ เพราะความหนาวแต่ละจุดไม่เท่ากัน สำหรับผมเตรียมไป 4 ตัว คือ sweater, เสื้อกันหนาวแบบบาง, fleece, เสื้อขนเป็ดน้ำหนักเบา
    3. เสื้อกันลม: ช่วยกันหนาว โดยเฉพาะเวลาลมแรง ๆ
    4. เสื้อกันฝน: แนะนำให้เป็นแบบคลุมทั้งตัวและ backpack เพราะเวลาใส่จะง่าย และทำให้กระเป๋าไม่เปียก (ตัวอย่าง) ใส่ทั้งเวลาเจอฝนและหิมะ
    5. ร่ม (optional): บางคนใช้ร่มแทนเสื้อกันฝน ซึ่งข้อดี คือ น้ำหนักเบา แต่ข้อเสีย คือ ต้องถือร่มตลอดเวลา
    6. HEATTECH: ช่วยให้ตัวอุ่นเวลาขึ้นไปบนที่สูง แนะนำให้เตรียมไว้ทั้งแบบเสื้อ กางเกง และถุงเท้า

    .

    🩲 Lower Body

    1. กางเกงใน: จะใช้แบบทั่วไป หรือแบบใช้แล้วทิ้งก็ได้
    2. กางเกงเดินเขา: แนะนำให้พกไป 2–3 ตัวพอ และถ้าเป็นแบบถอดขาได้ก็จะดี เผื่อเปลี่ยนเป็นขาสั้นเวลาอากาศร้อน
    3. กางเกงขาสั้น: สำหรับใส่ระหว่างพัก หรือใส่นอนในช่วงที่อากาศไม่หนาวมาก
    4. กางเกงขายาว: สำหรับใส่นอน แนะนำให้เป็นแบบกันหนาวได้
    5. ถุงเท้า: แนะนำให้เตรียมไว้ทั้งแบบบางและแบบหนา สำหรับช่วงอากาศร้อนและอากาศหนาว และแนะนำให้เป็นแบบยาว เพื่อป้องกันรองเท้ากัดและทากดูดเลือดในบางฤดู
    6. รองเท้าแตะ: สำหรับใส่อาบน้ำ และระหว่างพัก
    7. รองเท้าเดินเขา: ควรเป็นแบบหุ้มส้นสูง เพื่อกันข้อเท้าพลิก และควรเลือกแบบกันน้ำ/หิมะได้ (ผมเลือกซื้อยี่ห้อ Merrell ซึ่งใช้ดีมาก)
    8. Crampons: โซ่หนามติดรองเท้า สำหรับใส่เดินกันลื่นบนหิมะ สามารถหาซื้อได้ใน Nepal (ผมซื้อมาคู่ละ 1,000 NPR หรือ ~220 บาท)
    Crampons

    .

    🧻 Other

    1. ผ้าเช็ดตัว: ควรเอาแบบน้ำหนักเบาและแห้งเร็วไป
    2. ผ้าเช็ดเหงื่อ: สำหรับเช็ดเหงื่อเวลาเดิน ควรเอาแบบน้ำหนักเบาและแห้งเร็ว
    3. ที่หนีบผ้า: สำหรับตากผ้าเวลาอยู่ที่พัก
    4. ถุงใส่เสื้อผ้าใช้แล้ว

    💊 Food & Medicine

    สำหรับอาหารและยาที่ควรเตรียมไป มีดังนี้:

    .

    🍔 Food & Drink

    1. ลูกอม: ช่วยให้รู้สึกสดชื่นระหว่างเดินเขา
    2. Power bar: ช่วยให้พลังงานระหว่างทาง โดยเฉพาะเวลาหิวมาก ๆ แต่ยังไปไม่ถึงจุดหมาย
    3. ขนม: เช่น มันฝรั่งทอดกรอบ สำหรับกินเล่นระหว่างพัก
    4. บะหมี่สำเร็จรูป: สำหรับทานแก้เบื่อ (เพราะอาหารระหว่างเดินเขาใช้เมนูเดียวกันตลอดทาง)
    5. Aquatabs: ยาฆ่าเชื้อ สำหรับใส่ในน้ำก๊อก/น้ำจากลำธารเพื่อเปลี่ยนให้เป็นน้ำกิน สามารถหาซื้อใน Nepal ได้ (ราคาถูกกว่าไทย)
    6. ขวดน้ำ: แนะนำให้เป็นแบบเก็บความร้อนได้ สำหรับซื้อน้ำร้อนกินในที่สูง (ผมพกไป 2 ขวด ขวด 1 ลิตร สำหรับใส่น้ำเย็น และขวด 600 ml สำหรับใส่น้ำร้อน)
    ถ้ามีขวดน้ำเก็บความร้อน ก็จะจิบชาระหว่างทางได้ ☕️
    == Where’s Water? ==
    .
    👉 ระหว่างเดินเขา เราหาน้ำกินได้ 2 แบบ:
    .
    เติมจากก๊อกน้ำ หรือลำธาร: เติมแล้วจะต้องใส่ Aquatabs ด้วย โดยเฉพาะน้ำก๊อกที่ไม่สามารถใช้เป็นน้ำดื่มได้โดยตรง และเสี่ยงที่จะท้องเสีย
    .
    ซื้อ: ขอซื้อน้ำสะอาดได้ตามที่พัก ซึ่งน้ำที่นำมาขายจะเป็นน้ำก๊อกหรือน้ำตามธรรมชาติ (เช่น หิมะที่เก็บไว้) เอามากรองหรือต้มให้เราดื่ม
    .
    แนะนำว่า ใครที่ไม่กล้ากินน้ำก๊อกที่ใส่ Aquatabs ก็ควรซื้อจากที่พักตามทางแทน โดยวันหนึ่งควรกินได้อย่างน้อย 2–3 ลิตร ขึ้นอยู่กับความสูง 👍

    Note:

    • เวลาพักระหว่างเดินเขา ควรซื้ออาหารของที่พักด้วย ไม่ควรกินแต่ของที่เอามาอย่างเดียว เพราะรายได้หลักของที่พักมาจากค่าอาหาร
    • สำหรับ ABC (ตั้งแต่ Bamboo ขึ้นไป) จะไม่มีเนื้อสัตว์ให้กิน เพราะเป็นเขตศักดิ์สิทธิ์ (มีแค่ผัก ไข่ และปลาเท่านั้น)

    .

    🤧 Cold

    ยาแก้แพ้อากาศหรืออาการหวัด จากอากาศหนาว/แห้งของ Nepal:

    1. ยาลดไข้
    2. ยาแก้แพ้
    3. ยาแก้คัดจมูก
    4. ยาอมแก้เจ็บคอ
    5. ยาแก้อักเสบ

    .

    😣 Stomach

    ยาสำหรับอาการท้องเสีย ท้องผูก หรือปวดท้อง:

    1. กาวิสคอน (Gaviscon): แก้อาการกรดไหลย้อน
    2. อีโน (ENO): ลดกรดในกระเพาะ แก้อาการท้องอืด ท้องเฟ้อ
    3. ยาแก้ท้องเสีย: ช่วยให้ถ่ายน้อยลงเวลาท้องเสีย
    4. ยาคาร์บอน: ช่วยให้ถ่ายเป็นก้อนมากขึ้น
    5. เกลือแร่: เพิ่มเกลือแร่ให้กับร่างกาย

    .

    🚀 Secret Weapon

    อาวุธลับที่ช่วยให้ผ่านการเดินเขาที่ Nepal มาได้:

    1. โซดามิ้นท์ (Sodamint หรือ sodium bicarbonate): เป็นยาลดกรด แต่สำหรับการเดินเขา เราจะกินเพื่อลดกรดในกล้ามเนื้อ ทำให้ไม่ปวดเมื้อยจนเกินไป ให้ทาน 2 ครั้ง เช้า-เย็น พอกินแล้วจะเมื้อยน้อยลงเยอะมาก
    2. ยูนิเรน (Uniren): ยาฉีดบรรเทาอาการกล้ามเนื้ออักเสบและปวดเมื่อย ผมได้ขวดนี้ช่วยไว้ตอนกล้ามเนื้อเข่ายึด พอฉีดแล้วทำให้เดินต่อได้
    3. แผ่นแปะแก้ปวด: สำหรับเวลาปวดกล้ามเนื้อมาก ๆ
    4. ยาแก้ความสูง: ขาดไม่ได้ จะต้องกินก่อนขึ้นเขาและก่อนลงเขา ยาจะทำให้ปวดฉี่และหิวน้ำ ทำให้เราดื่มน้ำได้เยอะ ซึ่งจะช่วยให้เลือดไม่ข้นเกินจากการที่ oxygen ในอากาศต่ำ
    5. ที่รัดเข่า: แนะนำให้พกไปด้วย สำหรับคนที่คิดว่าจะปวดเข่าระหว่างเดิน

    .

    ⛑️ First-Aid

    ชุดปฐมพยาบาล:

    1. ยาแก้ปวด
    2. ยาแก้คัน
    3. ยาสมานแผล
    4. ปาสเตอร์ปิดแผล
    5. ยาหยอดตา

    .

    🧴 Body Care

    อุปกรณ์ดูแลผิว:

    1. Lotion: ให้ความชุ่มชื่นกับผิว เพราะอากาศ Nepal หนาวและแห้งมาก
    2. ลิปมัน: สำหรับกันปากแตกจากอาการแห้ง
    3. ครีมกันแดด: โดยเฉพาะขึ้นเขาที่มีหิมะ เพราะแดดหิมะจะแรงกว่าปกติ
    4. ครีมอาบน้ำ: แนะนำให้พกแบบอาบน้ำและสระผมได้ในตัวเดียวกัน เพื่อลดน้ำหนักของที่ขนขึ้นเขา
    5. โฟมล้างหน้า
    6. แปรงสีฟัน + ยาสีฟัน
    7. กรรไกรตัดเล็บ
    8. ทิชชู่แห้ง: สำหรับทำความสะอาดทั่วไป และเข้าห้องน้ำ (ห้องน้ำส่วนใหญ่ไม่มีที่ทำความสะอาดให้ หรือมีแค่ขันน้ำหรือที่ฉีดน้ำ)
    9. ทิชชู่เปียก: สำหรับทำความสะอาดทั่วไป และเช็ดตัวสำหรับวันที่ไม่ได้อาบน้ำ (เพราะอากาศเย็นเกิน)

    Note: สำหรับอุปกรณ์อาบน้ำ แนะนำรวมไว้ในกระเป๋าเล็ก ๆ ที่แขวนได้ เพราะห้องน้ำระหว่างปีนเขาไม่ค่อยมีที่วางสบู่ เสื้อผ้าให้

    == Toilet in High Places ==
    .
    👉 ห้องน้ำระหว่างเดินเขา จะมีอยู่ 2 แบบ:
    โถนั่ง 🚽
    คอห่าน 🏋️
    .
    โดยบางที่ก็มีทั้ง 2 แบบ หรือบางที่ก็มีแค่แบบเดียว
    .
    ถ้าต้องเข้าห้องน้ำระหว่างทาง ให้บอก guide เพื่อหาจุดเหมาะสม เพื่อปลดปล่อยท่ามกลางธรรมชาติ 😌

    🔌 Electronics

    นอกจากอุปกรณ์อิเล็กทรอนิกส์ที่ต้องติดตัวไป อย่างมือถือ กล้อง แล็ปท็อป เราจะต้องเตรียม 2 อย่างนี้ด้วย:

    1. Power bank: แนะนำให้พกแบบใหญ่ที่ชาร์จได้หลายวันไป เพราะระหว่างเดินเขาจะต้องเสียค่าชาร์จไฟตามจำนวนอุปกรณ์ (ราคา 100–400 NPR) ปกติที่ผมทำ คือ ชาร์จทุกอย่างจาก power bank แล้วเอา power bank ไปชาร์จไฟครั้งเดียว
    2. Adapter: หัวแปลงไฟ ใช้เวลาอยู่ในเมือง (หัวแบบ types C, D, M) เพราะบนเขาจะเป็นปลั๊กแบบ universal ที่ใช้หัวเสียบแบบไทยได้
    ที่ชาร์จไฟตามที่พักระหว่างเดินเขา ⚡️

    📄 References

    Visa:

    Money:

    SIM Card:

    Insurance:

  • วิธีใช้ jsonlite เพื่อทำงานกับ JSON ในภาษา R: fromJSON(), toJSON(), read_json(), และ write_json() — ตัวอย่างการทำงานกับข้อมูลขนม

    วิธีใช้ jsonlite เพื่อทำงานกับ JSON ในภาษา R: fromJSON(), toJSON(), read_json(), และ write_json() — ตัวอย่างการทำงานกับข้อมูลขนม

    ในบทความนี้ เราจะไปดูวิธีการใช้ 4 functions จาก jsonlite package สำหรับทำงานกับ JSON (JavaScript Object Notation) ในภาษา R กัน:

    1. fromJSON()
    2. toJSON()
    3. read_json()
    4. write_json()

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 🤔 What Is JSON?
    2. 📦 What Is jsonlite?
    3. 🏁 Getting Started
    4. ⬇️ Function 1. fromJSON()
    5. ⬆️ Function 2. toJSON()
    6. 📖 Function 3. read_json()
    7. ✍️ Function 4. write_json()
    8. 💪 Summary
    9. 😺 GitHub
    10. 📃 References

    🤔 What Is JSON?

    JSON เป็นโครงสร้างข้อมูลที่พบได้บ่อยในระบบคอมพิวเตอร์และแอปพลิเคชันต่าง ๆ เพราะเป็นรูปแบบข้อมูลที่อ่านได้ง่ายทั้งคนและคอมพิวเตอร์

    ตัวอย่าง JSON ที่เก็บข้อมูลขนม:

    [
      {
        "snack_name": "Corn Chips",
        "brand": "Nibble & Dip",
        "price_usd": 2.99,
        "is_vegan": true
      },
      {
        "snack_name": "Pita Chips",
        "brand": "DipMates",
        "price_usd": 4.25,
        "is_vegan": false
      },
      {
        "snack_name": "Tortilla Chips",
        "brand": "Casa Crunch",
        "price_usd": 3.49,
        "is_vegan": true
      }
    ]
    

    Note: อ่านเพิ่มเติมเกี่ยวกับ JSON ได้ที่ What is JSON?


    📦 What Is jsonlite?

    jsonlite เป็น package ขนาดเบาสำหรับทำงานกับ JSON ในภาษา R และมี 4 functions หลักให้เรียกใช้งาน ได้แก่:

    1. fromJSON(): โหลด JSON string (character ที่มีข้อมูลแบบ JSON) เป็น R object (เช่น data frame)
    2. toJSON(): เปลี่ยน R object เป็น JSON string
    3. read_json(): โหลดไฟล์ JSON เป็น R object
    4. write_json(): เปลี่ยน R object เป็นไฟล์ JSON

    เราไปดูวิธีใช้ jsonlite และ 4 functions นี้กัน


    🏁 Getting Started

    ก่อนเริ่มใช้งาน jsonlite เราจะต้องทำ 2 อย่าง ได้แก่:

    1. ติดตั้ง package ด้วย install.packages() (ทำครั้งแรกครั้งเดียว)
    2. โหลด package ด้วย library() (ทำทุกครั้งที่เปิด session ใหม่)
    # Install jsonlite
    install.packages("jsonlite")
    
    # Load jsonlite
    library(jsonlite)
    

    ⬇️ Function 1. fromJSON()

    fromJSON() ใช้เปลี่ยน JSON ที่เป็นอยู่ใน character (JSON string) ให้เป็น R object เช่น list และ data frame

    เช่น เราสามารถเปลี่ยน JSON string แบบนี้:

    # Create a JSON string
    snacks_json_string <- '
    [
      {
        "snack_name": "Corn Chips",
        "brand": "Nibble & Dip",
        "price_usd": 2.99,
        "is_vegan": true
      },
      {
        "snack_name": "Pita Chips",
        "brand": "DipMates",
        "price_usd": 4.25,
        "is_vegan": false
      },
      {
        "snack_name": "Tortilla Chips",
        "brand": "Casa Crunch",
        "price_usd": 3.49,
        "is_vegan": true
      }
    ]
    '
    
    

    ให้เป็น R object ได้แบบนี้:

    # Convert to R object
    snacks_r_obj <- fromJSON(snacks_json_string)
    
    # View the df
    snacks_r_obj
    

    ผลลัพธ์:

          snack_name        brand price_usd is_vegan
    1     Corn Chips Nibble & Dip      2.99     TRUE
    2     Pita Chips     DipMates      4.25    FALSE
    3 Tortilla Chips  Casa Crunch      3.49     TRUE
    

    Note: fromJSON() จะเลือกประเภท R object ให้โดยอัตโนมัติ เช่น ถ้า JSON มีโครงสร้างคล้าย data frame (มีข้อมูลซ้ำ ๆ ที่ดูเหมือน rows และ columns) fromJSON() จะเปลี่ยน JSON string ให้เป็น data frame


    ⬆️ Function 2. toJSON()

    toJSON() ใช้เปลี่ยน R object ให้เป็น JSON string

    เช่น เปลี่ยน data frame นี้:

    # Create a data frame
    snacks_df <- data.frame(
      snack_name = c("Seaweed Thins", "Chickpea Puffs", "BBQ Potato Crisps"),
      brand      = c("OceanBite", "LegumeLab", "Spud & Spark"),
      price_usd  = c(2.45, 3.35, 3.10),
      is_vegan   = c(TRUE, TRUE, FALSE),
      stringsAsFactors = FALSE
    )
    

    ให้เป็น JSON string:

    # Convert to JSON string
    snacks_json_string <- toJSON(snacks_df)
    
    # View the JSON string
    snacks_json_string
    

    ผลลัพธ์:

    [{"snack_name":"Seaweed Thins","brand":"OceanBite","price_usd":2.45,"is_vegan":true},{"snack_name":"Chickpea Puffs","brand":"LegumeLab","price_usd":3.35,"is_vegan":true},{"snack_name":"BBQ Potato Crisps","brand":"Spud & Spark","price_usd":3.1,"is_vegan":false}]
    

    สังเกตว่า ผลลัพธ์ที่ได้มาอ่านยาก เพราะข้อมูลอยู่ในบรรทัดเดียวกันหมด

    ทั้งนี้ เราเปลี่ยนให้ผลลัพธ์อ่านง่ายขึ้นได้ โดยใช้ pretty argument แบบนี้:

    # Convert to JSON string (pretty)
    snacks_json_string_pretty <- toJSON(snacks_df,
    pretty = TRUE)
    # View the JSON string (pretty)
    snacks_json_string_pretty

    ผลลัพธ์:

    [
      {
        "snack_name": "Seaweed Thins",
        "brand": "OceanBite",
        "price_usd": 2.45,
        "is_vegan": true
      },
      {
        "snack_name": "Chickpea Puffs",
        "brand": "LegumeLab",
        "price_usd": 3.35,
        "is_vegan": true
      },
      {
        "snack_name": "BBQ Potato Crisps",
        "brand": "Spud & Spark",
        "price_usd": 3.1,
        "is_vegan": false
      }
    ]
    

    จะเห็นว่า ตอนนี้ JSON string อ่านง่ายกว่าก่อนหน้านี้มาก


    📖 Function 3. read_json()

    read_json() ใช้โหลดไฟล์ JSON เข้ามาใน R

    เช่น เรามีไฟล์ชื่อ snacks.json ที่มีข้อมูลแบบนี้:

    [
      {
        "snack_name": "Plantain Chips",
        "brand": "TropiBite",
        "price_usd": 3.15,
        "is_vegan": true
      },
      {
        "snack_name": "Rice Crackers",
        "brand": "ZenMunch",
        "price_usd": 2.25,
        "is_vegan": true
      },
      {
        "snack_name": "Pretzel Sticks",
        "brand": "Twist & Dip",
        "price_usd": 3.75,
        "is_vegan": true
      }
    ]
    

    เราสามารถโหลดเข้ามาใน R ด้วย read_json() ได้แบบนี้:

    # Read the JSON file
    snacks_from_json_file <- read_json("snacks.json")
    
    # View the result
    snacks_from_json_file
    

    ผลลัพธ์:

    [[1]]
    [[1]]$snack_name
    [1] "Plantain Chips"
    
    [[1]]$brand
    [1] "TropiBite"
    
    [[1]]$price_usd
    [1] 3.15
    
    [[1]]$is_vegan
    [1] TRUE
    
    [[2]]
    [[2]]$snack_name
    [1] "Rice Crackers"
    
    [[2]]$brand
    [1] "ZenMunch"
    
    [[2]]$price_usd
    [1] 2.25
    
    [[2]]$is_vegan
    [1] TRUE
    
    [[3]]
    [[3]]$snack_name
    [1] "Pretzel Sticks"
    
    [[3]]$brand
    [1] "Twist & Dip"
    
    [[3]]$price_usd
    [1] 3.75
    
    [[3]]$is_vegan
    [1] TRUE
    

    ทั้งนี้ read_json() มี simplifyVector argument ที่ช่วยโหลดข้อมูลที่เหมือน data frame ให้เป็น data frame (แทน list) ได้แบบนี้:

    # Read the JSON file (simplified)
    snacks_from_json_file_simplified <- read_json("snacks.json",
                                                  simplifyVector = TRUE)
    
    # View the result (simplified)
    snacks_from_json_file_simplified
    

    ผลลัพธ์:

          snack_name       brand price_usd is_vegan
    1 Plantain Chips   TropiBite      3.15     TRUE
    2  Rice Crackers    ZenMunch      2.25     TRUE
    3 Pretzel Sticks Twist & Dip      3.75     TRUE
    

    ✍️ Function 4. write_json()

    write_json() ใช้เปลี่ยน R object ให้เป็นไฟล์ JSON

    เช่น เปลี่ยน data frame นี้:

    # Create a list
    snacks_df <- data.frame(
      snack_name = c("Cassava Chips", "Lentil Crisps", "Cheese Puffs"),
      brand      = c("RootRush", "Pulse & Crunch", "CheezyPop"),
      price_usd  = c(2.85, 2.65, 3.99),
      is_vegan   = c(TRUE, TRUE, FALSE),
      stringsAsFactors = FALSE
    )
    

    ให้เป็นไฟล์ JSON แบบนี้:

    # Write to JSON
    write_json(snacks_df,
               "snacks_df.json")
    

    ผลลัพธ์:

    [{"snack_name":"Cassava Chips","brand":"RootRush","price_usd":2.85,"is_vegan":true},{"snack_name":"Lentil Crisps","brand":"Pulse & Crunch","price_usd":2.65,"is_vegan":true},{"snack_name":"Cheese Puffs","brand":"CheezyPop","price_usd":3.99,"is_vegan":false}]
    

    เช่นเดียวกับ toJSON(), write_json() มี pretty argument ที่ทำให้ผลลัพธ์อ่านง่ายขึ้นได้:

    # Write to JSON (pretty)
    write_json(snacks_df,
               "snacks_df_pretty.json", 
               pretty = TRUE)
    

    ผลลัพธ์:

    [
      {
        "snack_name": "Cassava Chips",
        "brand": "RootRush",
        "price_usd": 2.85,
        "is_vegan": true
      },
      {
        "snack_name": "Lentil Crisps",
        "brand": "Pulse & Crunch",
        "price_usd": 2.65,
        "is_vegan": true
      },
      {
        "snack_name": "Cheese Puffs",
        "brand": "CheezyPop",
        "price_usd": 3.99,
        "is_vegan": false
      }
    ]
    

    💪 Summary

    ในบทความนี้ เราได้ไปทำความรู้จักกับ 4 functions จาก jsonlite ซึ่งเป็น package สำหรับทำงานกับ JSON ในภาษา R:

    1. fromJSON(): JSON string → R object
    2. toJSON(): R object → JSON string
    3. read_json(): ไฟล์ JSON → R object
    4. write_json(): R object → JSON

    😺 GitHub

    ดูตัวอย่าง code และไฟล์ JSON ทั้งหมดในบทความนี้ได้ที่ GitHub


    📃 References

  • สรุป 5 keywords สำหรับ handle exceptions ใน Python: try, except, else, finally, raise — ตัวอย่างโค้ดการจ่ายเงินออนไลน์

    สรุป 5 keywords สำหรับ handle exceptions ใน Python: try, except, else, finally, raise — ตัวอย่างโค้ดการจ่ายเงินออนไลน์

    Exception หมายถึง error ที่เกิดขึ้นกับ code ที่มี syntax ถูกต้อง

    ยกตัวอย่างเช่น การหารเลขด้วย 0:

    print(5 / 0)
    

    ผลลัพธ์:

    ZeroDivisionError
    

    Exception สามารถทำให้ code หยุดทำงานหรือทำงานผิดพลาดได้

    ดังนั้น ในการเขียน code เราควรกำหนดวิธีในการจัดการกับ exception เพื่อป้องกันไม่ให้ code ทำงานผิดพลาด

    ใน Python เรามี 5 keywords สำหรับจัดการ exception ได้:

    1. try
    2. except
    3. else
    4. finally
    5. raise

    เราไปดูตัวอย่างการใช้งานทั้ง 5 keywords ผ่านตัวอย่าง code การจ่ายเงินออนไลน์กัน


    1. 🔨 try, except
    2. 🤔 else
    3. ☝️ finally
    4. 👋 raise
    5. 💪 สรุป 5 Keywords
    6. 📚 Further Reading: Python Exceptions
    7. 😺 GitHub
    8. 📃 References

    🔨 try, except

    try และ except เป็น keywords ที่ใช้ร่วมกัน โดยใน try เราจะใส่ code ที่เราคิดว่าอาจจะเกิด exception ขึ้นได้

    ส่วนใน except เราจะใส่สิ่งที่เราต้องการให้เกิดขึ้นเมื่อเกิด exception ขึ้น

    ยกตัวอย่างเช่น เราเขียน code เพื่อเช็กว่า payment มีค่ามากกว่า 0 หรือไม่ แต่ payment ที่ใส่เข้ามาอาจไม่ใช่ตัวเลข ซึ่งจะทำให้ code ของเราหยุดทำงาน:

    # Without try, except
    
    # Set payment
    payment = "one thousand"
    
    # Validate payment
    if float(payment) < 0:
        print("Payment cannot be negative.")
    

    ผลลัพธ์:

    ValueError
    

    เราสามารถใช้ try และ except ช่วยให้ code ทำงานต่อได้ พร้อมทำให้บอกเราให้รู้ว่า เกิดข้อผิดพลาดอะไรขึ้น:

    # Set payment
    payment = "one thousand"
    
    # Code that may raise exception
    try:
        if float(payment) < 0:
            print("Payment cannot be negative.")
    
    # Print when exception occurs
    except ValueError:
        print("Payment must be a number.")
    
    

    ผลลัพธ์:

    Payment must be a number.
    

    🤔 else

    else ทำงานคล้าย except แต่แทนที่จะส่งค่าบางอย่างกลับมาเมื่อเกิด exception, else จะทำงานเมื่อไม่มี exception เกิดขึ้นใน try

    ยกตัวอย่างเช่น ใช้ else เพื่อแสดงข้อความว่ากำลังประมวลผล เมื่อ payment เป็นตัวเลข:

    # Set payment
    payment = 500
    
    # Code that may raise exception
    try:
        if float(payment) < 0:
            print("Payment cannot be negative.")
    
    # Print when exception occurs
    except ValueError as e:
        print(f"Error: {e}")
    
    # Print when exception does not occur
    else:
        print("Processing payment ...")
    

    ผลลัพธ์:

    Processing payment ...
    

    ☝️ finally

    finally จะส่งค่ากลับมาไม่ว่าจะเกิด exception ขึ้นหรือไม่ก็ตาม

    ยกตัวอย่างเช่น ใช้ finally แสดงข้อความขอบคุณลูกค้า ไม่ว่า payment จะผ่านหรือไม่ก็ตาม:

    # Set payment
    payment = 500
    
    # Code that may raise exception
    try:
        if float(payment) < 0:
            print("Payment cannot be negative.")
    
    # Print when exception occurs
    except ValueError as e:
        print(f"Error: {e}")
    
    # Print when exception does not occur
    else:
        print("Processing payment ...")
    
    # Print no matter what
    finally:
        print("Thank you for your payment.")
    

    ผลลัพธ์:

    Processing payment ...
    Thank you for your payment.
    

    👋 raise

    สุดท้าย เราจะใช้ raise กำหนด exception ได้เอง

    ยกตัวอย่างเช่น ใช้ raise เพื่อแจ้งเตือนเมื่อ payment ติดลบ:

    # Set payment
    payment = -50
    
    # Code that may raise exception
    try:
        if not isinstance(payment, (int, float)):
            raise TypeError("Payment must be a number.")
        if payment < 0:
            raise ValueError("Payment cannot be negative.")
    
    # Print when exception occurs
    except (TypeError, ValueError) as e:
        print(f"Error: {e}")
    
    # Print when exception does not occur
    else:
        print("Processing payment ...")
    
    # Print no matter what
    finally:
        print("Thank you for your payment.")
    

    ผลลัพธ์:

    Error: Payment cannot be negative.
    Thank you for your payment.
    

    💪 สรุป 5 Keywords

    ในบทความนี้ เราได้เรียนรู้วิธีใช้ 5 keywords เพื่อจัดการ exception ใน Python ได้แก่:

    1. try: รัน code ที่เราคิดว่าอาจเกิด exception
    2. except: code ที่จะรันเมื่อเกิด exception จาก try
    3. else: code ที่รันเมื่อไม่เกิด exception จาก try
    4. finally: code ที่จะรันไม่ว่า try จะเกิด exception หรือไม่
    5. raise: code สำหรับแสดง exception ที่กำหนดเอง

    ตัวอย่าง code:

    # Set payments
    payments = {
        "Alex": "one thousand",
        "Barbara": -50,
        "Carter": 500
    }
    
    # Loop through payments
    for name, payment in payments.items():
        
        # Print name and payment
        print(f"{name} paying {payment}.")
        
        # Code that may raise exception
        try:
            if not isinstance(payment, (int, float)):
                raise TypeError("Payment must be a number.")
            if payment < 0:
                raise ValueError("Payment cannot be negative.")
    
        # Print when exception occurs
        except (TypeError, ValueError) as e:
            print(f"Error: {e}")
    
        # Print when exception does not occur
        else:
            print("Processing payment ...")
    
        # Print no matter what
        finally:
            print("Thank you for your payment.")
            
        # Print divider
        print("\\n -------------------------------------------------- \\n")
    

    ผลลัพธ์:

    Alex paying one thousand.
    Error: Payment must be a number.
    Thank you for your payment.
    
     -------------------------------------------------- 
    
    Barbara paying -50.
    Error: Payment cannot be negative.
    Thank you for your payment.
    
     -------------------------------------------------- 
    
    Carter paying 500.
    Processing payment ...
    Thank you for your payment.
    
     -------------------------------------------------- 
    
    
    

    📚 Further Reading: Python Exceptions

    ศึกษาประเภทของ exception ใน Python ได้ที่: Python Built-in Exceptions


    😺 GitHub

    ดู code ทั้งหมดในบทความนี้ได้ที่ GitHub


    📃 References

  • Function in R: ความหมาย, ส่วนประกอบ, และประเภท function ในภาษา R สำหรับผู้เริ่มต้น พร้อมตัวอย่าง

    Function in R: ความหมาย, ส่วนประกอบ, และประเภท function ในภาษา R สำหรับผู้เริ่มต้น พร้อมตัวอย่าง

    Function เป็น 1 ใน 2 องค์ประกอบหลักในภาษา R เคียงข้างกับ object

    ในขณะที่ object คือ สิ่งที่มีอยู่ในภาษา R, function คือ สิ่งที่เกิดขึ้นในภาษา R

    ภาษา R จะทำงานไม่ได้ ถ้าขาดทั้ง 2 อย่างไป

    ในบทความนี้ เราจะมีวิธีใช้งาน function ในภาษา R กัน:

    1. Function คืออะไร?
    2. ส่วนประกอบของ function
    3. ประเภทของ function
    4. การดูรายละเอียดของ function

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 🤔 What Is a Function?
    2. 🧠 Anatomy of Function
    3. 🗃️ Types of Functions
      1. 📦 Base R Function
      2. 📥 Package Function
      3. 🎁 Custom Function
    4. ❓ Get Help
    5. 💪 Summary
    6. 😺 GitHub
    7. 📃 References
    8. ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

    🤔 What Is a Function?

    Function คือ code ที่เราเรียกใช้งานซ้ำ ๆ ได้ ซึ่งช่วยให้เราเขียน code ได้ง่ายขึ้น

    เช่น แทนที่เราจะหาผลรวมของ 1–5 โดยพิมพ์ตัวเลขทีละตัว:

    1 + 2 + 3 + 4 + 5
    

    เราสามารถใช้ function ช่วยได้แบบนี้:

    sum(1:5)
    

    และถ้าเราต้องการหาผลลัพธ์ของเลขชุดอื่น (เช่น 15–20) เราสามารถใช้ function เดียวกันได้:

    sum(15:20)
    

    จะเห็นได้ว่า function ทำให้เราเขียน code ได้ง่ายและสะดวกขึ้นมาก


    🧠 Anatomy of Function

    Function ประกอบด้วย 2 ส่วน:

    1. Name หรือ ชื่อของ function (เช่น round)
    2. Argument หรือ input สำหรับ function (เช่น 1:5 และ 15:20)

    โดย argument แบ่งได้เป็น 2 ประเภท:

    1. Positional argument หรือ input ตามตำแหน่งใน function
    2. Keyword argument หรือ input ตาม keywords

    ยกตัวอย่าง เช่น sample() ซึ่งเป็น function สุ่มตัวอย่าง และมี 2 arguments:

    1. ชุดข้อมูล (เช่น 1:10)
    2. จำนวนที่ต้องการสุ่ม (เช่น 3)

    เราสามารถเขียนแบบ positional และ keyword argument ได้แบบนี้:

    # Positional arguments
    sample(1:10, 3)
    
    # Keyword arguments
    sample(x = 1:10, size = 3)
    

    จากตัวอย่าง จะเห็นว่า positional argument เขียนง่ายกว่า แต่ keyword argument ช่วยให้อ่าน code ได้ง่ายกว่า

    เราควรใช้ positional argument เมื่อใช้ function ที่ไม่ซับซ้อน เช่น sum() ที่ต้องการแค่ 1 argument

    และควรใช้ keyword argument กับ function ที่มีหลาย arguments


    🗃️ Types of Functions

    Function แบ่งได้เป็น 3 ประเภท ได้แก่:

    1. Base R function
    2. Package function
    3. Custom function

    .

    📦 Base R Function

    Base R function เป็น function ที่มาพร้อมกับภาษา R และเรียกใช้งานได้โดยไม่ต้องติดตั้ง package เพิ่มเติม เช่น:

    • mean()
    • sum()
    • length()
    • round()
    • seq()

    .

    📥 Package Function

    Package function เป็น function ที่คนอื่นสร้างไว้และเราสามารถโหลดมาใช้ได้

    ในการเรียกใช้งาน เราจะต้องทำ 2 อย่างก่อน:

    1. ติดตั้ง package ด้วย install.packages() (ทำครั้งแรกครั้งเดียว)
    2. โหลด package ทุกครั้งที่เริ่มต้น session ด้วย library()

    ถ้าข้าม 2 ขั้นตอนนี้ไป เราจะไม่สามารถใช้งาน function ได้

    เช่น เรียกใช้ sample_n() เพื่อสุ่มข้อมูลจาก data frame (ตารางข้อมูล):

    # Data frame of my friends
    friends <- data.frame(
      name = c("Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Heidi"),
      age = c(28, 32, 25, 30, 29, 35, 27, 31)
    )
    
    # friends data frame:
    #       name age
    #  1   Alice  28
    #  2     Bob  32
    #  3 Charlie  25
    #  4   David  30
    #  5     Eve  29
    #  6   Frank  35
    #  7   Grace  27
    #  8   Heidi  31
    
    # Sample 3 of my friends
    sample_n(friends, 3)
    

    ผลลัพธ์:

    Error in sample_n(friends, 3) : could not find function "sample_n"
    

    จะเห็นได้ว่า R ส่ง error กลับมา ซึ่งเราแก้ได้โดยติดตั้งและโหลด package ก่อนเรียกใช้งาน sample_n():

    # Install package
    install.packages("dplyr")
    
    # Load package
    library(dplyr)
    

    ซึ่งจะทำให้เราใช้งาน function ได้สำเร็จ:

    # Sample 3 of my friends
    sample_n(friends, 3)
    

    ผลลัพธ์:

       name age
    1   Bob  32
    2 Heidi  31
    3 Grace  27
    

    .

    🎁 Custom Function

    Custom function เป็น function ที่เราเขียนขึ้นเอง เพื่อตอบโจทย์ที่ function อื่นไม่สามารถทำได้

    เราสามารถสร้าง custom function ได้ด้วย function() {} เช่น สร้าง function เพื่อคำนวณพื้นที่วงกลม:

    # Custome function to find circle area
    circle_area <- function(radius) {
    
    	# Calculate area
      area <- pi * (radius^2)
      
      # Return area
      print(area)
    }
    

    ในตัวอย่าง function จะคำนวณพื้นที่วงกลมโดยใช้ 1 argument 1 คือ radius และ print ค่าใน console

    หลังจากสร้าง function แล้ว เราสามารถเรียกใช้งาน function ได้เหมือน function อื่น ๆ:

    # Calculate circle area where radius is 14
    circle_area(14)
    

    ผลลัพธ์:

    [1] 615.7522
    

    ❓ Get Help

    สุดท้าย เราสามารถดูรายละเอียดของ function ได้ 2 วิธี:

    1. ?: ดูคู่มือการใช้ function
    2. args(): ดู argument ของ function

    เช่น ดูคู่มือของ round() ซึ่งเป็น function สำหรับปัดจุดทศนิยม:

    # Read round() documentation
    ?round
    

    เราจะเห็นคู่มือการใช้งาน round() ในหน้าต่างของเรา:

    หรือดู arguments ของ round():

    # Learn about round() arguments
    args(round)
    

    ผลลัพธ์:

    function (x, digits = 0, ...) 
    NULL
    

    💪 Summary

    ในบทความนี้ เราได้ทำความรู้จักกับ function ซึ่งเป็น 1 ใน 2 องค์ประกอบที่สำคัญในภาษา R กัน:

    1. Function คือ code ที่สามารถเรียกใช้งานซ้ำได้
    2. Function ประกอบด้วย 2 ส่วน: name และ argument
    3. Argument มี 2 ประเภท: positional และ keyword argument
    4. Function มี 3 ประเภท:
      1. Base R function ที่มาพร้อมภาษา R
      2. Package function ที่มากับ packages
      3. Custom function ที่เราสร้างเอง
    5. ดูรายละเอียดของ function ได้ด้วย ? และ args()

    😺 GitHub

    ดูตัวอย่าง code ทั้งหมดในบทความได้ที่ GitHub


    📃 References


    ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

    📕 ขอฝากหนังสือเล่มแรกในชีวิตด้วยนะครับ 😆

    🙋 ใครที่กำลังเรียนจิตวิทยาหรือทำงานสายจิตวิทยา และเบื่อที่ต้องใช้ software ราคาแพงอย่าง SPSS และ Excel เพื่อทำข้อมูล

    💪 ผมขอแนะนำ R Book for Psychologists หนังสือสอนใช้ภาษา R เพื่อการวิเคราะห์ข้อมูลทางจิตวิทยา ที่เขียนมาเพื่อนักจิตวิทยาที่ไม่เคยมีประสบการณ์เขียน code มาก่อน

    ในหนังสือ เราจะปูพื้นฐานภาษา R และพาไปดูวิธีวิเคราะห์สถิติที่ใช้บ่อยกัน เช่น:

    • Correlation
    • t-tests
    • ANOVA
    • Reliability
    • Factor analysis

    🚀 เมื่ออ่านและทำตามตัวอย่างใน R Book for Psychologists ทุกคนจะไม่ต้องพึง SPSS และ Excel ในการทำงานอีกต่อไป และสามารถวิเคราะห์ข้อมูลด้วยตัวเองได้ด้วยความมั่นใจ

    แล้วทุกคนจะแปลกใจว่า ทำไมภาษา R ง่ายขนาดนี้ 🙂‍↕️

    👉 สนใจดูรายละเอียดหนังสือได้ที่ meb:

  • สรุป 18 ข้อคิด (4 กลุ่ม) เกี่ยวกับ Cooperative Negotiation จากหนังสือ Negotiation Made Simple ของ John Lowry: Cooperative Negotiation, Interest, Empathy, และ How to Facilitate Empathy

    สรุป 18 ข้อคิด (4 กลุ่ม) เกี่ยวกับ Cooperative Negotiation จากหนังสือ Negotiation Made Simple ของ John Lowry: Cooperative Negotiation, Interest, Empathy, และ How to Facilitate Empathy

    หนังสือ Negotiation Made Simple ของ John Lowry เป็นหนังสือสอนการเจรจา ซึ่งไม่ได้ใช้กับนักธุรกิจเท่านั้น แต่ยังใช้กับคนทั่วไปอีกด้วย

    ในบทความนี้ ผมจะมาสรุป 18 ข้อคิดจาก Part III. Creative Cooperation ของหนังสือ ซึ่งจัดได้เป็น 4 กลุ่มดังนี้:

    1. Cooperative Negotiation: แนะนำให้รู้จักกับ cooperative negotiation
    2. Interest: แนะนำให้รู้จักกับ interest ซึ่งเป็นหัวใจสำคัญของ cooperative negotiation
    3. Empathy: แนะนำให้รู้จักกับ empathy ซึ่งเป็นเครื่องมือที่สำคัญในการเจรจา
    4. How to facilitate empathy: แนะนำข้อคิดในการสร้าง empathy ในการเจรจา

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    หน้าปกหนังสือ Negotiation Made Simple บน Amazon

    1. 🤝 Group 1. Cooperative Negotiation
    2. 🧭 Group 2. Interest
    3. 🫰 Group 3. Empathy
    4. 🛋️ Group 4. How to Facilitate Empathy

    🤝 Group 1. Cooperative Negotiation

    ข้อคิด 3 ข้อในกลุ่มที่ 1 แนะนำให้รู้จักกับ cooperative negotiation:

    1. What is cooperative negotiation?
    2. When to use cooperative negotiation
    3. What we need for cooperation

    .

    ข้อ 1. What is cooperative negotiation?

    Cooperative negotiation เป็นการเจรจาเพื่อหาทางออกร่วมกัน ซึ่งตรงข้ามกับ competitive negotiation ที่เน้นการหาผลประโยชน์เข้าตัว ไม่ว่าอีกฝ่ายจะได้หรือเสียก็ตาม

    .

    ข้อ 2. When to use cooperative negotiation

    Cooperative negotiation เหมาะกับเวลาที่เราไม่มีอำนาจต่อรอง หรืออีกฝ่ายมีไพ่เหนือกว่า

    เช่น เราเป็นฝ่ายผิดจริงหรืออีกฝ่ายมีหลักฐานที่น่าเชื่อถือกว่า

    ในกรณีเหล่านี้ เราควรจะเจรจาเพื่อหาทางออกร่วมกัน มากกว่าเพื่อเอาชนะอีกฝ่าย

    .

    ข้อ 3. What we need for cooperation

    Cooperative negotiation ที่ดีต้องมี creativity และ empathy


    🧭 Group 2. Interest

    ข้อคิด 6 ข้อในกลุ่ม 2 แนะนำให้รู้จักกับ interest หรือหัวใจสำคัญของ cooperative negotiation:

    1. Creativity stems from interest
    2. Position vs interest
    3. The power of interest
    4. Interest is often hidden
    5. How to get to interest
    6. From interest to solution

    .

    ข้อ 4. Creativity stems from interest

    Creativity ที่จะช่วยเราหาทางออกที่ทำให้ทุกฝ่ายพอใจได้ ต้องตั้งอยู่บน interest ไม่ใช่ position

    .

    ข้อ 5. Position vs interest

    Position คือ สิ่งที่จับต้องได้ (tangible) ที่แลกเปลี่ยนกันในการเจรจา เช่น:

    • ราคาสินค้า
    • ส่วนแบ่งหุ้น
    • ค่าเสียหาย

    Interest คือ สิ่งที่จับต้องไม่ได้ (intangible) ที่แต่ละฝ่ายให้ความสำคัญ เช่น:

    • ชื่อเสียง
    • ภาพลักษณ์
    • ความสัมพันธ์

    ถ้าเจรจาด้วย position แต่ละฝ่ายจะพยายามโน้มน้าวอีกฝ่ายว่าตัวเองดีกว่า ซึ่งจะทำให้เกิดความขัดแย้ง และลดโอกาสที่จะเจรจาสำเร็จได้

    ในทางกลับกัน ถ้าเจรจาด้วย interest เราจะหาทางออกที่ลงตัวให้กับทุกฝ่ายได้

    .

    ข้อ 6. The power of interest

    ตัวอย่างการใช้ interest ในการเจรจา มาจากกรณีความไม่ลงตัวกันระหว่าง Marillyn Hewson ซึ่งเป็น CEO ของ Lockheed บริษัทที่ผลิตเครื่องบินรบให้กับรัฐบาลสหรัฐฯ และประธานาธิบดี Donald Trump

    Trump มองว่า รัฐบาลจ่ายเงินค่าเครื่องบินให้กับ Lockheed สูงเกินไป และประกาศว่า ตัวเองสามารถต่อรองให้ราคาถูกลงมาได้

    แต่การเจรจาหลายครั้งระหว่าง Hewson และ Trump ไม่เป็นผล เพราะทั้งสองฝ่ายมี position ที่ต่างกัน: Trump ต้องการราคาเครื่องบินที่ถูกลง แต่ Lockheed ซึ่งเป็นบริษัทผลิตย่อมต้องการกำไรจากการขาย

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

    เมื่อรู้เช่นนี้ Hewson เจรจากับ Trump โดยสัญญาว่า จะขยายกำลังผลิตเครื่องบินใน Texas เพื่อตอบโจทย์การสร้างงานในอเมริกัน แลกกับสัญญาซื้อขายเครื่องบินในระยะยาว และราคาเครื่องบินที่ถูกลง จากการซื้อขายในระยะเวลาที่ยาวขึ้น

    จะเห็นว่า Hewson ใช้ interest เพื่อหาทางออกที่เป็นผลดีกับทุกฝ่าย Trump ได้เครื่องบินที่ราคาถูกลง ได้รับการมองเห็นว่าเป็นนักธุรกิจที่ประหยัดและสร้างงานได้ ในขณะที่ Lockheed เองยังได้สัญญาซื้อขายในระยะยาว โดยไม่ขาดทุนจากการซื้อขาย

    เมื่อเราใช้ interest แล้ว เราจะสามารถแก้ปัญหาที่ไม่สามารถแก้ได้ด้วย position

    .

    ข้อ 7. Interest is often hidden

    แม้ว่า interest จะเป็นจุดตั้งต้นสำหรับ cooperative negotiation แต่คนส่วนใหญ่มักจะไม่เปิดเผย interest ของตัวเอง เพราะ:

    1. Loss of control: กลัวจะไม่ใช่คนคุมเกมในการเจรจาอีกต่อไป
    2. Emotion: กลัวว่าจะมีอารมณ์เข้ามาเกี่ยวข้อง

    .

    ข้อ 8. How to get to interest

    เรามี 3 ขั้นตอนที่ช่วยให้อีกฝ่ายพูดถึง interest ของตัวเอง:

    1. Steer the conversation: ปรับทิศทางของการพูดคุยให้เรารู้จักกับอีกฝ่ายมากขึ้น
    2. Ask questions: ถามคำถามปลายเปิดที่ช่วยให้เรารู้ why โดยไม่ถาม why เช่น ”tell me more …”, “help me understand …”, “I’m curious about …”
    3. Listen: ตั้งใจฟังสิ่งที่อีกฝ่ายกำลังพูด

    .

    ข้อ 9. From interest to solution

    เมื่อเราเข้าใจ interest ของอีกฝ่ายแล้ว ให้เราหาทางออกร่วมกันใน 3 ขั้นตอน:

    1. Brainstorm: เสนอไอเดีย และชวนอีกฝ่ายระดมสมอง
    2. Create options: เลือกไอเดียที่เป็นไปได้/สามารถทำได้
    3. Evaluate: ประเมินและเลือกไอเดียที่ตอบทั้ง interest ของเราและอีกฝ่าย

    🫰 Group 3. Empathy

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

    1. What is empathy
    2. Types of empathy
    3. Empathy vs sympathy
    4. How to use empathy

    .

    ข้อ 10. What is empathy

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

    .

    ข้อ 11. Types of empathy

    Empathy แบ่งได้เป็น 2 ประเภท:

    1. Affective empathy: รับรู้และตอบสนองต่อความรู้สึกของคนอื่นได้
    2. Cognitive empathy: วิเคราะห์และเข้าใจสาเหตุของความรู้สึกของคนอื่น

    .

    ข้อ 12. Empathy vs sympathy

    Empathy แตกต่างจาก sympathy:

    Sympathy:

    รู้ว่าอีกฝ่ายรู้สึกยังไง + รู้สึกสงสาร: “I understand how you feel. I feel terrible for you.”

    Empathy:

    รู้ว่าอีกฝ่ายรู้สึกยังไง + รู้ว่าทำไมถึงรู้สึกอย่างนั้น: “I understand how you feel, and I understand why you feel that way.”

    เมื่อมี empathy เราสามารถรับรู้ความรู้สึกของอีกฝ่ายได้โดยไม่ต้องรู้สึกร่วมไปด้วย

    เช่น เข้าใจว่า ทำไมอีกฝ่ายลดราคาให้ไม่ได้ แต่ไม่จำเป็นต้องเห็นด้วย

    .

    ข้อ 13. How to use empathy

    เราใช้ empathy เพื่อเจรจาให้สำเร็จได้ใน 4 ขั้นตอน:

    1. Observe: สังเกตสิ่งที่อีกฝ่ายพูดและทำ เพื่อเข้าใจความต้องการและมุมมองของอีกฝ่าย
    2. Understand: ชวนให้อีกฝ่ายอธิบายและให้ข้อมูลกับเราให้ได้มากที่สุด
    3. Respect: แสดงความเคารพในมุมมองและความรู้สึกของอีกฝ่าย ด้วยคำพูดและการกระทำ
    4. Solve: แก้ปัญหา โดยเริ่มจากระดมไอเดียจากข้อมูลที่ได้รับจากอีกฝ่าย เลือก และประเมินไอเดียที่ตอบโจทย์ของทุกฝ่าย

    🛋️ Group 4. How to Facilitate Empathy

    ข้อคิด 5 ข้อในกลุ่มสุดท้ายแนะนำการสร้าง empathy ในการเจรจา:

    1. Set the scene
    2. Listen
    3. Find common ground
    4. Have a growth mindset
    5. Respect but not awe

    .

    ข้อ 14. Set the scene

    เจรจาในสภาพแวดล้อมที่ชวนให้ผ่อนคลายและกระตุ้นการเสนอไอเดีย

    เช่น นั่งคุยกันบนโซฟาที่ไม่มีโต๊ะคั่นกลาง และมี whiteboard พร้อมเขียน แทนที่การนั่งที่โต๊ะประชุมที่มีโต๊ะตัวใหญ่คั่นกลาง

    .

    ข้อ 15. Listen

    ตั้งใจฟังสิ่งที่อีกฝ่ายพูด และทำให้อีกฝ่ายรู้ว่าเรากำลังฟังอยู่ เช่น พูดว่า “Thank you for sharing that with me. That is very helpful.”

    .

    ข้อ 16. Find common ground

    หาสิ่งที่เรากับอีกฝ่ายเห็นตรงกัน ด้วยการถามคำถาม เช่น “เราจะหาทางออกร่วมกันยังไงบ้าง?” หรือตอบรับไอเดียของอีกฝ่าย เช่น “Yes, that could be possible.”

    .

    ข้อ 17. Have a growth mindset

    ให้มองว่า เราไม่ได้รู้ทุกอย่าง (know it all) แต่เราสามารถเรียนรู้ได้ทุกอย่าง (learn it all)

    พยายามสำรวจตัวเองว่า ยังมีจุดไหนที่เราอาจจะยังไม่เข้าใจอีกฝ่าย และจะทำยังไงให้เราเข้าใจอีกฝ่ายได้มากขึ้น

    .

    ข้อ 18. Respect but not awe

    การที่เราแสดงความเคารพในความรู้สึกหรือมุมมองของอีกฝ่าย ไม่ได้หมายความว่า เรากำลังยำเกรงหรือเกรงใจอีกฝ่าย

    เราสามารถมี empathy ได้ในขณะที่ยังรักษาสิทธิ์ของเราได้


    🔔 ใครที่ชอบบทความนี้ ฝากกด subscribe และติดตามกันได้ที่:

  • สรุป 20 ข้อคิด (3 กลุ่ม) เกี่ยวกับ Competitive Negotiation จากหนังสือ Negotiation Made Simple ของ John Lowry: Competitive Negotiation, First Move, และ Concessions

    สรุป 20 ข้อคิด (3 กลุ่ม) เกี่ยวกับ Competitive Negotiation จากหนังสือ Negotiation Made Simple ของ John Lowry: Competitive Negotiation, First Move, และ Concessions

    หนังสือ Negotiation Made Simple ของ John Lowry เป็นหนังสือสอนการเจรจา ซึ่งไม่ได้ใช้กับนักธุรกิจเท่านั้น แต่ยังใช้กับคนทั่วไปอีกด้วย

    ในบทความนี้ ผมจะมาสรุป 20 ข้อคิดจาก Part II. Ambitious Competition ของหนังสือ ซึ่งจัดได้เป็น 3 กลุ่มดังนี้:

    1. Competitive Negotiation: แนะนำให้รู้จักกับ competitive negotiation
    2. First Move: แนะนำการออกแบบและรับมือ first move ใน competitive negotiation
    3. Concessions: แนะนำวิธีการต่อรองใน competitive negotiation

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    หน้าปกหนังสือ Negotiation Made Simple บน Amazon

    1. ⚔️ Group 1. Competitive Negotiation
    2. ⛳ Group 2. First Move
    3. 🫰 Group 3. Concessions

    ⚔️ Group 1. Competitive Negotiation

    ข้อคิด 6 ข้อในกลุ่มแรกแนะนำให้รู้จักกับ competitive negotiation:

    1. What is competitive negotiation
    2. Competitive negotiation is not inherently bad
    3. When to be competitive
    4. Competitive negotiation is predictable
    5. Use predictability to your advantage
    6. Be competitive yet cooperative

    .

    ข้อ 1. What is competitive negotiation

    Competitive negotiation เป็นการเจรจาเพื่อหาผลประโยชน์ใส่ตัวให้ได้มากที่สุด ไม่ว่าอีกฝ่ายจะเสียผลประโยชน์หรือไม่

    เช่น การต่อรองราคา เราต้องการส่วนลดให้ได้มากที่สุด ไม่ว่าคนขายจะขาดทุนหรือไม่ก็ตาม

    .

    ข้อ 2. Competitive negotiation is not inherently bad

    Competitive negotiation ไม่ใช่สิ่งไม่ดี และเป็นสิ่งที่จำเป็นในหลาย ๆ ครั้ง

    เช่น เด็กที่ถูกพ่อแม่ทำร้าย แต่พ่อแม่ไม่ยอมสละสิทธิเลี้ยงดูลูก เราจะต้องใช้ competitive negotiation (เจรจาแบบมีฝ่ายแพ้ฝ่ายชนะ) เพื่อเรียกร้องสิทธิให้กับเด็ก

    .

    ข้อ 3. When to be competitive

    เราใช้ competitive negotiation ใน 2 กรณี:

    1. Capture more value: ต่อรองเพื่อให้กอบโกยผลประโยชน์ให้ได้มากที่สุด (เช่น ต่อรองเพื่อให้ส่วนลดและของแถมมากที่สุด)
    2. Defend yourself: ป้องกันตัวเวลาเจรจากับคนที่ aggressive (เช่น พ่อค้าที่พยายามขายของราคาแพงให้เราอย่างไม่ลดละ)

    .

    ข้อ 4. Competitive negotiation is predictable

    Competitive negotiation มีลักษณะ 8 อย่างที่ตายตัว:

    1. Limited pie: ผลประโยชน์ที่แบ่งกันได้มีจำกัด
    2. Zero-sum game: จะต้องมีฝ่ายที่แพ้ (เสียผลประโยชน์) และฝ่ายที่ชนะ (ได้ผลประโยชน์)
    3. Start from positions: คู่เจรจาเริ่มต้นจาก positions ของตัวเอง (เช่น ราคาขายเริ่มต้น vs ราคาแรกที่เราต่อลงมา)
    4. Multiple concessions: มีการต่อรองกลับไปกลับมาหลายรอบ
    5. Concessions get smaller: การต่อรองจะเล็กลงเรื่อย ๆ (เช่น ขอส่วน 1,000 บาท, 500 บาท, 10 บาท)
    6. The midpoint: การต่อรองจะเข้าใกล้จุดกึ่งกลางระหว่าง positions ของทั้งสองฝ่ายขึ้นเรื่อย ๆ
    7. The dance is inevitable: เราไม่สามารถข้ามขั้นตอนได้ ถ้าอยากได้สิ่งที่ต้องการ เราจะต้องใจเย็นและยอมต่อรองจนกว่าจะถึง midpoint
    8. Tension is normal: บรรยากาศจะตึงเครียดขึ้นเรื่อย ๆ

    .

    ข้อ 5. Use predictability to your advantage

    เราสามารถใช้รูปแบบที่ตายตัวของ competitive negotiation เพื่อวางกลยุทธ์ในการต่อรองที่ดีได้

    .

    ข้อ 6. Be competitive yet cooperative

    แม้ว่าการเจรจาจะ competitive (เน้นผลประโยชน์ส่วนตัว) แต่เราสามารถสื่อสารแบบ cooperative (สื่อสารด้วยความเคารพและสุภาพ) ได้


    ⛳ Group 2. First Move

    ข้อคิด 8 ข้อในกลุ่ม 2 แนะนำวิธีออกแบบและรับมือกับ first move ใน competitive negotiation:

    1. First move is the most important
    2. Get over your discomfort
    3. Don’t wait and see
    4. Drop the anchor
    5. Don’t be too aggressive
    6. How to counter anchor bias
    7. Fight unreasonable offers with unreasonable offers
    8. Walking away is always an option

    .

    ข้อ 7. First move is the most important

    First move เป็น move ที่สำคัญที่สุด เพราะเป็นสิ่งที่กำหนดทิศทางในการเจรจา

    .

    ข้อ 8. Get over your discomfort

    คนที่เริ่ม first move มักจะรู้สึกกังวลและมีความสุขกับผลลัพธ์สุดท้ายน้อยกว่าคนที่เริ่มทีหลัง

    แต่คนเหล่านี้มักได้ผลลัพธ์ที่ดีกว่าอีกฝ่าย

    ดังนั้น เราควรจะก้าวข้ามความกังวลและเริ่ม first move ก่อน

    .

    ข้อ 9. Don’t wait and see

    ถ้ารอให้อีกฝ่ายเริ่มก่อน เราจะเสียเปรียบได้ เพราะการตัดสินใจของเราจะถูกตีกรอบด้วย first move ของอีกฝ่าย

    .

    ข้อ 10. Drop the anchor

    First move จะต้องมี anchor หรือสิ่งที่จะตีกรอบการเจรจาและการตัดสินใจของอีกฝ่าย

    เช่น ถ้าเราอยากได้ส่วนแบ่งบริษัทเยอะ เราจะต้องเริ่มจากเลขที่สูง (เช่น 70%) เพื่อให้อีกฝ่ายต่อรองลงมาในจุดที่เราต้องการ (50%)

    ถ้าเราเริ่มด้วยเลขที่ต่ำ (50%) เราจะถูกต่อลงมาอีก (30%) เพราะอีกฝ่ายจะคิดว่า 50% คือเลขที่สูงแล้ว

    .

    ข้อ 11. Don’t be too aggressive

    อีกฝ่ายมีสิทธิ์จะเดินออกจากการเจรจาตลอดเวลา

    เราไม่ควรเริ่ม first move ด้วย anchor ที่สูงเกินไป เพราะอีกฝ่ายอาจจะไม่อยากต่อรองกับเราได้

    .

    ข้อ 12. How to counter anchor bias

    ในกรณีที่เราไม่ได้เริ่มก่อน และอีกฝ่ายทิ้ง anchor แล้ว เราสามารถรับมือได้ 3 วิธี:

    1. Reject: ถ้าเรารู้ว่า สิ่งที่เสนอเป็นแค่ anchor
    2. Do research: หาข้อมูลเพิ่ม (เช่น หาว่าราคาที่เสนอมาสูงกว่าตลาดไหม)
    3. Drop another: ทิ้ง anchor ของเราเอง เพื่อเปลี่ยนกรอบในการตัดสินใจของการเจรจา

    .

    ข้อ 13. Fight unreasonable offers with unreasonable offers

    ถ้าอีกฝ่ายให้ข้อเสนอที่ไม่สมเหตุสมผล (เช่น ราคาสูงกว่าราคาตลาดมาก) เราจะต้องไม่ยื่นข้อเสนอที่สมเหตุสมผลกลับ (ราคาตลาด)

    เราต้องยื่นข้อเสนอที่ไม่สมเหตุสมผลเช่นกัน (ราคาที่ต่ำกว่าราคาตลาดมาก) เพื่อปรับให้ midpoint กลับมาอยู่ใกล้จุดที่เราต้องการ (ต่ำกว่าราคาตลาดเล็กน้อย)

    .

    ข้อ 14. Walking away is always an option

    ถ้าข้อเสนอไม่สมเหตุสมผลและอีกฝ่ายไม่ยอมเปลี่ยนข้อเสนอ เราสามารถเดินออกจากการเจรจาได้ตลอดเวลา


    🫰 Group 3. Concessions

    ข้อคิด 6 ข้อในกลุ่มสุดท้ายแนะนำวิธีการที่ดีในการต่อรอง:

    1. Concessions are crucial
    2. The other side also needs a win
    3. Manage perception
    4. Don’t take all
    5. Say no
    6. Unblock with linkage

    .

    ข้อ 15. Concessions are crucial

    การต่อรองเป็นสิ่งจำเป็น

    การเจรจาที่ไม่มีการต่อรองจะทำให้ฝ่ายที่เกี่ยวข้องไม่พอใจ เพราะไม่มีส่วนร่วมในการตัดสินใจ

    เช่น เราจะรู้สึกดีกว่า ถ้าได้ต่อรองราคาของจาก 1,000 บาท ลงมาเหลือ 500 บาท มากกว่าถ้าเราซื้อของที่ 500 บาทเลย

    ดังนั้น ใน competitive negotiation เราจะต้องออกแบบข้อเสนอที่เผื่อต่อรองด้วย

    .

    ข้อ 16. The other side also needs a win

    แม้ว่าในการเจรจา เราจะเป็นฝ่ายชนะ แต่เราทำให้อีกฝ่ายรู้สึกเป็นฝ่ายชนะด้วย เพราะนักเจรจาที่ดีรู้ว่าจะทำให้ทุกฝ่ายพอใจได้ยังไง

    .

    ข้อ 17. Manage perception

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

    .

    ข้อ 18. Don’t take all

    อีกทางหนึ่ง คือ เหลือผลประโยชน์บางส่วนให้อีกฝ่าย (เช่น ไม่ลดราคาให้ แต่ยอมให้ของแถมเพิ่ม)

    .

    ข้อ 19. Say no

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

    .

    ข้อ 20. Unblock with linkage

    ถ้าทั้งสองฝ่ายมาถึงทางตัน เราสามารถใช้ linkage หรือการเชื่อมข้อเสนอ เพื่อออกจากทางตันได้

    ตัวอย่าง linkage เช่น:

    • ถ้าลดราคาให้ เราจะจ่ายเงินสด
    • ถ้าซื้อวันนี้ เราจะให้ของแถม
    • ถ้าซื้อยกเซ็ต เราจะให้ส่วนลด

    🔔 ใครที่ชอบบทความนี้ ฝากกด subscribe และติดตามกันได้ที่:

  • สรุป 32 ข้อคิด (6 กลุ่ม) ในการเริ่มต้นการเป็นนักเจรจาที่ดี จากหนังสือ Negotiation Made Simple (ส่วนที่ 1) ของ John Lowry: Introduction, How to Start, Approaches, Thomas-Kilmann Conflict Mode Instrument, Strategies for Successful Negotiation, และ Pro Tips

    สรุป 32 ข้อคิด (6 กลุ่ม) ในการเริ่มต้นการเป็นนักเจรจาที่ดี จากหนังสือ Negotiation Made Simple (ส่วนที่ 1) ของ John Lowry: Introduction, How to Start, Approaches, Thomas-Kilmann Conflict Mode Instrument, Strategies for Successful Negotiation, และ Pro Tips

    หนังสือ Negotiation Made Simple ของ John Lowry เป็นหนังสือสอนการเจรจา ซึ่งไม่ได้ใช้กับนักธุรกิจเท่านั้น แต่ยังใช้กับคนทั่วไปอีกด้วย

    ในบทความนี้ ผมจะมาสรุป 32 ข้อคิดเกี่ยวกับการเริ่มต้นเป็นักเจรจามืออาชีพ จากบทนำและ Part I. Manage Yourself ของหนังสือ

    โดยเนื้อหาแบ่งเป็น 6 กลุ่มดังนี้:

    1. Introduction: ความสำคัญของการเจรจา
    2. How to Start: การเริ่มต้นเป็นนักเจรจาที่ดี
    3. Approaches: ประเภทการเจรจา
    4. Thomas-Kilmann Conflict Mode Instrument: วิธีเลือกแนวทางในการเจรจา
    5. Strategies for Successful Negotiation: วิธีการในการเจรจาที่ดี
    6. Pro Tips: เทคนิคเพิ่มเติมในการเจรจา

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    หน้าปกหนังสือ Negotiation Made Simple บน Amazon

    1. 🏁 Group 1. Introduction
    2. 🔥 Group 2. How to Start
    3. 🧭 Group 3. Approaches
    4. 🤔 Group 4. Thomas-Kilmann Conflict Mode Instrument
    5. 🫆 Group 5. Strategies for Successful Negotiation
    6. 🍜 Group 6. Pro Tips

    🏁 Group 1. Introduction

    ข้อคิด 3 ข้อในกลุ่มแรกพูดถึงความสำคัญของการเจรจา ดังนี้:

    1. Negotiation is everywhere
    2. See yourself as a negotiator
    3. Five characteristics of a professional negotiator

    .

    ข้อ 1. Negotiation is everywhere

    การเจรจาไม่ได้เกิดขึ้นในที่ทำงานอย่างเดียว แต่ยังเกิดขึ้นในชีวิตประจำวันอีกด้วย

    เช่น:

    • กล่อมลูกที่ตื่นจากฝันร้ายให้กลับไปนอน
    • ชวนแฟนที่ชอบอยู่บ้านให้ไปออกกำลังกายด้วยกัน
    • ชวนเพื่อนมาแชร์ Spotify

    .

    ข้อ 2. See yourself as a negotiator

    ไม่ว่าการเจรจาจะเป็นส่วนหนึ่งของ job description ของเราหรือไม่ เราควรมองตัวเองเป็นนักเจรจา เพราะไม่อย่างนั้น เราจะพลาดโอกาสต่าง ๆ ไป เช่น:

    • ไม่ได้ของราคาถูก
    • ไม่ได้เงินเดือนที่เราต้องการ
    • ไม่ได้ใช้เวลาอย่างที่ต้องการ

    เพราะเราไม่มี mindset ที่เหมาะสมเมื่อโอกาสมาถึง

    .

    ข้อ 3. Five characteristics of a professional negotiator

    ลักษณะของนักเจรจาที่ดีมีอยู่ 5 อย่าง ได้แก่:

    1. มี self-awareness และรู้จักจัดการตัวเอง
    2. รู้ว่า เมื่อไรจะให้ความร่วมมือ (cooperate) และเมื่อไรจะสู้ (compete)
    3. รู้ว่า first move คือ move ที่สำคัญที่สุด
    4. รู้จักแก้ปัญหาด้วย empathy และ creativity
    5. รู้ว่า จะทำให้ทุกฝ่ายพอใจได้ยังไง

    .

    🔥 Group 2. How to Start

    ข้อคิด 8 ข้อในกลุ่ม 2 ให้แนวทางในการเริ่มต้นการเป็นนักเจรจาที่ดี ดังนี้:

    1. Negotiation starts with yourself
    2. Find your why
    3. The five guiding questions
    4. Do the hard thing
    5. Uncertainty is certain
    6. Check your assumption
    7. Deception not required
    8. Do not commit fraud

    .

    ข้อ 4. Negotiation starts with yourself

    การเจรจาที่ดีเริ่มจากตัวเราเอง

    .

    ข้อ 5. Find your why

    ในการเจรจาแต่ละครั้ง เราจะต้องหา why หรือสิ่งที่เราต้องการ ให้เจอ เพื่อเป็นเข็มทิศในการเจรจาให้กับตัวเราเอง

    .

    ข้อ 6. The five guiding questions

    นอกจากนี้ เราจะต้องตอบคำถามทั้ง 5 ข้อให้ได้:

    1. เรากำลังเจรจากับใคร?
    2. เรากำลังเจรจาเกี่ยวกับเรื่องอะไร?
    3. เราต้องการอะไร?
    4. อีกฝ่ายต้องการอะไร?
    5. อะไรคืออุปสรรคที่ขัดขวางไม่ให้เราทำข้อตกลงได้?

    .

    ข้อ 7. Do the hard thing

    เพื่อเจรจาได้สำเร็จ เราจะต้องยอมทำสิ่งที่อยู่นอก comfort zone หรือรู้สึกยากสำหรับเรา

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

    .

    ข้อ 8. Uncertainty is certain

    การเจรจามีความไม่แน่นอน ด้วยเหตุผลหลัก 2 ข้อ:

    1. Incomplete information: ข้อมูลไม่ครบถ้วน
    2. Deception: การหลอกลวงที่ทำให้ข้อมูลถูกปิดบัง

    .

    ข้อ 9. Check your assumption

    เราจัดการกับความไม่แน่นอนได้ด้วยการเช็กข้อมูลและความเชื่อของตัวเอง ผ่านคำถาม 4 ข้อนี้:

    1. Assumption ของเราคืออะไร?
    2. อะไรเป็นฐานคิดของ assumption นั้น?
    3. Assumption นี้สอดคล้องกับความเป็นจริง หรือเป็นแค่สิ่งที่เราหวังว่าจะเป็นจริง?
    4. Key information ที่เราใช้ในการตัดสินใจคืออะไร และเชื่อถือได้ขนาดไหน?

    .

    ข้อ 10. Deception not required

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

    .

    ข้อ 11. Do not commit fraud

    ไม่ว่าจะเกิดอะไรขึ้น เราจะต้องไม่บิดเบือนข้อมูล (fraud) ในการเจรจาเด็ดขาด

    .

    🧭 Group 3. Approaches

    ข้อคิด 7 ข้อในกลุ่ม 3 นำเสนอประเภทการเจรจา ดังนี้:

    1. Two approaches to negotiation
    2. Know when to cooperate vs compete
    3. See what the other side is using
    4. Substance vs signal
    5. Never cooperate in a competitive negotiation
    6. Use competition to get cooperation
    7. Use competition wisely

    .

    ข้อ 12. Two approaches to negotiation

    การเจรจามีอยู่ 2 ประเภท ได้แก่:

    1. Cooperative (lover): การเจรจาเพื่อหาทางออกร่วมกัน
    2. Competitive (fighter): การเจรจาที่มีฝ่ายแพ้และฝ่ายชนะ

    .

    ข้อ 13. Know when to cooperate vs compete

    การเจรจาที่ดีจะต้องเลือกใช้แนวทางที่เหมาะสม นั่นคือ รู้ว่าเมื่อไรจะเป็น lover และเมื่อไรจะเป็น fighter

    .

    ข้อ 14. See what the other side is using

    เราจะปรับวิธีการเจรจาได้ ก็ต้องรู้ก่อนว่าอีกฝ่ายใช้วิธีการไหน

    .

    ข้อ 15. Substance vs signal

    เรารู้แนวทางที่อีกฝ่ายใช้ได้จากการสังเกต substance และ signal:

    • Substance: สิ่งที่แลกเปลี่ยนกันในการเจรจา (เช่น เงิน ส่วนลด สินค้า ของแถม)
    • Signal: ความหมายหรือแรงจูงใจเบื้องหลัง substance

    เช่น:

    • อีกฝ่ายเปิดการเจรจาด้วยการเสนอราคาสูงจนน่าตกใจ (substance) แสดงว่าอีกฝ่ายต้องการให้เราจ่ายเงินเยอะ (signal) ซึ่งหมายความว่า ฝ่ายกำลังเจรจาแบบ competitive
    • อีกฝ่ายเสนอราคาเป็นกันเอง พร้อมบอกว่าลดราคาได้อีก (substance) แสดงว่าอีกฝ่ายอยากช่วยให้เราซื้อของได้ (signal) ซึ่งหมายความว่า อีกฝ่ายกำลังเจรจาแบบ cooperative

    .

    ข้อ 16. Don’t cooperate in a competitive negotiation

    เมื่ออีกฝ่ายเจรจาแบบ competitive เราจะต้องไม่เจรจาแบบ cooperative เพราะในขณะที่เราพยายามทำให้อีกฝ่ายพอใจ อีกฝ่ายจะพยายามเรียกร้องสิ่งที่เขาต้องการ ทำให้เราเสียเปรียบในการเจรจา และเป็นฝ่ายแพ้ในที่สุด

    .

    ข้อ 17. Use competition to get cooperation

    ในบางครั้ง เราจะต้องเจรจาแบบ competitive เพื่อบังคับให้อีกฝ่าย cooperative กับเรา

    .

    ข้อ 18. Use competition wisely

    เราควรเลือกเจรจาแบบ competitive อย่างเหมาะสม เพราะการเจรจาแบบนี้สามารถทำลาย trust และปิดการเจรจาลงโดยไม่มีข้อตกลงได้

    .

    🤔 Group 4. Thomas-Kilmann Conflict Mode Instrument

    ข้อคิด 6 ข้อในกลุ่ม 4 นำเสนอวิธีเลือกแนวทางในการเจรจา:

    1. Thomas-Kilmann Conflict Mode Instrument
    2. Avoid
    3. Accommodate
    4. Compete
    5. Compromise
    6. Collaborate

    .

    ข้อ 19. Thomas-Kilmann Conflict Mode Instrument

    Thomas-Kilmann Conflict Mode Instrument เป็นเครื่องมือในการเลือกแนวทางการเจรจา ซึ่งชวนให้เราพิจารณา 2 แกนหลักดังนี้:

    1. Issue: ความสำคัญของหัวข้อในการเจรจา
    2. Relationship: ความสำคัญของความสัมพันธ์ระหว่างเรากับอีกฝ่าย

    โดยทั้ง 2 แกนผสมกันได้ 5 วิธีการดังรูป:

    .

    ข้อ 20. Avoid

    แนวทางที่ 1: หลีกเลี่ยงการเจรจา เมื่อ issue และ relationship มีความสำคัญน้อย

    เช่น คนแปลกหน้าขอให้ช่วย comment วิดีโอบน TikTok แต่เราไม่ได้เล่น TikTok

    เราควรหลีกเลี่ยงการพูดคุยนี้ เพราะเราไม่ได้ให้ความสำคัญกับ TikTok (issue) และคนขอไม่ได้คนที่เรารู้จัก (relationship)

    .

    ข้อ 21. Accommodate

    แนวทางที่ 2: ยอมทำตาม เมื่อ issue มีความสำคัญน้อย แต่อีกฝ่ายเป็นคนสำคัญกับเรา

    เช่น แฟนชวนดูหนังโรแมนติก แต่เราชอบดูหนังไซไฟ

    เราจะยอมไปดูหนังที่แฟนเลือก เพราะหนังที่ดู (issue) ไม่ได้สำคัญเท่ากับความสัมพันธ์ระหว่างเรากับแฟน (relationship)

    .

    ข้อ 22. Compete

    แนวทางที่ 3: ต่อสู้ เมื่อ issue มีความสำคัญมาก และ relationship มีความสำคัญน้อย

    เช่น การต่อราคาซื้อรถมือสอง เพราะราคารถ (issue) มีความสำคัญมากกว่าความสัมพันธ์ระหว่างเรากับร้านขายรถมือสอง (relationship)

    .

    ข้อ 23. Compromise

    แนวทางที่ 4: พบกันครึ่งทาง เมื่อทั้ง issue และ relationship มีความสำคัญปานกลาง

    เช่น เพื่อนชวนไปเที่ยวทะเล แต่เราชอบไปเดินเขา

    เราอาจจะต่อรองกับเพื่อนให้ไปเที่ยวทะเล 1 วัน และเดินเขา 1 วัน เพราะทั้งเพื่อน (relationship) และที่เที่ยว (issue) มีความสำคัญพอ ๆ กัน

    .

    ข้อ 24. Collaborate

    แนวทางที่ 5: หาทางออกร่วมกัน เมื่อทั้ง issue และ relationship มีความสำคัญมาก

    เช่น แฟนอยากแต่งงานเร็ว ๆ

    ทั้งการแต่งงาน (issue) และแฟน (relationship) เป็นสิ่งสำคัญ ดังนั้น เราต้องนั่งคุยกับแฟนเพื่อหาทางออกร่วมกัน

    .

    🫆 Group 5. Strategies for Successful Negotiation

    ข้อคิด 5 ข้อในกลุ่ม 5 แนะนำวิธีการที่นำไปสู่การเจรจาที่ดี ดังนี้:

    1. Prisoner’s Dilemma
    2. Start with cooperation
    3. Respond in kind
    4. Forgive
    5. Be clear

    .

    ข้อ 25. Prisoner’s Dilemma

    Prisoner’s Dilemma เป็นเกมจำลองการตัดสินใจ และช่วยให้เราศึกษาวิธีการเจรจาที่ดีได้

    ในเกม ผู้เล่น 2 คนถูกตำรวจจับ และแต่ละคนมี 2 ตัวเลือกที่สะท้อนประเภทการเจรจาดังนี้:

    1. Cooperate (cooperative): ปิดปากเงียบ ไม่คุยกับตำรวจ
    2. Defect (competitive): สารภาพและโยนความผิดให้กับผู้เล่นอีกคน

    ผู้เล่นจะต้องตัดสินใจโดยไม่รู้ว่าอีกฝ่ายเลือกอะไร และผลลัพธ์ของเกมขึ้นอยู่กับกรตัดสินใจของทั้งสองฝ่ายดังนี้:

    Player A & BB cooperatesB defects
    A cooperates1, 110, 0
    A defects0, 105, 5

    จากตาราง จะเห็นว่า:

    • ถ้าทุกคนปิดปากเงียบ จะติดคุกกันแค่คนละ 1 ปี (รวมกัน 2 ปี)
    • ถ้ามีคนหนึ่งสารภาพ และอีกคนเงียบ คนสารภาพจะเป็นอิสระ และอีกคนจะติดคุก 10 ปี (ผลรวม 10 ปี)
    • ถ้าทั้งคู่สารภาพ จะติดคุกคนละ 5 ปี (รวมกัน 10 ปี)

    และจะเห็นได้ว่า:

    • ตัวเลือกที่ดีกับทุกฝ่าย คือ ปิดปากเงียบ เพราะถ้าอีกฝ่ายเงียบเหมือนกัน เราก็จะติดคุกร่วมกันน้อยที่สุด
    • แต่การปิดปากเงียบมีความเสี่ยง เพราะถ้าอีกฝ่ายสารภาพ เราจะรับโทษเต็ม ๆ คนเดียว 10 ปี

    การศึกษาการเล่น Prisoner’s Dilemma แบบหลายรอบติดกัน พบว่ามี 4 วิธีต่อไปนี้ มักให้ผลการเจรจาที่ดีที่สุด

    .

    ข้อ 26. Start with cooperation

    เริ่มต้นเจรจาด้วยการเจรจาแบบ cooperative เพราะเป็นแนวทางที่ง่ายที่สุด และช่วยให้เรารู้ว่าอีกฝ่ายจะตอบกลับแบบไหน (cooperative หรือ competitive)

    .

    ข้อ 27. Respond in kind

    ไม่ว่าอีกฝ่ายจะมาไม้ไหน ให้เราใช้วิธีเดียวกับที่อีกฝ่ายใช้:

    • ถ้าอีกฝ่าย cooperative เราจะ cooperative ตาม เพราะทำให้อีกฝ่ายรู้ว่า เราพร้อมให้ความร่วมมือ
    • ถ้าอีกฝ่าย competitive เราจะ competitive ตาม เพื่อให้รู้ว่าเราจะไม่ยอมโดนเอาเปรียบ

    .

    ข้อ 28. Forgive

    เราควรให้อภัยเมื่ออีกฝ่าย competitive กับเรา (เราเงียบ แต่อีกฝ่ายสารภาพ) เพราะการเจรจาจะ cooperative มากขึ้น (เงียบทั้งคู่) ซึ่งจะเป็นผลดีกับทั้งสองฝ่าย

    .

    ข้อ 29. Be clear

    เราต้องสื่อสารให้อีกฝ่ายรู้ว่า เรากำลังเจรจาแบบไหน เพราะจะช่วยสร้าง trust ในการเจรจา

    .

    🍜 Group 6. Pro Tips

    ข้อคิด 3 ข้อในกลุ่มสุดท้าย แนะนำเทคนิคเพิ่มเติมในการเจรจา ดังนี้:

    1. Introverts might be at a disadvantage
    2. What to do if you are an introvert
    3. Share a meal

    .

    ข้อ 30. Introverts might be at a disadvantage

    การเจรจาเป็นการพูดคุยกับคนอื่น ซึ่ง introvert อาจจะไม่เก่งเท่า extrovert และอาจเสียเปรียบในการเจรจาได้

    .

    ข้อ 31. What to do if you are an introvert

    Introvert สามารถป้องกันตัวเองด้วยการเตรียมตัว 2 อย่าง:

    1. ซ้อมพูดเจรจาก่อนถึงเวลาจริง
    2. พูดคุย chitchat กับอีกฝ่ายก่อนเริ่มเจรจา

    .

    ข้อ 32. Share a meal

    ถ้าอยากปิดการเจรจาให้สำเร็จ ให้ชวนอีกฝ่ายไปทานข้าวร่วมกัน

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


    🔔 ใครที่ชอบบทความนี้ ฝากกด subscribe และติดตามกันได้ที่:

  • วิธีใช้ polars: package ทรงพลังสำหรับทำงานกับ tabular data ใน Python — ตัวอย่างการทำงานกับ IKEA Products dataset

    วิธีใช้ polars: package ทรงพลังสำหรับทำงานกับ tabular data ใน Python — ตัวอย่างการทำงานกับ IKEA Products dataset

    polars เป็น package สำหรับทำงานกับข้อมูลในรูปแบบตาราง (tabular data) ใน Python และถูกพัฒนาด้วย Rust และ Apache Arrow ซึ่งทำให้ polars ประมวลผลได้เร็วและมีประสิทธิภาพสูง

    polars เป็นทางเลือกสำหรับคนที่เบื่อกับข้อจำกัดของ pandas ซึ่งเป็น package ยอดนิยมสำหรับทำงานกับข้อมูลในรูปแบบตาราง โดย polars ได้เปรียบ pandas อยู่ 3 อย่าง:

    1. Fast: ประมวลผลเร็วกว่า
    2. Intuitive: มี syntax ที่ใช้ง่ายกว่า
    3. Lazy: รองรับการเขียนแบบ lazy evaluation (ดูรายละเอียดเพิ่มเติมด้านล่าง) ทำให้ประมวลผลได้มีประสิทธิภาพมากกว่า

    Note: ดูวิธีการใช้ pandas ได้ที่บทความนี้

    Source: https://pola.rs/

    ในบทความนี้ เราจะมาดูวิธีใช้ polars ผ่านตัวอย่างการทำงานกับ IKEA Products dataset ที่มีข้อมูลเฟอร์นิเจอร์จาก IKEA กัน

    โดยบทความแบ่งเป็น 9 ส่วนดังนี้:

    1. Import package and dataset: โหลด package และ dataset
    2. Explore: สำรวจ dataset ก่อนทำงานกับข้อมูล
    3. Select: เลือกข้อมูล
    4. Filter: กรองข้อมูล
    5. Sort: จัดเรียงข้อมูล
    6. Aggregate: หาค่าทางสถิติ
    7. Mutate: เพิ่ม ลบ แก้ไข column
    8. Lazy: การทำงานแบบ lazy
    9. Chaining: การเชื่อมต่อ function

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 📦 Section 1. Import Package & Dataset
    2. 🧭 Section 2. Explore
      1. 🔷 2.1 shape
      2. 🗺️ 2.2 schema
      3. 🐵 2.3 head()
      4. 🔎 2.4 glimpse()
      5. 📝 2.5 describe()
    3. 🫳 Section 3. Select
      1. 🔲 3.1 Using []
      2. 🔪 3.2 Using slice() & select()
    4. 👀 Section 4. Filter
      1. ☝️ 4.1 One Condition
      2. 🖐️ 4.2 Multiple Conditions
    5. ↕️ Section 5. Sort
      1. ⬆️ 5.1 Ascending
      2. ⬇️ 5.2 Descending
      3. 🖐️ 5.3 Multiple Columns
    6. 🧮 Section 6. Aggregate
      1. 🏠 6.1 Basic
      2. 🏘️ 6.2 Group By
    7. 💪 Section 7. Mutate
      1. ➕ 7.1 Add Columns
      2. 🗑️ 7.2 Remove Columns
    8. 🥱 Section 8. Lazy
    9. 🔗 Section 9. Chaining
    10. ⭐️ Summary
    11. ⏭️ Next Step: DIY
    12. 📃 References

    📦 Section 1. Import Package & Dataset

    ในขั้นแรก เราจะโหลด package และ dataset ที่จะใช้งานกันก่อน

    เราจะโหลด package ด้วย import แบบนี้:

    import polars as pl
    

    Note: ก่อนโหลด เราจะต้องติดตั้ง package ซึ่งเราสามารถทำได้ด้วย pip install

    และโหลด dataset ด้วย read_csv() เพราะข้อมูลเป็นไฟล์ CSV:

    df = pl.read_csv("ikea_products.csv")
    

    ตอนนี้ เรามีข้อมูลพร้อมจะทำงานต่อแล้ว


    🧭 Section 2. Explore

    ในขั้นที่ 2 เราจะสำรวจข้อมูลที่เพิ่งโหลดเสร็จ ซึ่งเราทำได้ 5 วิธี:

    1. shape
    2. schema
    3. head()
    4. glimpse()
    5. describe()

    .

    🔷 2.1 shape

    shape เป็น attribute สำหรับเช็กจำนวน rows และ columns ใน dataset:

    df.shape
    

    ผลลัพธ์:

    จากผลลัพธ์ จะเห็นว่า dataset มีข้อมูล 3,694 rows และมี 14 columns

    .

    🗺️ 2.2 schema

    schema เป็น attribute สำหรับแสดงชื่อและประเภทข้อมูลของ columns:

    df.schema
    

    ผลลัพธ์:

    .

    🐵 2.3 head()

    head() เป็น method สำหรับดู n rows แรกของข้อมูล เช่น ดู 10 แรกของข้อมูล:

    df.head(10)
    

    ตัวอย่างผลลัพธ์:

    .

    🔎 2.4 glimpse()

    glimpse() เป็น method สำหรับดูโครงสร้างข้อมูล ซึ่งประกอบด้วย:

    1. จำนวน rows และ columns
    2. ชื่อ column
    3. ประเภทข้อมูล
    4. ตัวอย่างข้อมูล
    df.glimpse()
    

    ตัวอย่างผลลัพธ์:

    .

    .

    📝 2.5 describe()

    describe() เป็น method สำหรับแสดง summary statistics ของ columns:

    1. count: จำนวนข้อมูล
    2. null_count: จำนวนข้อมูลที่เป็นค่าว่าง
    3. mean: ค่าเฉลี่ย
    4. std: ค่าเบี่ยงเบนมาตรฐาน (standard deviation)
    5. min: ค่าต่ำสุด
    6. 25%, 50%, 75%: ข้อมูลที่ quartile ที่ 1, 2, และ 3
    7. max: ค่าสูงสุด
    df.describe()
    

    ตัวอย่างผลลัพธ์:


    🫳 Section 3. Select

    เรามี 2 วิธีในการเลือก rows และ columns จากข้อมูล:

    1. ใช้ []
    2. ใช้ slice() และ select()

    .

    🔲 3.1 Using []

    เราจะใช้ [] โดยกำหนด rows และ columns ที่ต้องการแบบนี้:

    df[rows, cols]
    

    ถ้าเราต้องการ rows หรือ columns ทั้งหมด ให้เราเว้นข้อมูลส่วนนั้นไว้ เช่น เลือกข้อมูล 10 rows แรก และ columns ทั้งหมด:

    df[:10]
    

    ตัวอย่างผลลัพธ์:

    หรือเลือกเฉพาะ columns ชื่อ ประเภท และราคา และ rows ทั้งหมด:

    df[["name", "category", "price"]]
    

    ผลลัพธ์:

    ถ้าต้องการทั้ง rows และ columns ให้เรากำหนดทั้งสองอย่าง เช่น ข้อมูล 10 rows แรก โดยเลือกเฉพาะ columns ชื่อ ประเภท และราคา:

    df[0:10, ["name", "category", "price"]]
    

    ผลลัพธ์:

    .

    🔪 3.2 Using slice() & select()

    เราสามารถใช้ slice() และ select() เพื่อเลือกข้อมูลแทนการใช้ [] ได้ โดย:

    1. ใช้ slice() เลือก rows
    2. ใช้ select() เลือก columns

    เช่น เลือกข้อมูล 10 rows แรก:

    df.slice(0, 10)
    

    ตัวอย่างผลลัพธ์:

    เลือก columns ชื่อ ประเภท และราคา:

    df.select(["name", "category", "price"])
    

    ผลลัพธ์:

    สุดท้าย เราสามารถใช้ทั้ง slice() และ select() ร่วมกันเพื่อเลือกทั้ง rows และ columns ได้แบบนี้:

    df.slice(0, 10).select(["name", "category", "price"])
    

    ผลลัพธ์:


    👀 Section 4. Filter

    เรากรองข้อมูลได้ด้วย filter() ซึ่งรับรองการกรองแบบ 1 เงื่อนไข และมากกว่า 1 เงื่อนไข

    .

    ☝️ 4.1 One Condition

    ตัวอย่างการกรองแบบ 1 เงื่อนไข เช่น เลือกเฉพาะข้อมูลของ outdoor furniture:

    df.filter(pl.col("category") == "Outdoor furniture")
    

    Note: สังเกตว่า เราใช้ col() เพื่อระบุ column ที่ต้องการ

    ตัวอย่างผลลัพธ์:

    .

    🖐️ 4.2 Multiple Conditions

    สำหรับการกรองหลายเงื่อนไข เราจะใช้ logical operator ช่วย:

    OperatorMeaning
    &And
    |Or
    ~Not

    เช่น เลือกข้อมูล outdoor furniture ที่ราคาสูงกว่า 1,000:

    df.filter(
        (pl.col("category") == "Outdoor furniture") &
        (pl.col("price") > 1000)
    )
    

    ตัวอย่างผลลัพธ์:


    ↕️ Section 5. Sort

    สำหรับจัดลำดับข้อมูล เราจะใช้ sort() ซึ่งรองรับการใช้งาน 3 กรณี:

    1. Ascending: เรียงจากน้อยไปมาก (A–Z)
    2. Descending: เรียงจากมากไปน้อย (Z–A)
    3. Multiple columns: เรียงลำดับหลาย columns พร้อมกัน

    .

    ⬆️ 5.1 Ascending

    Default ในการจัดลำดับของ sort() คือ เรียงจากน้อยไปมาก เช่น จัดเรียงข้อมูลตามราคา:

    df.sort("price")
    

    ตัวอย่างผลลัพธ์:

    .

    ⬇️ 5.2 Descending

    ถ้าต้องการจัดเรียงแบบมากไปน้อย เราจะต้องกำหนด argument descending=True:

    df.sort("price", descending=True)
    

    ตัวอย่างผลลัพธ์:

    .

    🖐️ 5.3 Multiple Columns

    ถ้าต้องการจัดลำดับหลาย columns พร้อมกัน เราจะกำหนด columns และวิธีจัดเรียง (ascending vs descending) เช่น จัดเรียงตามประเภทเฟอร์นิเจอร์ (A–Z) และราคา (Z–A):

    df.sort(
        ["category", "price"],
        descending=[False, True]
    )
    

    ตัวอย่างผลลัพธ์:


    🧮 Section 6. Aggregate

    Aggregate คือ การสรุปข้อมูล เช่น หาค่าเฉลี่ย และทำได้ 2 วิธี:

    1. แบบไม่จัดกลุ่ม ด้วยคำสั่ง select()
    2. แบบจัดกลุ่ม ด้วยคำสั่ง group_by() และ agg()

    .

    🏠 6.1 Basic

    ตัวอย่างสรุปข้อมูลโดยไม่จัดกลุ่ม เช่น หาค่าเฉลี่ย ค่าต่ำสุด และค่าสูงสุดของราคาเฟอร์นิเจอร์:

    df.select(
        pl.col("price").mean().alias("Mean"),
        pl.col("price").min().alias("Min"),
        pl.col("price").max().alias("Max")
    )
    

    Note: alias() ใช้ตั้งชื่อ column

    ผลลัพธ์:

    .

    🏘️ 6.2 Group By

    ตัวอย่างสรุปข้อมูลแบบจัดกลุ่ม เช่น หาค่าเฉลี่ย ค่าต่ำสุด และค่าสูงสุดของราคาเฟอร์นิเจอร์ ตามประเภทเฟอร์นิเจอร์:

    df.group_by("category").agg(
        pl.col("price").mean().alias("Mean"),
        pl.col("price").min().alias("Min"),
        pl.col("price").max().alias("Max")
    )
    

    ตัวอย่างผลลัพธ์:


    💪 Section 7. Mutate

    Mutate หมายถึง การปรับเปลี่ยน columns ที่มีอยู่ เช่น เพิ่มหรือลบ columns

    .

    ➕ 7.1 Add Columns

    ตัวอย่างการเพิ่ม columns เช่น:

    1. เพิ่ม column ส่วนลด (discount) โดยราคามากกว่า 1,000 จะลด 15% และราคาน้อยกว่านั้นจะลด 10% และ
    2. เพิ่ม column แสดงราคาหลังใช้ส่วนลดแล้ว (price_discounted)

    เราสามารถเขียน code ได้ดังนี้:

    df.with_columns(
        discount = pl.when(pl.col("price") > 1000)
        .then(0.15)
        .otherwise(0.10),
    ).with_columns(
        price_discounted = pl.col("price") * (1 - pl.col("discount"))
    )
    

    Note: เราใช้ when(), then(), otherwise() ช่วยกำหนดเงื่อนไขที่ต้องการ

    ตัวอย่างผลลัพธ์:

    สังเกตว่า columns ใหม่จะอยู่ต่อท้ายสุด

    .

    🗑️ 7.2 Remove Columns

    เราลบ column ได้ด้วย drop() เช่น ลบ columns ราคาเก่า (old_price) และการขายออนไลน์ (sellable_online):

    df.drop(["old_price", "sellable_online"])
    

    ตัวอย่างผลลัพธ์:


    🥱 Section 8. Lazy

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

    Note: การประมวลผลในทันทีโดยไม่รอคำสั่ง เรียกว่า eager evaluation

    การทำงานแบบ lazy evaluation มีอยู่ 3 ขั้นตอน:

    ขั้นที่ 1. สร้าง LazyFrame ซึ่งเป็นข้อมูลสำหรับ lazy evaluation ด้วย lazy():

    df_lz = df.lazy()
    

    ขั้นที่ 2. เขียนคำสั่งที่ต้องการ เช่น เลือก columns:

    execution = df_lz.select(["name", "category", "price"])
    

    ขั้นที่ 3. สั่งให้ประมวลผลด้วยคำสั่ง collect():

    execution.collect()
    

    ผลลัพธ์:


    🔗 Section 9. Chaining

    Chaining เป็นการเชื่อมต่อ function เพื่อส่งผลลัพธ์จาก function หนึ่งไปยังอีก function หนึ่ง:

    df.function1().function2().function3()...

    Chaining ช่วยให้เราตอบโจทย์ที่ซับซ้อนขึ้นได้ เช่น:

    สำหรับเฟอร์นิเจอร์ที่ Francis Cayouette ออกแบบ ประเภทไหนจัดว่าเป็น “Premium” (ราคาสูงกว่า 1,000) และ “Affordable” (ราคาน้อยกว่า 1,000)

    เราสามารถใช้ polars เพื่อตอบโจทย์ได้แบบนี้:

    df_lz.filter(
        pl.col("designer") == "Francis Cayouette"
    ).group_by(
        "category"
    ).agg(
        pl.col("price").mean().round().alias("avg_price")
    ).with_columns(
        pl.when(pl.col("avg_price") > 1000)
        .then(pl.lit("Premium"))
        .otherwise(pl.lit("Affordable"))
        .alias("price_label")
    ).sort(
        "avg_price",
        descending=True
    ).select(
        [
            "category",
            "price_label",
            "avg_price"
        ]
    ).collect()
    

    ผลลัพธ์:


    ⭐️ Summary

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

    Section 1. Import package & dataset:

    • import polars as pl
    • pl.read_csv()

    Section 2. Explore:

    • df.shape
    • df.schema
    • df.head()
    • df.glimpse()
    • df.describe()

    Section 3. Select:

    • df[rows, cols]
    • pl.slice()
    • pl.select()

    Section 4. Filter:

    • df.filter()
    • pl.col()
    • &, |, ~

    Section 5. Sort:

    • df.sort()

    Section 6. Aggregate:

    • df.select()
    • df.group_by().agg()
    • alias()

    Section 7. Mutate:

    • df.with_columns()
    • pl.when().then().otherwise()
    • df.drop()

    Section 8. Lazy:

    • df.lazy()
    • collect()

    Section 9. Chaining:

    • df.function1().function2().function()...

    ⏭️ Next Step: DIY

    ใครที่อยากฝึกใช้ polars สามารถดูตัวอย่าง code และ dataset ได้ที่ GitHub


    📃 References


    🔔 ใครที่ชอบบทความนี้ ฝากกด subscribe และติดตามกันได้ที่:

  • สรุป 10 ไอเดียน่าคิดจากงาน Mini What the Duck 2026 ของพี่ทอย DataRockie

    สรุป 10 ไอเดียน่าคิดจากงาน Mini What the Duck 2026 ของพี่ทอย DataRockie

    ผมไม่คิดว่า What the Duck ปีนี้จะมาเร็วกว่าที่คิด 😂

    วันอาทิตย์ที่ผ่านมา ผมได้ไปร่วมงาน Mini What the Duck 2026 ที่พี่ทอย DataRockie จัดขึ้นที่ BIG Co-working Space

    ในงาน พี่ทอยแชร์เนื้อหาจากงานอื่นก่อน ๆ โดยเฉพาะ What the Duck 2025 ที่จัดออนไลน์เมื่อปลายปีที่ผ่านมา

    ในบทความนี้ ผมขอสรุป 10 ไอเดียที่น่าสนใจจากงาน โดยผมได้เสริมเนื้อหาจากงานก่อน ๆ และจากที่ทำ research เพิ่มเข้าไปในแต่ละไอเดียเพื่อให้ครบถ้วนมากขึ้น

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 🔥 Idea 1. Three Most Important Skills
    2. 💧 Idea 2. Accept the Reality
    3. 🧭 Idea 3. Agency
    4. 🔌 Idea 4. Energy, Not Time
    5. 👀 Idea 5. Make Yourself Discoverable
    6. 📈 Idea 6. Dissociate Income From Time
    7. 💡 Idea 7. What Won’t Change for Good Products
    8. ⭐️ Idea 8. AI Is for Experts
    9. 🧠 Idea 9. No One Knows the Future
    10. 👏 Idea 10. Last Message

    🔥 Idea 1. Three Most Important Skills

    ในยุคที่การศึกษาไม่ได้อยู่แค่ในมหาวิทยาลัย ทักษะสำคัญ 3 อย่างที่ทุกคนควรมี คือ:

    1. Thinking
    2. Writing
    3. Reading

    .

    Thinking หมายถึง การคิดอย่างมีประสิทธิภาพ

    คนส่วนใหญ่คิดว่าตัวเองคิด แต่จริง ๆ แล้วเราคิดกันน้อยมาก

    Two percent of the people think;
    three percent of the people think they think;
    and ninety-five percent of the people would rather die than think.
    — George Bernard Shaw

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

    .

    Writing เป็นการคิดแบบหนึ่ง

    ถ้าจะเขียนได้ (เช่น เขียนบทความนี้) เราจะต้องคิดได้ก่อน แต่จะคิดได้ บางทีเราก็ต้องเขียนออกมา (เช่น ร่างบทความนี้)

    Think -> Write -> Think -> Write -> ...

    เมื่อเป็นแบบนี้ ยิ่งเราฝึกเขียนมากขึ้นเท่าไร เราก็ยิ่งฝึกความคิดให้ดีมากขึ้นเท่านั้น

    Writing is thinking.
    To write well is to think clearly.
    That’s why it’s so hard.
    — David McCullough

    .

    Reading คือ superpower

    ในขณะที่พูด (และฟัง) ได้ 150–200 คำต่อนาที เราสามารถอ่านได้เร็วถึง 200–250 คำต่อนาที

    ถ้าเรามีเนื้อหาใหม่ที่ต้องทำความเข้าใจ เราจะรับเนื้อหานั้นได้เร็วขึ้นถ้าเลือกที่จะอ่าน แทนที่จะฟัง

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

    I probably read one to two hours a day.
    That puts me in the top 0.00001%.
    — Naval Ravikant

    .

    Combine

    แต่ละทักษะโดดเด่นในตัวเอง แต่เมื่อรวมทั้ง 3 ทักษะเข้าด้วยกัน เราจะมี pipeline ที่จะขับเคลื่อนเราไปข้างหน้าอย่างไม่สิ้นสุด:

    1. Reading: หาความรู้
    2. Thinking: เชื่อมโยงไอเดีย
    3. Writing: ผลิตความคิดใหม่ ๆ
    Reading -> Thinking -> Writing

    💧 Idea 2. Accept the Reality

    ขั้นแรกของการเอาตัวรอด คือ ทำตัวเหมือนน้ำ

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

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

    Water adopts the shape of its receptacle,
    it is sometimes a trickle
    and sometimes a wild sea.
    — Miyamoto Musashi


    🧭 Idea 3. Agency

    Agency คือ ความสามารถในการเลือกทางเดินของตัวเอง และสร้างอนาคตของตัวเอง:

    • คนที่มี high agency สามารถเลือกเป้าหมายของตัวเองได้
    • คนที่มี low agency จะทำตามเป้าหมายที่คนอื่นกำหนด

    Agency เป็นอีกทักษะที่จะทำให้เราอยู่รอด เพราะถ้าเราไม่มี agency คนอื่นจะกำหนดทิศทางให้กับเรา ซึ่งอาจหมายถึงเราจะไม่สามารถทำตามความต้องการของเราได้

    If you don’t know what you want,
    you will be told what you want,
    and you will believe it.
    If you don’t create a purpose,
    you will be assigned one.
    — Dan Koe


    🔌 Idea 4. Energy, Not Time

    สิ่งที่เราควรบริหารให้ดี ไม่ใช่เวลา แต่คือ energy

    .

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

    สิ่งเดียวที่เราทำได้ คือ เลือกสิ่งที่จะทำในแต่ละเวลาเท่านั้น

    You can’t manage time;
    you actually only manage
    what you do during time.
    — David Allan

    .

    Energy คือ แบตเตอรี่ในตัวเรา ทุกเช้าที่เราตื่นขึ้นมา แบตเตอรี่เราเต็ม 100% และลดลงเรื่อย ๆ ตามกิจกรรมระหว่างวัน

    ยิ่งเราใช้ energy ไปมากเท่าไร เราก็ยิ่งมีแบตเตอรี่ให้ใช้น้อยลงเท่านั้น

    ถ้าเราหมด energy ไปกับสิ่งที่ไม่สำคัญตั้งแต่ต้นวัน เราจะไม่มี energy ให้กับสิ่งที่สำคัญตอนท้ายวัน

    .

    สิ่งที่เราต้องบริหาร ไม่ใช่เวลา แต่คือ energy เพื่อให้เรามี energy ไว้ใช้กับสิ่งสำคัญเมื่อเวลามาถึง

    Time management is a lie. …
    Time is not your limiting resource
    —energy is.
    — Jonathan Jenkins


    👀 Idea 5. Make Yourself Discoverable

    การสร้าง impact มีอยู่ 3 ขั้นตอน:

    1. Awareness: เป็นที่รู้จัก
    2. Consideration: มีคนพิจารณา
    3. Conversion: มีคนซื้อ/เข้าร่วม

    .

    Awareness: ถ้าเราอยากสร้าง impact เราจะต้องทำตัวเองให้เป็นที่รู้จัก

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

    .

    Consideration and conversion: การมีเว็บไซต์อย่างเดียวไม่พอที่จะสร้าง impact

    ถ้าเรามีเว็บไซต์ แต่ไม่มี content ก็จะไม่มีใครรู้จักเรา

    เว็บไซต์ที่สร้าง impact จะต้องมี content ที่ดี ซึ่งมีลักษณะ 4 อย่าง ได้แก่:

    1. Experience: สะท้อนประสบการณ์เฉพาะตัว
    2. Expert: สื่อถึงความเชี่ยวชาญ
    3. Authoritative: มักเป็นที่กล่าวถึง/อ้างอิง
    4. Trustworthiness: น่าเชื่อถือ
    Impact = Website + Quality Content

    📈 Idea 6. Dissociate Income From Time

    รายได้ที่ยั่งยืน คือ รายได้ที่ไม่ผูกติดกับเวลา

    เราแยกรายได้ออกจากเวลาได้ด้วย leverage

    Leverage คือ ตัวคูณที่จะขยาย impact ของเรา และแบ่งเป็น 2 ประเภท:

    1. Permission-based เช่น เงินและแรงงาน ที่เราต้องขออนุญาตจากคนอื่นก่อน
    2. Permission-less เช่น หนังสือ โค้ด สื่อต่าง ๆ ที่เราสามารถสร้างได้โดยไม่ต้องขออนุญาตจากใคร และทำซ้ำได้โดยใช้ต้นทุนเกือบเป็นศูนย์

    เราสามารถแยกรายได้ออกจากเวลาได้ง่าย ๆ ด้วย permission-less leverage เช่น:

    • เขียนหนังสือ
    • แต่งเพลง
    • ถ่ายภาพ
    • เขียนโปรแกรม

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


    💡 Idea 7. What Won’t Change for Good Products

    คำถามยอดฮิตที่ผู้นำในด้านต่าง ๆ มักถูกถาม คือ ในอนาคต อะไรจะเปลี่ยนไปบ้าง?

    แต่คำถามที่เราควรถาม คือ อะไรที่จะไม่เปลี่ยนไปบ้าง? เพราะแทนที่จะอยู่กับการคาดการณ์ เราจะปรับตัวอยู่บนพื้นฐานของสิ่งที่เรารู้อยู่แล้ว

    พฤติกรรมมนุษย์เป็นสิ่งหนึ่งที่เปลี่ยนได้ยาก

    ในการสัมภาษณ์ครั้งหนึ่ง Jeff Bezos กล่าวว่า ในอนาคต ลูกค้าจะยังคงมองหา 3 อย่าง:

    1. Price: ราคาถูก
    2. Quality: คุณภาพดี *
    3. Delivery: ส่งเร็ว

    ถ้าเราสามารถสร้างของที่มีลักษณะ 3 อย่างนี้ได้ เราก็มีโอกาสที่จะประสบความสำเร็จมากกว่าคนอื่น

    Customers are still going to want low prices.
    They are still going to want fast delivery.
    And they are still going to want a big selection.
    — Jeff Bezos

    .

    Note:

    • ใน quote จะเห็นว่า Jeff Bezos ไม่ได้พูดถึง quality แต่เป็น selection แทน
    • แต่ผมยังเห็นด้วยว่า สำหรับ product ทั่วไป สิ่งที่ลูกค้ามองหาคือ solution ที่จะแก้ปัญหาได้ ไม่ใช่ทางเลือก เหมือนกับ e-commerce

    ⭐️ Idea 8. AI Is for Experts

    AI จะช่วยให้คนที่มีความรู้ได้ไกลขึ้น เพราะคนเหล่านี้รู้ว่าจะใช้ AI ยังไงเพื่อให้ได้ในสิ่งที่ต้องการ

    เช่น Gemini CLI ที่สามารถใช้ tool ต่าง ๆ ได้ เช่น:

    • Notion
    • Canvas
    • JavaScript

    ถ้าเรารู้ว่าจะใช้ Gemini CLI ยังไง เราสามารถสร้างของที่ตอบโจทย์และเข้าถึงตลาดได้เร็วกว่าคนอื่น

    (อ่านเพิ่มเติมเกี่ยวกับ Gemini CLI)


    🧠 Idea 9. No One Knows the Future

    อนาคตเป็นเหมือน Schrödinger’s cat ที่มีความเป็นไปได้มากมาย แต่มีแค่ความเป็นไปได้เดียวที่จะเกิดขึ้นเท่านั้น

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


    👏 Idea 10. Last Message

    บทเรียนทิ้งท้าย 2 ข้อ:

    1. Do the right thing
    2. Play

    .

    Do the right thing: ทำสิ่งที่ต้องทำในเวลาที่สมควร

    เช่น เราไม่จำเป็นต้องตื่นนอนทุกเช้าเพื่อประสบความสำเร็จ

    ถ้าเราตื่นมาและใช้เวลา 30 นาทีแรกของวันไปกับ social media ชีวิตเราก็จะไม่เปลี่ยนไปจากเดิม

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

    เราไม่ต้องทำตามคำแนะนำทุกอย่างของคนอื่น เราแค่ต้องทำในสิ่งที่ถูกต้องในเวลาที่สมควรเท่านั้น

    Always do the right thing.
    The rest doesn’t matter.
    — Marcus Aurelius

    .

    Play: มองโลกเป็นเหมือนสนามเด็กเล่นที่เราเล่น ทดลอง เรียนรู้ และเติบโตได้

    เมื่อเราทำงานที่เหมือนการเล่น เราจะมีชัยไปกว่าคนอื่น

    Find what feels like play to you,
    but looks like work to others.
    — Naval Ravikant


    🔔 ใครที่ชอบบทความนี้ ฝากกด subscribe และติดตามกันได้ที่:

  • AI Literacy: สรุป 31 ข้อคิดการใช้ AI ให้อยู่รอด จาก session แชร์ความรู้ให้กับนักศึกษา ม.หอการค้าไทย

    AI Literacy: สรุป 31 ข้อคิดการใช้ AI ให้อยู่รอด จาก session แชร์ความรู้ให้กับนักศึกษา ม.หอการค้าไทย

    สัปดาห์ที่แล้ว ผมมีโอกาสแชร์ความรู้การใช้ AI ในหัวข้อ AI literacy ให้กับนักศึกษาคณะการศึกษาปฐมวัย มหาวิทยาลัยหอการค้าไทย

    ในบทความนี้ ผมจะมาสรุป 31 ข้อคิดที่ผมแชร์ใน session โดยแบ่งเป็น 5 กลุ่ม:

    1. Why AI literacy: ความสำคัญของ AI literacy
    2. Working with AI: แนวคิดการทำงานกับ AI
    3. How to prompt: วิธีเขียน prompt
    4. Future trends: แนวโน้มของ AI ในอนาคต
    5. Be human: การเป็นมนุษย์ในยุคของ AI

    ถ้าพร้อมแล้ว ไปเริ่มกันเลย


    1. 🤖 Part I. Why AI Literacy
    2. 💼 Part II. Working With AI
    3. 👷 Part III. How to Prompt
    4. 🚀 Part IV. Future Trends
    5. 😌 Part V. Be Human

    🤖 Part I. Why AI Literacy

    .

    ข้อ 1. Pareto Principle (80/20 rule)

    Pareto principle เป็น mental model หรือแนวคิดช่วยตัดสินใจที่บอกว่า 80% ของความสำเร็จมักมาจาก 20% ของสิ่งที่เราทำ

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

    การเรียนรู้เกี่ยวกับ AI คือ 20% ที่เราทำได้ เพื่อให้โอกาสอยู่รอดถึง 80%

    .

    ข้อ 2. What is AI literacy?

    AI literacy คือ ความเข้าใจและความสามารถในการใช้งาน AI ได้อย่างมีประสิทธิภาพ

    .

    ข้อ 3. AI can do many things

    AI สามารถทำได้หลายอย่าง เช่น:

    • Content: สร้าง content เช่น ข้อความ ภาพ เสียง และวิดีโอ
    • Analysis: วิเคราะห์ข้อมูลขนาดใหญ่อย่างรวดเร็ว
    • Automation: ทำงานโดยอัตโนมัติ (เช่น คุยกับลูกค้าในขณะที่เราหลับ)

    .

    ข้อ 4. Jobs at risk

    ความสามารถของ AI ทำให้มีหลายงานเสี่ยงที่จะถูกแทนที่ แม้กระทั่งงานที่ปกติจะต้องใช้มนุษย์ เช่น:

    • ล่าม/นักแปลภาษา
    • นักเขียน
    • โปรแกรมเมอร์
    • Customer service

    เมื่อเป็นอย่างนี้ AI จะมาแทนที่มนุษย์ไหม?

    .

    ข้อ 5. AI still has limitations

    แม้ AI จะทำได้หลายอย่าง แต่ก็ยังมีข้อจำกัดอยู่ เช่น:

    .

    ข้อ 6. We must not fear AI, but people who use AI

    ด้วยข้อจำกัดของ AI เรายังไม่ต้องกลัวว่า AI จะมาแทนที่เรา

    แต่เราควรจะกลัวคนที่ใช้ AI เป็นมากกว่า

    AI won’t replace people, but maybe people that use AI will replace people that don’t. — Andrew Ng

    คนที่ใช้ AI เป็นสามารถไปได้ไกลกว่าคนอื่น

    เช่น ถ้าไม่ใช้ AI เราอาจจะใช้เวลา 2 วันเพื่อเขียนรายงานส่งอาจารย์

    แต่เมื่อใช้ AI เราอาจใช้เวลาแค่ 2 ชั่วโมง และมีเวลาสำหรับอ่านหนังสือสอบมากขึ้น ทำให้เรามีโอกาสได้เกรดที่ดีกว่าคนอื่น

    .

    ข้อ 7. The one who survives is the one who levels up

    แต่ละครั้งที่มีเทคโนโลยีใหม่เกิดขึ้น คนที่อยู่รอด คือ คนที่ยกระดับตัวเอง

    สมัยก่อน เราผลิตหนังสือโดยใช้ scribe หรือชาวบ้านที่ฝึกคัดลอกหนังสือมาโดยเฉพาะ scribe ใช้เวลาฝึกฝนนานหลายปีกว่าจะสามารถคัดหนังสือได้

    วันหนึ่ง เครื่องพิมพ์ถูกพัฒนาขึ้น เราสามารถพิมพ์หนังสือได้หลายพันหน้าในวันเดียว โดยไม่ต้องพึ่ง scribe

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

    ส่วน scribe ที่ปรับตัวเข้าหาเทคโนโลยี และฝึกควบคุมเครื่องพิมพ์ ยังคงอยู่รอดต่อไป

    การมาถึงของ AI ก็เหมือนเครื่องพิมพ์ ถ้าเราไม่เรียนรู้ที่จะใช้ AI เราก็จะค่อย ๆ ถูกลืม เหมือนกับ scribe ที่ยังคัดหนังสือด้วยมือ

    .

    ข้อ 8. We are at a crossroad: choose

    AI พัฒนาเร็วขึ้นและก้าวกระโดดมากขึ้นเรื่อย ๆ

    ในช่วงแรกที่ ChatGPT เปิดตัวใหม่ ๆ เราต้องรอนานหลายเดือนกว่าจะได้ใช้ ChatGPT เวอร์ชั่นใหม่ที่มีความสามารถไม่ต่างจากเวอร์ชั่นก่อนหน้ามากนัก

    ในปัจจุบัน เราจะเห็น ChatGPT มีการอัปเดตที่ถี่ขึ้น และในอัปเดตแต่ละครั้ง ChatGPT มีความสามารถมากกว่าเวอร์ชั่นก่อนมาก

    การที่ AI พัฒนาเร็วขึ้นเรื่อย ๆ ทำให้เรามีเวลาปรับตัวน้อยลงเรื่อย ๆ

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

    The people who will come out of this well won’t be the ones who mastered one tool. They’ll be the ones who got comfortable with the pace of change itself. — Matt Shumer


    💼 Part II. Working With AI

    .

    ข้อ 9. Maslow’s hammer

    I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail. — Abraham Maslow

    Maslow’s hammer เป็น mental model ที่บอกว่า เครื่องมือสามารถจำกัดมุมมองของเราได้

    เช่น ถ้าเรามีค้อน เราจะมองทุกอย่างเป็นตะปู

    ในยุคของ AI เราอาจมองว่าทุกอย่างแก้ได้ด้วย AI:

    • ทำงานเร็วขึ้น
    • ผิดพลาดน้อยลง
    • มีเวลามากขึ้น

    แต่ไม่ใช่ทุกปัญหาจะแก้ได้ด้วย AI เพราะ AI ไม่ใช่เครื่องมือสำหรับแก้ทุกอย่าง

    ถ้าเราอยากตอกตะปู เราจะต้องใช้ค้อน ไม่ใช่ AI

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

    .

    ข้อ 10. AI is built in man’s image

    AI เกิดจากการ train model ด้วยข้อมูลจากอินเทอร์เน็ตซึ่งมาจากมนุษย์

    Human -> Data -> Train -> AI

    เพราะ AI ถูกสร้างจากข้อมูลของมนุษย์ และเรามองได้ว่า AI เป็นเหมือนเป็นมนุษย์คนหนึ่ง

    .

    ข้อ 11. AI as capable but junior assistant

    ถ้าเรามอง AI เป็นคน AI จะเป็นเหมือนผู้ช่วยที่มีความรู้รอบด้านและมีศักยภาพสูง

    แต่สิ่งเดียวที่ผู้ช่วยคนนี้ยังขาดไป คือ ทิศทาง

    .

    ข้อ 12. Even a fried egg is hard to get right

    การทำงานกับ AI ก็เหมือนสั่งไข่ดาว แม้จะดูง่าย แต่ก็ไม่ง่ายอย่างที่คิด

    บางครั้ง เราอยากกินไข่ไม่สุก แต่ได้แบบสุกมาแทน

    บางครั้ง เราอยากให้ AI สร้างรูปในแบบที่เราคิด แต่ไม่เคยได้ภาพนั้นสักที

    .

    ข้อ 13. Principal-agent dilemma

    Principal-agent dilemma เป็น mental model ที่บอกว่า คนทำงาน (agent) มักทำตามความต้องการของคนสั่ง (principal) ไม่ได้ เพราะทั้งสองฝ่ายมีข้อมูลไม่เท่ากัน

    ในตัวอย่าง เราไม่ได้ไข่ดาวที่ต้องการ เพราะคนทอดไข่ไม่รู้ว่าเราชอบไข่สุกหรือไม่สุก

    เช่นเดียวกัน AI สร้างรูปที่เราต้องการไม่ได้ เพราะ AI ไม่รู้ว่ารูปที่เราคิดต้องการเป็นยังไง

    .

    ข้อ 14. Fixing the egg

    ถ้าเราอยากได้ไข่ดาวที่ต้องการ เราจะต้องทำให้ AI รู้เท่ากับเรา เช่น ให้ข้อมูลอย่าง:

    1. Goal: ภาพปลายทางที่เราต้องการ (ภาพแมวน่ารัก)
    2. Steps: ขั้นตอนที่จะไปถึงจุดหมาย (วาดแมวก่อน แล้วค่อยวาดองค์ประกอบอื่น ๆ ในภาพ)
    3. Constraints: ข้อจำกัดหรือสิ่งที่ไม่ควรทำ (เช่น ไม่เอาแมวสีดำ ฉากหลังต้องดูสดใส)

    .

    ข้อ 15. Human in the loop: taste and iterate

    Taste: เมื่อไข่ดาวมาเสิร์ฟ เราจะไม่รู้ว่าไข่ดาวอร่อยไหม จนกว่าจะได้ลองชิมด้วยตัวเอง

    การทำงานกับ AI ก็เช่นกัน เราไม่ควรจะบอกว่า สิ่งที่ AI ส่งกลับมาดีไหม จนกว่าจะได้เช็กด้วยตัวเอง

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

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

    .

    ข้อ 16. Be accountable

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

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

    ดังนั้น ไม่ว่างานของ AI จะดูดีขนาดไหน เราควรจะตรวจสอบด้วยตัวเองก่อนที่จะนำงานไปใช้จริง


    👷 Part III. How to Prompt

    .

    ข้อ 17. Prompt and prompt engineering

    Prompt คือ คำสั่งสำหรับทำงานกับ AI ซึ่งจะเป็น:

    • ข้อความ
    • ภาพ
    • เสียง

    หรือสื่ออื่น ๆ ก็ได้

    Prompt engineering คือ การออกแบบ prompt เพื่อทำให้ AI ทำงานได้อย่างมีประสิทธิภาพสูงสุด

    .

    ข้อ 18. Effective prompts

    Prompt ที่ดีมีลักษณะ 3 อย่าง:

    1. Clear: ชัดเจนว่า สิ่งที่ต้องทำคืออะไร
    2. Specific: มีความเจาะจง ไม่คลุมเครือ
    3. Structured: มีโครงสร้างที่ดี รู้ว่าข้อมูลไหนคืออะไรและต้องใช้ยังไง

    นอกจากนี้ ทั้ง 3 อย่างต้องทำงานภายในเป้าหมายและขอบเขตงานที่เราต้องทำ

    .

    ข้อ 19. How and what of prompting

    การเขียน prompt ที่เราจะต้องรู้มี 2 อย่าง:

    1. Prompting technique (how): วิธีเขียน prompt ให้ AI เข้าใจ
    2. Prompting framework (what): สิ่งที่เราจะควรใส่ลงใน prompt

    .

    ข้อ 20. Prompting technique: n-shot

    n-shot technique เป็นการสั่ง AI โดยให้ตัวอย่าง (shot) และแบ่งได้เป็น 3 ประเภท:

    • Zero-shot: สั่งโดยไม่ให้ตัวอย่าง
    • One-shot: สั่งโดยให้ 1 ตัวอย่าง
    • Few-shot: สั่งโดยให้หลายตัวอย่าง

    เราจะใช้ shot น้อยเมื่อต้องการให้คำตอบของ AI มีความหลากหลาย (มีความสร้างสรรค์)

    และใช้ shot เยอะเมื่อต้องการให้คำตอบของ AI ใกล้เคียงกับภาพที่เราต้องการมากที่สุด

    ตัวอย่างการใช้ n-shot:

    จะสังเกตว่า ยิ่งให้ shot เยอะ คำตอบของ AI ก็จะยิ่งใกล้เคียงกับตัวอย่างมากขึ้น (zero-shot ให้สัตว์ป่า แต่ few-shot ให้สัตว์เลี้ยง)

    .

    ข้อ 21. Prompting technique: COT

    COT ย่อมาจาก chain-of-thought ซึ่งเป็นวิธีเขียน prompt โดยกำหนดวิธีคิดให้กับ AI

    เช่น แทนที่ให้ AI แก้โจทย์เลขในทันที:

    A ซื้อส้ม 2 ลูก ลูกละ 10 บาท A ต้องจ่ายเงินเท่าไร

    เราจะสอนให้ AI คิดก่อน:

    A ซื้อส้ม 2 ลูก ลูกละ 10 บาท
    วิธีคิด:
    1. หาว่า ส้มราคาลูกละเท่าไร
    2. คูณจำนวนราคาด้วยจำนวนส้มที่ต้องซื้อ
    A ต้องจ่ายเงินเท่าไร

    COT เหมาะกับงานที่ซับซ้อนหรือมีหลายขั้นตอน เช่น:

    • แก้สมการเลข
    • วิเคราะห์งานวิจัย
    • การวางแผนเชิงกลยุทธ์

    .

    ข้อ 22. Prompting framework: theatre model

    Theatre model เป็นแนวการเขียน prompt ที่มนุษย์เป็นเหมือนผู้กำกับ และ AI เป็นนักแสดงบนเวทีของเรา

    Theatre model ประกอบด้วย 6 ส่วน ได้แก่:

    1. Role: บทบาทของ AI
    2. Context: setting ของละคร (บริบทในการทำงาน)
    3. Task: การเดินเรื่อง (เป้าหมาย ขั้นตอน และข้อจำกัด)
    4. Output format: จุดจบของเรื่องจะเป็นยังไง (ส่งที่ AI ต้องส่งให้เรา)
    5. Input: อุปกรณ์ที่จะให้นักแสดงใช้ (ข้อมูลสำหรับ AI)
    6. Execution: “Action!” (คำสั่งให้ AI)

    ตัวอย่างการใช้ theatre model เพื่อสร้างสูตรอาหารใหม่:

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

    ตั้งชื่อจาน และบอกวิธีการเตรียมอาหาร

    อาหารจะต้องมีความเป็นไทย และถูกปากคนทุกชาติ

    ห้ามเป็นอาหารที่มีอยู่แล้ว
    Output formatส่งกลับมาในรูปแบบนี้:

    ชื่ออาหาร:
    xxx

    ขั้นตอนการทำ:
    xxx
    Inputวัตถุดิบที่ต้องมี:
    1. ใบโหระพา
    2. เนื้อไก่
    3. ผักชี
    Executionคิดสูตรอาหารเลย

    .

    ข้อ 23. Annotation

    เพื่อช่วยให้ AI เข้าใจ prompt ได้มากขึ้น เราควรจัด format ให้อ่านง่ายโดยใช้ XML tags และ markdown:

    • XML tags เช่น <example>ตัวอย่าง</example>
    • Markdown เช่น # และ *

    อ่านเพิ่มเติมเกี่ยวกับ XML tags และ markdown

    .

    ข้อ 24. Iterate

    Prompt แรกอาจจะไม่ให้ในสิ่งที่เราต้องการเสมอไป

    สิ่งที่เราต้องทำ คือ วิเคราะห์ว่า ผลลัพธ์ยังขาดอะไรไป และมีส่วนไหนของ prompt ที่เราปรับได้ แล้วส่ง prompt ที่แก้แล้วให้ AI อีกครั้ง

    ทำอย่างนี้วนไปจนกว่าจะได้ผลลัพธ์ที่เราต้องการ

    .

    ข้อ 25. Ask AI

    ถ้าไม่รู้ว่าจะเขียน prompt ยังไง หรือ prompt ยังขาดอะไรไป เราสามารถถาม AI ได้ให้ช่วยเราได้

    ตัวอย่าง:


    .

    ข้อ 26. AI, more agentic

    AI จะทำงานแบบอัตโนมัติมากขึ้น และมีมนุษย์เข้ามาเกี่ยวข้องน้อยลง

    .

    ข้อ 27. Human and AI getting closer

    เพราะ AI จะทำงานได้ด้วยตัวเองมากขึ้น AI จะเข้ามามีบทบาทในการทำงานมากขึ้น ทำให้มนุษย์จะทำงานกับ AI อย่างใกล้ชิดมากขึ้น


    😌 Part V. Be Human

    .

    ข้อ 28. Humans required

    แม้ว่า AI จะสามารถทำงานหลาย ๆ อย่างแทนมนุษย์ได้ แต่ในบางงาน เรายังต้องการมนุษย์ด้วยกันเองอยู่ เช่น:

    • นักบิน: แม้ AI จะขับเครื่องบินได้ แต่เราก็อยากให้มีนักบินที่สามารถแก้ปัญหาเฉพาะหน้าอยู่ในห้องนักบิน
    • หมอ: แม้ AI จะวินิจฉัยโรคได้แม่นยำกว่ามนุษย์ แต่เราก็ยังต้องการให้มีคนบอกข่าวดี/ร้ายเป็นคนที่เข้าใจความรู้สึกของเรา
    • Customer service: บางครั้ง เราก็ต้องการคุยกับคนมากกว่า chatbot ที่ตอบเป็น pattern

    .

    ข้อ 29. Skill, like muscle

    ทักษะก็เป็นเหมือนกล้ามเนื้อ เมื่อไม่ได้ใช้งาน ก็จะอ่อนแอลงเรื่อย ๆ

    ถ้าเราใช้ AI ทำทุกอย่างให้เรา ทักษะที่เราเคยมีก็จะค่อย ๆ หายไป

    .

    ข้อ 30. What not to outsource to AI

    4 ทักษะที่เราควรฝึกพัฒนา และไม่ควรให้ AI ทำแทนเรา ได้แก่:

    1. Thinking: การคิด เพราะถ้าเราคิดไม่ได้แล้ว เราจะไม่ประเมินงานของ AI ได้ว่าดี/ไม่ดี
    2. Learning: ถ้าเราไม่เรียนรู้สิ่งใหม่ ๆ เราจะถูกทิ้งไว้ข้างหลัง โดยเฉพาะในยุคที่การเปลี่ยนแปลงเกิดขึ้นอย่างรวดเร็ว
    3. Writing and reading: การเขียนและการอ่านเป็นทักษะที่ช่วยให้เราคิดและเรียนรู้ได้อย่างมีประสิทธิภาพ
    4. Empathy: การเข้าใจคนอื่นเป็นทักษะที่ช่วยให้เราเข้าใจคนอื่นและเชื่อมโยงถึงกันและกันในแบบที่ AI ยังไม่สามารถทำได้

    .

    ข้อ 31. When to use AI

    3 กรณีที่เราจะใช้ AI:

    1. Routine: ใช้ AI ทำงานจำเจหรืองานที่ต้องเป็นประจำ เพื่อที่เราจะได้โฟกัสงานที่ต้องใช้ความคิดมากขึ้น
    2. What and how: ใช้ AI ทำงานในขณะที่เราโฟกัสกับภาพใหญ่ ซึ่งได้แก่ when (ทำเมื่อไร) และ why (ทำไมต้องทำ)
    3. Brainstorm: ใช้ AI ช่วยระดมความคิด เพราะ AI มีข้อมูลเยอะ และช่วยให้เห็นมุมมองที่เราคิดไม่ถึงมาก่อนได้

    🔔 ใครที่ชอบบทความนี้ ฝากกด subscribe และติดตามกันได้ที่: