อนุญาตให้เรียนไม่สดเพื่อเพิ่มโอกาสเข้าถึง + การสร้างพื้นที่ปลอดภัยระหว่างบันทึกการสอน

การสอนออนไลน์ ควรมีการบันทึกการสอนไว้ เพื่ออำนวยความสะดวกแก่ผู้เรียนที่มีทรัพยากรเพื่อการเข้าถึงจำกัด และในการบันทึกก็มีข้อควรพิจารณาต่างๆ เพื่อสร้างพื้นที่ปลอดภัยในการเรียนรู้สำหรับทั้งตัวผู้สอนและผู้เรียน #accessibility #safety #privacy #freespeech

“ทำหน้าที่ตัวเองให้ดีที่สุด” พอไหม? ลองพูดในภาษาโปรแกรมเมอร์

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

ทำเว็บ ทำแอป ให้รองรับหลายภาษา หลากวัฒนธรรม

ไลบรารี/เฟรมเวิร์กสำหรับการทำให้แอป/เว็บไซต์รองรับหลายภาษา/วัฒนธรรม หรือที่เรียกว่า “internationalization” ทั้งส่วนหน้าตาและการประมวลผลอื่นๆ เช่น เรียงลำดับตามพจนานุกรม ปฏิทิน รูปแบบวันเวลา สกุลเงิน

โพสต์เรื่องนี้ไปที่กรุ๊ปสมาคมโปรแกรมเมอร์ไทยและใน Medium ขอโพสต์ซ้ำที่นี่

อะไรคือ Internationalization?

หลักๆ ในเรื่องนี้มี 2 คำ คือ internationalization (i18n) กับ localization (L10n)

ส่วนของโค้ดจะเป็นการทำ internationalization รองรับไว้ คือเตรียมให้รองรับหลายภาษา/วัฒนธรรม ไม่ hardcode ภาษาลงในโค้ด คนเขียนโค้ดไม่ทึกทักเรื่องเกี่ยวกับภาษาและวัฒนธรรมไปเอง

สำหรับข้อความ/ข้อมูลสำหรับแต่ละภาษาแต่ละประเทศจะเก็บเป็นก้อนๆ เอาไว้ เรียกว่า locale

การจัดเตรียมข้อมูล locale พวกนี้เรียกว่า localization ซึ่งมีทั้งการแปลข้อความ และการเตรียมข้อมูลที่เจาะจงกับประเทศ/เขตการปกครอง/วัฒนธรรม

(ตัวย่อ i18n และ L10n มาจากอักษรแรกสุด+จำนวนตัวอักษรระหว่างอักษรแรกสุดกับอักษรท้ายสุด+อักษรท้ายสุด ใช้ i ตัวเล็ก และ L ตัวใหญ่ เพื่อให้เห็นแตกต่างจากเลขหนึ่ง 1)

ข้อมูลจำเพาะท้องถิ่น (locale)

ข้อความที่เจาะจงกับแอปในภาษานั้นๆ ก็ต้องแปลเอา ซึ่งมีเครื่องมือให้ช่วยแปลผ่านเว็บหลายตัว ตัวที่นิยมกันมากคือ Transifex (ใช้ฟรีสำหรับโครงการโอเพนซอร์ส) หรือจะใช้โปรแกรมอื่นๆ ก็มี โดยมาตรฐานการเก็บข้อความอันหนึ่งก็คือ gettext

ส่วนข้อมูลที่เป็นพื้นฐานสำหรับแต่ละภาษาแต่ละประเทศ ที่ไม่ขึ้นกับแอป มีคนทำเอาไว้แล้วที่โครงการ Unicode Common Locale Data Repository (CLDR)

เฟรมเวิร์กเกือบทั้งหมดรองรับการดึงข้อมูลจาก CLDR นี้ (และเราไม่ควรคิดใช้อะไรที่ต่างไปจาก CLDR ถ้าไม่ชัวร์จริงๆ ว่าคิดดีแล้ว)

ชื่อเรียก locale มีมาตรฐานกำหนดวิธีเรียกไว้ อยู่ในรูปแบบ:

  • รหัสภาษาตัวพิมพ์เล็ก_รหัสประเทศตัวพิมพ์ใหญ่
  • รหัสภาษาตัวพิมพ์เล็ก-รหัสประเทศตัวพิมพ์ใหญ่

เช่น th_TH คือภาษาไทยที่ใช้ในประเทศไทย, en_GB คือภาษาอังกฤษที่ใช้ในสหราชอาณาจักร, en_MY ภาษาอังกฤษที่ใช้ในมาเลเซีย, my_MM “ภาษาเมียนมาร์” ที่ใช้ในประเทศเมียนมาร์

รหัสภาษาและรหัสประเทศ​ โดยทั่วไปแล้วจะใช้ตามมาตรฐาน ISO ซึ่งจะมีทั้งแบบ 2 ตัวอักษร และแบบ 3 ตัวอักษร — โปรดสังเกตว่า รหัสภาษาและรหัสประเทศอาจจะแตกต่างกัน เช่น ภาษาญี่ปุ่นคือ ja ส่วนประเทศญี่ปุ่นคือ JP, หรือ MY ถ้าเป็นประเทศคือมาเลเซีย แต่ถ้าภาษา my คือ “ภาษาในเมียนมาร์”

บางทีเราจะเห็นชื่อ locale ในรูปแบบ รหัสภาษา_รหัสประเทศ_รหัสประเทศ อันนี้ต้องไปอ่านเอกสารของเฟรมเวิร์กนั้นๆ อีกทีว่าหมายความว่าอะไร เพราะมันไม่ใช่มาตรฐาน

