ผมไม่รู้ว่านานเท่าไร แต่แล้วเราก็มาถึง tea house แห่งหนึ่งที่เราหยุดพักตอนขาขึ้น ตอนนั้นผมถาม Sona ถึง Milky Way ตอนนี้ บนท้องฟ้าไม่มีอะไรนอกจากหมอกสีขาวขุ่น
พี่อู๋กับพี่นันปลอดภัยดี เพราะทางเว้งตรงนั้นมีที่พอให้ล่อเข้าโค้งได้ ส่วนตรง Sona ไม่โชคดีเท่าไร คนเนปาลที่อยู่กับ Sona ถูกถุงข้าวสารบนล่อตัวหนึ่งชนเข้าจนเสียหลัก โชคดีที่ Sona ช่วยคว้าตัวไว้ได้
แต่ไม่ว่าจะดันกันเท่าไรก็ไปต่อไม่ได้ เพราะล้อหลังหมุนฟรีในพื้นโคลน Sona กับทีมพยายามเอาหินและใบไม้และกิ่งไม้ข้างทางมาลองใต้ล้อ ช่วยกันอยู่นานรถก็เคลื่อนต่อได้
เรากลับขึ้นมาบนรถ Sona เปลี่ยนให้เราไปนั่งแถวหลังสุด เพื่อให้ Sona กับทีมออกจากรถได้ง่าย เผื่อจะต้องเข็นรถกันอีก
แต่แล้วหมอกก็เริ่มลงปกคลุมเขาที่เราเดินอยู่ เปลี่ยนบรรยากาศรอบตัวให้ดูเหมือนอยู่ในนิทาน Fairy Tale ซึ่งเปลี่ยนไปเป็น Silent Hill เมื่อเราเดินเข้าใกล้ tea house ของ Low Camp จุดหมายแรกของวันนี้
มาถึง Low Camp แบบ Silent Hil
== Daily Quest ==
[/] Forest Camp to Low Camp (🥾 3–4h)
[ ] Low Camp to High Camp (🥾 3–4h)
🏔️ Altitude
2,970m
.
🫖 Part II. Tissue & Tato Paani
“บอกแล้วให้กินน้ำร้อน” Sona บอกหลังจากหยิบกล่องทิชชู่มาวางตรงหน้าผม น้ำมูกผมไหลไม่หยุด “ผมบอกตั้งแต่อยู่ ABC แล้ว เพราะยิ่งกินน้ำเย็นก็จะยิ่งเจ็บคอ”
Porter ของกลุ่มเข้าไปคุยกับ Sona เป็นภาษาเนปาล ผมสงสัยว่าทั้งสองคุยอะไรกันบ้าง
Sona เคยบอกผมว่า ไกด์จะเป็นคนเลือก porter เอง ไม่ใช่คนจัดทัวร์ ปกติ Sona จะเลือกจากเครือข่าย ถ้าคนที่รู้จักไม่ว่าง ก็จะถามไกด์คนอื่นให้ refer มาให้ Sona น่าจะต้องรู้จักคนเยอะพอสมควร ซึ่งก็เป็นเหตุผลว่า ทำไมต้องอยู่ ABC, Sona ถึงทักทายและพูดคุยกับคนนั้นคนนี้มาตลอดทาง
“พี่ขอผักนะ” พี่อู๋บอกผมที่ขอให้ Sona ช่วยเติม dal bhat ให้หน่อย หลังจากกินพิซซ่ามาหลายมื้อ ผมเปลี่ยนมา default เป็น dal bhat แทน เพราะรู้ว่าเป็นอาหารที่จะอยู่ท้องได้นานที่สุด
ดูเหมือนผมอาจจะไม่ใช่คนเดียวที่เริ่มป่วย จากที่ผมสังเกตเมื่อวาน พี่นันเริ่มมีน้ำมูกเหมือนกัน และเราใช้ทิชชู่กันเร็วจนพี่นันเกรงใจและขอซื้อทิชชู่กับเจ้าของ tea house แต่ Sona บอกว่าไม่เป็นไร
ผมขอชาร์จแบตจาก power bank ขนาด 10,000mAh ของพี่อู๋ เพราะค่าชาร์จนับตามจำนวนอุปกรณ์ และมือถือผมยังเหลือแบตเกือบครึ่ง เพราะแทบไม่ได้ใช้เลย ผมเลยรู้สึกไม่ค่อยคุ้มที่จะเสียค่าชาร์จกับการหารค่าชาร์จกับพี่อู๋
พี่นันคุยเสร็จก็ยื่นโทรศัพท์คืนให้ Sona แล้วพี่นันก็เอาแว่นกันแดดของ Sona ไปใส่ชั่วคราว เดินต่อมาได้สักพัก พี่นันก็ถอดแว่นคืนให้ Sona เพราะรู้สึกปวดหัว
ถ้าผมเป็น Sona ก็คงโทรหา Arbin เหมือนกัน เพราะเป็นสถานการณ์ที่ไม่รู้จะแก้ยังไง เพราะถ้าพี่นันตาเจ็บขึ้นมาก็จะเป็นความรับผิดชอบของ Sona โดยตรง แต่ถ้าให้ใส่แว่นแล้วปวดหัว ก็จะทำให้เดินต่อไปได้ยากกว่าเดิม
เราเดินไปทางเดียวกับชายกางเกงขาสั้นที่ผมเจอก่อนหน้านี้ เส้นทางไต่ระดับขึ้นไปจาก MBC และกลายเป็นโคลนในหลายจุดจากการเดินย้ำของนักเดินเขาก่อนหน้า Sona บอกว่าไม่ต้องห่วงรองเท้า แต่เราก็อดเดินหลบโคลนไม่ได้อยู่ดี
พอถ่ายเสร็จ เราก็เดินไปที่ tea house ตรงหน้า ซึ่งไม่ได้อยู่ใกล้อย่างที่คิด ระหว่างทาง เราเห็นหมาภูเขา 3 ตัวกำลังเล่นกับอะไรบางอย่างอยู่
“มันกินอะไรกัน?” ผมถาม Sona
“จะไปรู้ได้ไง” Sona ตอบพร้อมกับหัวเราะในคอ
ครั้งนี้ tea house ของเราคือบ้านหลังแรกสุด ผมกับตรีเดินตาม Sona ผ่านห้องอาหารที่คนนั่งอยู่แน่น ไปในห้องครัว เราหยุดอยู่นอกครัวจนกระทั่ง Sona กวักมือเรียกให้เข้าไป
หลังกินเสร็จ เราก็เดินไปที่ร้านขายของชำฝั่งตรงข้าม หาซื้อของกินที่จะติดตัวขึ้นเขาไปด้วย ผมไม่ได้ซื้ออะไรเพิ่ม เพราะผมเตรียม power bar มาสำหรับแก้หิว และไม่คิดว่าผมจะคิดถึงอาหารไทยบนนั้น
“พี่นันกับพี่อู๋กลับก่อน” พี่นันบอกเมื่อออกจากร้าน “ฝากด้วย” พี่นันบอกกับ Sona
== Do Your Leg Day == . 👉 Cardio ว่ายากแล้ว leg day ยากกว่า . Leg day เลยกลายเป็นการออกกำลังกายที่ผม skip เยอะที่สุด 😂 . และผลที่ตามมาก็ คือ เจ็บเข่าตอนขาลงเขา เพราะกล้ามเนื้อขาไม่ชินกับการใช้งานหนัก . สำหรับคนที่เตรียมตัวไป Nepal ผมแนะนำให้ฝึก leg day เยอะหน่อย และอาจจะเสริม cardio การเดินขึ้นลงบันได เพื่อให้กล้ามเนื้อชินกับขาขึ้นขาลง 🙂↕️
🧳 Packing
.
🛄 Weight
การเดินทางจะมีการจัดกระเป๋า 3 ครั้ง:
ขาไป: จัดกระเป๋าสำหรับบินไป Nepal
เดินเขา: ถ่ายของจากกระเป๋าลาก ใส่ duffle bag (กระเป๋ากันน้ำ) ที่ทัวร์เตรียมไว้ให้ เพื่อให้ลูกหาบ (porter) ขนขึ้นเขาให้
ขากลับ: ถ่ายของจาก duffle bag กลับกระเป๋าลาก
Duffle bag ที่ทัวร์เตรียมไว้ให้
ในการจัดกระเป๋า เราต้องคำนึงถึง 2 อย่าง:
น้ำหนักขึ้นเครื่อง: ขึ้นอยู่กับสายการบิน อย่างผมได้น้ำหนัก 15 kg โหลด และ 7 kg ถือขึ้นเครื่อง
น้ำหนักที่ลูกหาบ (porter) ขนได้: porter 1 คนจะขนน้ำหนักได้ไม่เกิน 20–30 kg ในกรณีผม porter 1 คนจะขนกระเป๋าของลูกทัวร์ 2 คน (25 kg) ทำให้กระเป๋าผมต้องมีน้ำหนักไม่เกิน 12.5 kg (ถ้ามากกว่านั้น จะต้องใส่ backpack ที่ติดตัวไป)
Power bank: แนะนำให้พกแบบใหญ่ที่ชาร์จได้หลายวันไป เพราะระหว่างเดินเขาจะต้องเสียค่าชาร์จไฟตามจำนวนอุปกรณ์ (ราคา 100–400 NPR) ปกติที่ผมทำ คือ ชาร์จทุกอย่างจาก power bank แล้วเอา power bank ไปชาร์จไฟครั้งเดียว
การที่ 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 สร้างรูปในแบบที่เราคิด แต่ไม่เคยได้ภาพนั้นสักที
ถ้าสิ่งที่ AI ส่งกลับมาไม่ตรงใจ เราควรจะบอก AI ว่าอะไรที่ยังไม่ถูกใจ เพื่อให้ AI ปรับผลลัพธ์และส่งกลับมาให้เราเช็กจนกว่าเราจะพอใจกับงานของ AI
.
ข้อ 16. Be accountable
เราควรจะเช็กงานของ AI ทุกครั้ง เพราะถ้าเราไม่รับผิดชอบกับงานของ AI เราอาจจะเป็นเหมือนทนายความจากออสเตรเลียที่ถูกตรวจสอบ หลังจากศาลพบว่าเอกสารที่ทนายนำส่งเป็นข้อมูลที่ไม่มีอยู่จริง
แม้ทนายจะอ้างว่ารู้เท่าไม่ถึงการณ์ว่า AI ที่บริษัทให้ใช้สามารถสร้างข้อมูลที่ไม่มีอยู่จริงได้ และตัวเองควรตรวจสอบข้อมูลจาก AI ก่อน ศาลยังสั่งให้ทนายงดว่าความด้วยตัวเองเป็นเวลา 2 ปี โดยในระยะเวลานี้จะต้องทำงานเป็นลูกจ้างของคนอื่น และต้องรายงานต่อศาลทุกไตรมาส
ดังนั้น ไม่ว่างานของ AI จะดูดีขนาดไหน เราควรจะตรวจสอบด้วยตัวเองก่อนที่จะนำงานไปใช้จริง
แม้ว่า ผมจะอ่านทวนบทความของตัวเองก่อน post แล้ว แต่ผมเพิ่งเจอว่า การอ่านของมนุษย์ไม่ได้ process ทุกตัวอักษร ทำให้เราสามารถมองข้ามการสะกดผิดหรือการใช้คำผิดได้ในบทความตัวเองได้
สิ่งที่ผมทำได้ คือ ใช้ AI ให้เป็นประโยชน์
ในช่วงหลัง ๆ ผมเริ่มโยนบทความที่เขียนเสร็จแล้วให้กับ AI และถามหา 3 อย่าง:
ซึ่งพบว่า AI ช่วยผมตรวจพบข้อผิดพลาดเหล่านี้ได้เร็วกว่าและครบถ้วนมากกว่าถ้าเราอ่านเองมาก
แต่ก็ยังพบ limitation ของ AI อยู่ว่า AI จะไม่ได้ตรวจเจอทุกข้อผิดพลาด เช่น พิมพ์คำผิด จาก “รู้จักหนังสือ” เป็น “รู้สึกหนังสือ”
แสดงว่า นอกจากการใช้ AI แล้วผมยังควรจะต้องตรวจสอบเนื้อหาด้วยตัวเองอีกครั้งก่อนจะ publish งานออกไป
.
ข้อ 3. Deliver to a wider audience:
จุดอ่อนหนึ่งของผมคือการทำ marketing เพราะถ้าไม่นับการอ่านหนังสืออย่าง How to Grow Your Small Business ในปีนี้ ผมก็ไม่เคยเรียนหรือทำ marketing อย่างจริงจังมาก่อน
Focus on the future: โฟกัสไปกับโอกาสที่ดีกว่า เช่น ในขณะที่เรายังอยู่กับงานเดิม เราได้พัฒนาตัวเองน้อยลงและมีสุขภาพที่แย่ลงเมื่อเทียบกับการหางานใหม่ที่เราอาจได้เรียนรู้สิ่งใหม่ ๆ และได้เจอกับสภาพการทำงานที่ดีต่อสุภาพมากขึ้น
# Load libraries
# Connect to Gemini
from openai import OpenAI
# Connect to Google Drive
from google.colab import drive
# Extract text from PDF
import PyPDF2
# Dedent text
import textwrap
# Render markdown text
from rich.console import Console
from rich.markdown import Markdown
# Set the job description (JD)
web_dev_jd = """
Senior Web Developer
We're looking for a Senior Web Developer with a strong background in front-end development and a passion for creating dynamic, intuitive web experiences. The ideal candidate will have extensive experience with the entire development lifecycle, from project conception to final deployment and quality assurance. This role requires a blend of technical skill, creative collaboration, and a commitment to solving complex programming challenges.
Responsibilities
* Cooperate with designers to create clean, responsive interfaces and intuitive user experiences.
* Develop and maintain project concepts, ensuring an optimal workflow throughout the development cycle.
* Work with a team to manage large, complex design projects for corporate clients.
* Complete detailed programming tasks for both front-end and back-end server code.
* Conduct quality assurance tests to discover errors and optimize usability for all projects.
Qualifications
* Bachelor's degree in Computer Information Systems or a related field.
* Proven experience in all stages of the development cycle for dynamic web projects.
* Expertise in programming languages including PHP OOP, HTML5, JavaScript, CSS, and MySQL.
* Familiarity with various PHP frameworks such as Zend, Codeigniter, and Symfony.
* A strong background in project management and customer relations.
"""
Note: ในกรณีที่ JD เป็นไฟล์ PDF เราสามารถใช้วิธีดึงข้อมูลแบบเดียวกันกับ resumes ได้
.
📄 (3) Resumes
Input สุดท้าย คือ resumes ที่เราต้องการวิเคราะห์
ในตัวอย่าง เราจะดึงข้อมูล resumes จากไฟล์ PDF ใน Google Drive ใน 3 ขั้นตอน ได้แก่:
ขั้นที่ 1. เชื่อมต่อ Google Drive ด้วย drive.mount():
# Connect to Google Drive
drive.mount("/content/drive")
Note: Google จะถามยืนยันการให้สิทธิ์เข้าถึงไฟล์ใน Drive ให้เรากดยืนยันเพื่อไปต่อ
ขั้นที่ 2. กำหนด file path ของไฟล์ PDF ใน Google Drive:
ขั้นที่ 3. ดึง text ออกจาก resumes ด้วย for loop และ PyPDF2:
# Extract resume texts
# Instantiate a collector
rs_texts = {}
# Loop through resume files to get text
for key in rs_file_paths:
# Instantiate an empty string to store the extracted text
rs_text = ""
# Open the PDF file
reader = PyPDF2.PdfReader(rs_file_paths[key])
# Loop through the pages
for i in range(len(reader.pages)):
# Extract the text from the page
text = reader.pages[i].extract_text()
# Append the text to the string
rs_text += text
# Collect the extracted text
rs_texts[key] = rs_text
Contact
+1 (970) 343 888 999
george.evans@gmail.com
<https://www.coolfreecv.com>
32 ELM STREET MADISON, SD
57042
George Evans
PHP / OOP
Zend Framework Summary
Senior Web Developer specializing in front end development .
Experienced with all stages of the development cycle for dynamic
web projects. Well -versed in numerous programming languages
including HTML5, PHP OOP, JavaScript, CSS, MySQL. Strong
background in project management and customer relations.
Perceived as versatile, unconventional and committed, I am
looking for new and interesting programming challenges.
Experience
Web Developer - 09/201 8 to 05/20 22
Luna Web Design, New York
• Cooperate with designers to create clean interfaces and
simple, intuitive interactions and experiences.
• Develop project concepts and maintain optimal workflow.
• Work with senior developer to manage large, complex
design projects for corporate clients.
• Complete detailed programming and development tasks
for front end public and internal websites as well as
challenging back -end server code.
• Carry out quality assurance tests to discover errors and
optimize usability.
Education
Bachelor of Science: Computer Information Systems - 2018
Columbia University, NY
Certifications
PHP Framework (certificate): Zend, Codeigniter, Symfony.
Programming Languages: JavaScript, HTML5, PHP OOP, CSS, SQL,
MySQL.
Reference
Adam Smith - Luna Web Design
adam.smith@luna.com +1(970 )555 555 Skills
JavaScript Symfony Framework
model: model ของ Gemini ที่เราจะเรียกใช้ (เช่น Gemini 2.5 Flash)
temp: ระดับความคิดสร้างสรรค์ของ model โดยมีค่าระหว่าง 0 และ 2 โดย 0 จะทำให้ model ให้คำตอบเหมือนกันทุกครั้ง และ 2 คำตอบจะแตกต่างกันทุกครั้ง
# Create a function to get a Gemini response
def get_gemini_response(prompts, model, temp):
# Generate a response
response = client.chat.completions.create(
# Set the prompts
messages=prompts,
# Set the model
model=model,
# Set the temperature
temperature=temp
)
# Return the response
return response.choices[0].message.content
.
➕ (2) Function ใส่ Input ใน Prompt
ในขั้นที่ 2 เราจะสร้าง function เพื่อประกอบ input เข้ากับ prompt เพื่อพร้อมที่จะนำไปใช้ใน function ในขั้นที่ 1
ในตัวอย่างเราจะสร้าง function แบบนี้:
# Create a function to concatenate prompt + JD + resume
def concat_input(jd_text, rs_text):
# Set the system prompt
system_prompt = """
# 1. Your Role
You are an expert technical recruiter and resume analyst.
"""
# Set the user prompt
user_prompt = f"""
# 2. Your Task
Your task is to meticulously evaluate a candidate's resume against a specific job description (JD) and provide a detailed pre-screening report.
Your analysis must be structured with the following sections and include specific, data-driven insights.
## 1. Strengths
- Identify and elaborate on top three key strengths.
- For each strength, briefly provide specific evidence from the resume (e.g., "The candidate's experience with Python and Django, as shown in their role at Acme Corp, directly addresses the JD's requirement for...") and explain how it directly fulfills a requirement in the JD.
## 2. Weaknesses
- Identify top three areas where the candidate's experience or skills may not fully align with the JD's requirements.
- For each point, briefly explain the potential concern and why it might be a risk for the role (e.g., "The JD requires experience with AWS, but the resume only mentions exposure to Azure. This could indicate a gap in cloud infrastructure expertise.").
## 3. Candidate Summary
- Draft a concise summary of the candidate's professional background.
- Emphasise their JD-relevant core responsibilities, key achievements, and career progression as evidenced in the resume.
## 4. Overall Fit Score
- Provide a numerical score from 1 to 100, representing the overall alignment of the candidate's profile with the JD.
- A higher score indicates a stronger match: 80-100 = best match; 60-80 = strong match; 0-40 = weak match.
## 5. Hiring Recommendation
- Conclude with a clear, binary hiring recommendation: "🟢 Proceed to interview", "🟡 Add to waitlist", or "🔴 Do not proceed".
- Justify this recommendation with a brief, objective explanation based on the analysis above.
---
# 3. Your Output
- Use a professional and objective tone.
- Base your analysis solely on the provided resume and JD. Do not make assumptions.
- Be concise and to the point; no more than 30 words per sentence; the hiring manager needs to quickly grasp the key findings.
- Format your final report using markdown headings and bullet points for readability.
Output template:
'''
# [candidate's name (Title Case)] ([fit score]/100)
[recommendation]: [justification]
## Profile Summary:
[summary]
## Strengths:
- [strength 1]
- [strength 2]
- [strength 3]
## Weaknesses:
- [weakness 1]
- [weakness 2]
- [weakness 3]
'''
---
# 4. Your Input
**1. JD:**
{jd_text}
**2. Resume:**
{rs_text}
---
Generate the report.
"""
# Collect prompts
prompts = [
{
"role": "system",
"content": textwrap.dedent(system_prompt)
},
{
"role": "user",
"content": textwrap.dedent(user_prompt)
}
]
# Return the prompts
return prompts
Note: เราใช้ textwrap.dedent() เพื่อลบย่อหน้าที่เกิดจาก indent ใน function ออกจาก prompt เพื่อป้องกันความผิดพลาดในการประมวลผลของ AI และประหยัด input token
ใช้ for loop เพื่อส่ง resumes ให้กับ Gemini จนครบทุกใบ
# Instantiate a response collector
results = {}
# Loop through the resumes
for rs_name, rs_text in rs_texts.items():
# Create the prompts
prompts = concat_input(web_dev_jd, rs_text)
# Get the Gemini response
response = get_gemini_response(prompts=prompts, model="gemini-2.5-flash", temp=0.5)
# Collect the response
results[rs_name] = response
# Instantiate a console
console = Console()
# Instantiate a counter
i = 1
# Print the results
for rs_name, analysis_result in results.items():
# Print the resume name
print(f"👇 {i}. {rs_name}:")
# Print the response
console.print(Markdown(analysis_result))
# Add spacers and divider
print("\\n")
print("-----------------------------------------------------------")
print("\\n")
# Add a counter
i += 1
ตัวอย่างผลลัพธ์:
ในตัวอย่าง จะเห็นได้ว่า George Evans เหมาะที่จะเป็น Senior Web Developer
การเขียนของ first use, no results, 404 error มีองค์ประกอบเหมือนกัน คือ
Title แจ้งว่า หน้านี้ควรมีข้อมูลอะไร
Description แจ้งว่า ทำไมหน้าถึงว่างเปล่า
Call to action ชวนให้ user ทำ action บางอย่าง
Button เพื่อให้ user ทำ action ได้
.
ตัวอย่าง pattern นี้ ที่เห็นได้ทั่วไป คือ Google Search เวลาที่ไม่พบสิ่งที่เราต้องการค้นหา
Note: Google Search ไม่มี button เพราะ user สามารถใช้ search bar ด้านบนได้
.
ส่วน clear ให้เขียนแค่ …
Title
Description
เพราะ clear เป็นหน้าว่างที่เกิดจากความตั้งใจของ user เอง เช่น user ลบอีเมลทั้งหมดจาก inbox เราไม่จำเป็นต้องมี call to action กับ button เพื่อชวนให้ user หาอีเมลมาเติม inbox ให้เต็มอีกครั้ง
ตัวอย่างเช่น หน้า inbox ของ Outlook เมื่อเราเคลียร์อีเมลจนหมด: