ผู้ใช้ของคุณทำผิดพลาดอะไรบ้างและคุณจะอัปเดตแอปพลิเคชันของคุณให้จัดการได้อย่างไร [ปิด]


12

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


2
พิจารณาชื่อเรื่องนี้: "ผู้ใช้ของคุณทำผิดพลาดอะไรและคุณจะอัพเดตแอปพลิเคชันของคุณเพื่อจัดการกับปัญหาเหล่านั้นได้อย่างไร"
Peter Boughton

คำตอบ:


25

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

ฉันเคยเห็นแอปรุ่นเก่าที่ผู้ใช้ได้รับการฝึกอบรมไปที่:

  • ไม่ใส่เครื่องหมายอะโพสโทรฟีในชื่อ
  • ไม่ใส่สัญลักษณ์อื่นใดนอกจาก a-z0-9,
  • ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างก่อนหรือหลังข้อความที่ป้อน
  • ตรวจสอบว่ามีการป้อนที่อยู่อีเมลในรูปแบบที่ถูกต้องลงในemailฟิลด์มิฉะนั้นการส่งเมลที่ตามมาไปยังผู้ใช้นั้นจะใช้สิ่งที่อยู่ในฟิลด์และจะล้มเหลว
  • ตรวจสอบให้แน่ใจว่าhttp://ใส่" " ไว้ก่อนที่อยู่เว็บ

ฯลฯ

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


นี่มักจะถูกมองข้าม ... ฉันไม่อยากจะเชื่อเลยว่าเรายังคงพบปัญหาเหล่านี้ในวันนี้! @
mpeterson

2
+1 เพราะฉันเห็นแล้ว แต่: A "ที่อยู่อีเมลรูปแบบถูกต้อง" เป็นเรื่องยากที่ฉาวโฉ่ในการตรวจสอบfightingforalostcause.net/misc/2006/compare-email-regex.phpให้แน่ใจว่าคุณรู้ว่าสิ่งที่คุณทำ หากคุณเพียงแค่จัดการกับอีเมลบางส่วนที่ บริษัท ของคุณใช้ภายในองค์กรนั่นน่าจะดีไม่เช่นนั้นจะมีความซับซ้อนมากกว่าที่คาดไว้มากที่สุด เรื่องเดียวกันสำหรับhttp://จุดตรวจสอบ เป็นตัวอย่างที่ไม่นี้ในทางที่ไร้เดียงสาและผลที่ได้คือการที่คุณไม่สามารถแพคเกจโฮสต์บนโดเมนที่ใช้ASDF https://
Inaimathi

ไม่ได้ผล ... ไม่ยอมรับอีเมลที่มีเส้นทางบาง (ใช่ฉันรู้ว่าใครสนใจ แต่ยังคงตรวจสอบอีเมลไปยัง RFC IS ยาก)
Spudd86

7

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

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


1
โปรดส่งต่อโพสต์นี้ไปยังผู้พัฒนาทั้งหมดที่ใช้ฟังก์ชัน "อยู่ด้านบน" ที่บังคับในแอปของพวกเขา แม้ว่าซีอีโอจะขอให้เราควรมีสิทธิที่จะพูดว่า "ไม่"

7

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

ดังนั้นฉันสามารถพูดได้เฉพาะสิ่งที่ฉันรู้ ต่อไปนี้เป็นปัญหาทั่วไปเกี่ยวกับโปรแกรมบรรทัดคำสั่ง:

ทางเลือกมากเกินไป

หากคุณไม่ได้เขียนคอมไพเลอร์หรือผู้แก้ไขบรรทัดให้พยายาม จำกัด ตัวเลือกให้เต็มหน้าจอเดียวบนบัฟเฟอร์เฟรมขนาด 80x25 เมื่อ--helpหรือ/?ผ่านไป มันสมบูรณ์ดีที่มีตัวเลือกมากกว่านั้น แต่แบ่งออกเป็นหมวดหมู่ย่อย ตัวอย่างเช่น

foo --help

foo --help option_name

ไม่มีตัวเลือกยาว

มันง่ายมากที่จะจำกว่าก็คือการจำfoo --attach_to [argument] --volatile --verbose foo -a [arg] -v +Vสิ่งนี้ไม่สามารถทำได้เสมอไป แต่ในกรณีส่วนใหญ่

ไม่มีการตรวจสอบอินพุต

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

คุณอาจไม่ต้องการบางสิ่งที่ซับซ้อนเหมือน lexer บางทีคุณอาจโทเค็นสตริงได้ถ้าคุณต้องการสิ่งต่าง ๆ ตามลำดับด้วยบางสิ่งในบางสถานที่