เช่น th_TH_TH ใน Java จะหมายถึง ภาษาไทย, ในประเทศไทย, และใช้เลขไทยด้วย หรือ ja_JP_JP จะหมายถึง ภาษาญี่ปุ่น, ในประเทศญี่ปุ่น, และใช้การนับปีปฎิทินแบบญี่ปุ่น (Imperial calendar)

(ภาษาบางภาษาไม่มีโค้ดแบบ 2 ตัวอักษร แต่มีโค้ดแบบ 3 ตัวอักษร เช่น bur คือภาษาพม่า)

การทำงานของโค้ดที่ถูก internationalized แล้ว

ในการทำงานของโค้ด หลังจากโค้ดทราบภาษา/ประเทศของผู้ใช้ (จากที่ผู้ใช้ตั้งค่าเอง หรือจากการ detect/เดา หรือใช้ค่าจากระบบปฏิบัติการ) ตัวโค้ดก็จะไปดึงข้อมูลที่ตรงกันมาใช้ เพื่อกำหนดการแสดงผลหรือประมวลผล

เช่นถ้าทราบว่าเป็นผู้ใช้ภาษาอังกฤษ (en) ที่อยู่ในประเทศไทย (TH) ก็จะโหลด locale en_TH ขึ้นมาใช้ ซึ่งในการทำงานก็เป็นไปได้ว่า หน้าจอจะแสดงเป็นภาษาอังกฤษ แต่วันหยุดต่างๆ ใช้ตามปฏิทินของไทย

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

โค้ดสามารถโหลดข้อมูล locale ได้จากทั้งฐานข้อมูล ใน string array ใน JSON หรือในแฟ้มต่างหาก อันนี้ก็ต้องไปตัดสินใจกันว่าทำงานแบบไหนสะดวกกว่า

i18n Library / Framework

ไลบรารี/เฟรมเวิร์กสำหรับ JavaScript ที่พบตอนนี้มีดังนี้

มีคนทำตารางเปรียบเทียบไว้ https://github.com/rxaviers/javascript-globalization/blob/master/README.md

สำหรับ PHP มีคนแนะนำวิธีต่างๆ ไว้

https://lingohub.com/blog/2013/06/php-internationalization-i18n-mechanisms-tutorial/ read more

ตัวชี้วัดเป็นคนละอย่างกับสิ่งที่มันวัด

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

อินเทอร์เน็ตสีขาว

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

เอกสาร ม.409 สัมมนาทางมานุษยวิทยา 2/2559

ทำเอกสารประกอบวิชาสัมมนาเทอมนี้ จะอัปโหลดรายการบรรณานุกรมที่ WordPress.com มันไม่ให้ (.rdf .xml .zip .txt ไม่ได้สักกะอัน) เลยต้องมาฝากไว้ในบล็อกตัวเอง

TU AN409 2/2559 Bibliography

แบ่คแบ่คสไตล์ #style #guide

เวลาต้องทำกำหนดการสัมมนา ผมมีนิสัยเหล่านี้

  • เอาเรื่องสำคัญอย่าง วัน เวลา สถานที่จัดงาน หมดเขตลงทะเบียนวันไหน ไว้ต้นๆ — พวกผู้จัดร่วมจัด ไว้ท้ายๆ
  • ถ้าหาลิงก์แผนที่ได้ อย่างน้อยก็ Google Maps จะพยายามใส่ไว้ที่ท้ายที่อยู่งาน
  • ใช้การเขียนเวลาแบบ 24 ชั่วโมง (ไม่ใช้ am/pm) และใช้ : คั่น ชั่วโมง:นาที (ไม่ใช้ .)
  • พักช่วง พยายามหาคำอื่นที่ไม่ระบุคำว่า coffee — เพราะผมไม่กินกาแฟ
  • ไม่ใส่ยศ ตำแหน่ง ฯลฯ ใดๆ หน้าชื่อ เพราะรู้สึกว่ารุงรัง และบางทีถ้าใส่ผิดมีเคืองกันอีก (เช่นเป็นรศ.แล้ว ยังใส่ผศ.)
  • แน่นอนว่า ตัวสะกดชื่อ เป็นเรื่องสำคัญ ต้องค้นเน็ตเพื่อเอาให้แน่นอนอีกครั้ง
  • ถ้าคนเหล่านั้นมีบัญชีทวิตเตอร์ จะใส่ไว้ข้างชื่อ
  • ที่ชื่อสถาบัน องค์กรสังกัด ฯลฯ จะพยายามทำลิงก์
  • ฟอร์แมตเบอร์โทรศัพท์ ชอบใช้ 0-123-456-789 (มือถือ) และ 0-1234-5678 (บ้าน) ถ้าเป็นงานที่ต้องติดต่อกับต่างชาติด้วย ก็ใส่รหัสประเทศข้างหน้า +66-
  • ที่หัวเรื่องบล็อก ต้นทวีต/โพสต์เฟซ จะใส่ “[วันที่]” ไว้ด้วย เช่น “[15 ก.พ.] สัมมนา….”
  • ถ้าออกเป็นเมล (หรือ plain text อื่นๆ) ลิงก์ต่างๆ ที่ใช้ จะพยายามให้ไม่ยาวเกินไป ใช้ลิงก์แบบย่อถ้าจำเป็น — ดู อย่าเยอะ: อ้างอิง URL แบบให้มนุษย์พออ่านออก
  • ถ้ามี #hashtag ของงาน ก็จะใส่ไว้ด้วย ทั้งในกำหนดการ และในทวีต
  • read more