ฉันได้รับรายงานข้อผิดพลาดทันทีที่คาดว่าจะมีจำนวนเต็มและมีคนพิมพ์f*** my lifeคำพูด ฉันไม่ได้เขียนโปรแกรมนั้นฉันโชคร้ายที่ได้รับมรดก

ไม่มีปุ่ม 'verbocity'

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

นอกจากนี้คุณยังสามารถปิดการยืนยันเพื่อปิดการใช้งานผ่าน NDEBUG หรือวิธีการอื่นที่ยังคงส่งผลให้บางสิ่งที่พิมพ์หรือบันทึกไว้เพื่อให้ผู้ใช้ค้นหา

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

ไม่มี 'บัดดี้บั๊ก' ในโหมดแก้ไขข้อบกพร่อง

มีโปรแกรมมากมายที่นำเสนอสวิตช์ 'ดีบั๊ก' ที่มอบการพูดคุยเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นกับโปรแกรม แต่มีข้อเสนอน้อยมากดังต่อไปนี้:

  • วิธีการส่งรายงานโดยอัตโนมัติผ่าน HTTP / HTTPS และรับหมายเลขอ้างอิงบริการบางประเภท
  • วิธีการดัมพ์ข้อมูลที่มีประโยชน์ไปยังไฟล์ที่สามารถส่งเป็นสิ่งที่แนบมากับคำร้องขอการสนับสนุน

หรือบางทีคุณอาจชอบฟังคนอ่านสิ่งต่อไปนี้ทางโทรศัพท์:

มันบอกว่าสภาพที่ไม่คาดคิดที่ศูนย์ eff oh สี่ศูนย์ oh .... ตกลง lemme อ่านที่กลับมาให้คุณ ...

ไฟล์การกำหนดค่าที่ซับซ้อนมากเกินไป

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

ไม่มีไฟล์กำหนดค่า

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

ไม่มีสัญญาณ 'พื้นเปียก'

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

เมื่อเป็นไปได้ (ตรงนี้กับการตรวจสอบการป้อนข้อมูล) ใช้ apporach ของ Google:

คุณหมายถึง foo --bar FILENME หรือคุณพิมพ์เฉพาะ foo --bar

เสนอวิธีออกจากคำแนะนำการทำลายล้าง

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

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


3

"คุณแน่ใจหรือว่าต้องการลบไฟล์ / บันทึกนี้ใช่ / ไม่ใช่" คลิกใช่แล้วได้รับสายว่า "ผิดพลาด" คลิกปุ่มลบสีแดงและต้องการข้อมูลนั้นกลับ :)


7
ทำไม "คำพูด" คุณแนะนำว่าพวกเขาจงใจคลิกใช่เพียงเพื่อพวกเขาจะได้โทรศัพท์หาคุณ?
Peter Boughton

1
แก้ไขได้อย่างง่ายดายโดยใช้ "การลบนุ่ม" ซึ่งสามารถยกเลิกได้
Robert Harvey

1
ใช่พวกเขาสามารถยกเลิกได้ แต่ทำไมลบในตอนแรก? Thats ทำไมฉันใส่คำเตือนว่ามีขอให้ยืนยันเป็นครั้งที่สองที่พวกเขาต้องการที่จะลบมัน :)
Quamis

2
@Quamis: กล่องโต้ตอบได้กลายเป็นที่น่ารำคาญสำหรับผู้ใช้หลายคนที่พวกเขาเพียงแค่คลิกตกลงใช่อะไรก็ตามเพื่อผ่านกล่องโต้ตอบ นั่นเป็นสาเหตุที่ระบบใหม่จำนวนมากใช้การลบแบบอ่อนโดยไม่ต้องมีการยืนยันและให้วิธีการยกเลิกผู้ใช้ ระบบเมลส่วนใหญ่ตอนนี้ทำงานเช่นนี้ตัวอย่างเช่น
Robert Harvey

1
@ Robert Harvey - ฉันเข้าใจและใช่ว่าเป็นเหตุผลเฉพาะที่ต้องมีการลบฮาร์ด ตัวอย่างที่เฉพาะเจาะจงนี้สามารถแก้ไขได้โดยการติดตามนโยบายการเก็บรักษา แต่อาจมีบางกรณีที่ผู้คนกด "ลบ" อย่างถูกต้องโดยหวังว่าผลลัพธ์ของการดำเนินการนั้นจะถูกลบอย่างแท้จริง ฉันชอบเส้นทางนุ่มลบด้วยตัวเอง แต่ประเด็นของฉันคือบางครั้งมันก็ไม่ใช่ตัวเลือก
Inaimathi

3

ฉันไม่รู้สึกว่าการรับตัวแบ่ง / ตัวแก้ไขเฉพาะมีความสำคัญเท่ากับการตระหนักถึงสิ่งนี้:

  • ผู้ใช้ไม่อ่านคู่มือของคุณหรือดูบทช่วยสอนของคุณ พวกเขาเรียนรู้ซอฟต์แวร์ของคุณผ่านการสำรวจ

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

หากคุณยืนยันตัวอย่าง:

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

ดูว่าจะเกิดอะไรขึ้น? :)


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

3

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

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

อย่างที่ mpeterson กล่าวผู้ใช้มีความสามารถในการแข่งขันสูงในด้านความเชี่ยวชาญ พวกเขาไม่คิดเหมือนนักพัฒนาซอฟต์แวร์หรือนักออกแบบ


2

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


1
คุณไม่เข้าใจคำถาม คุณทำซ้ำสิ่งที่ฉันเขียนในคำอื่น นี่ไม่ใช่คำตอบสำหรับคำถาม เราสามารถทำอะไรได้บ้างเพื่อป้องกันอันตราย
Maniero

1
ฉันเข้าใจคำถามที่ดีขอบคุณ คำถามมีบางสิ่งที่ไม่เป็นความจริง: "ผู้ใช้นั้นโง่"
LennyProgrammers

1
ไม่มันไม่มี มันเป็นความเข้าใจผิดของคุณ ไม่มีคำพูดของคุณ!
Maniero

1
ตกลงคนไม่ทำสิ่งที่โง่โลกที่สมบูรณ์แบบ :-) นี่คือข้อสรุปของฉันเกี่ยวกับความคิดเห็นเหล่านี้
Maniero

1
ไม่มีความรู้สึกที่ยากใช่ไหม? ;)
LennyProgrammers

1

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

  • ส่วนต่อประสานผู้ใช้ที่ดีควรไม่มีแรงเสียดทาน

    แทนที่จะทิ้งกล่องโต้ตอบ (การดำเนินการที่มีราคาแพงและสิ่งที่ผู้ใช้เพิกเฉยหลังจากสักครู่) เพื่อยืนยันการลบทำการลบและเสนอวิธีการเลิกทำ

  • ส่วนติดต่อผู้ใช้ที่ดีควรค้นพบ

    แม้ว่า ribbon ใน Microsoft Office จะได้รับสะเก็ดระเบิดจำนวนมากเพราะมันบังคับให้ผู้ใช้เก่าของ Word เปลี่ยนวิธีการของพวกเขาริบบิ้นเป็นตัวอย่างที่เปล่งประกายของวิธีที่คุณสามารถทำให้การค้นพบส่วนต่อประสาน (เช่นง่ายต่อการค้นพบ)

  • ส่วนต่อประสานผู้ใช้ที่ดีเช่นรหัสที่ดีควรอธิบายตนเองได้

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


-1

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

ดังนั้นทดสอบการใช้งานกับแต่ละรุ่น!


2
กลับเมื่อฉันอาศัยอยู่กับพ่อแม่ของฉันพ่อของฉันถามฉันว่าทำไมเขาจึงตัดการเชื่อมต่อจากอินเทอร์เน็ตทุกครั้งที่เขาตรวจสอบอีเมลของเขา (ใช่นี้กลับมาอยู่ในยุคหินเมื่อเรามี dial up - ฉันแค่ว่าเก่า ) ฉันขอให้เขาแสดงให้ฉันเดาว่าฉันเห็นอะไร เมื่อกล่องโต้ตอบ 'ส่งและรับ' ของ Outlook Express เกิดขึ้นตัวเลือกในการยกเลิกการเชื่อมต่อหลังจากส่งและรับถูกทำเครื่องหมายไว้ ฉันคิดว่านั่นเป็นสิ่งที่ผู้ใช้ทุกคน ...
JohnL

3
ไม่ใช่จอห์นจริงๆ .. ถ้าโปรแกรมเมอร์ outlook คิดอย่างนั้นพวกเขาคงไม่ได้ทำ CheckBox นั่นตรงนั้นหรือให้ป้ายกำกับที่มีความหมายมากกว่า พ่อของคุณไม่ใช่คนงี่เง่า: คุณสมบัตินี้ไม่ได้คิดมากหรือผ่านการทดสอบการใช้งาน ซอฟต์แวร์ไม่ได้อยู่ที่นี่เพื่อทำให้เรารู้สึกโง่! :)
Arcturus

1
-1: ผู้ใช้ทำผิดแม้ว่าจะสามารถหลีกเลี่ยงสิ่งต่าง ๆ เช่นการติดฉลากที่ดีขึ้น ประเด็นคือคำถามนี้ถามถึงปัญหาเฉพาะที่มีวิธีแก้ไขปัญหาเฉพาะ เพียงแค่พูดว่า "ทดสอบ" เป็นเพียงคำตอบที่ไม่ดี
Maxpm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.