26 May 2020

bact

“เสื้อแดง” ในฐานะ “รุ่นทางการเมือง”

ความคิดต่อจากบทความชิ้นนี้ ความทรงจำของ ‘ปืนลั่นแสกหน้า’ : ว่าด้วยคนกรุงเทพฯ เสื้อแดง และปี 2553

“เสื้อแดง” ตอนนี้อาจไม่ใช่ “ขบวนการทางการเมือง” (political movement) แล้ว มันไม่มีขบวนอะไรที่เรามองเห็นชัดในตอนนี้ แต่มันยังเป็น “ชนชั้นทางการเมือง” (political class – โดยเฉพาะเมื่อถูกคนอื่นมองมา ในเซนส์ “อี๋ ไอ้พวกเสื้อแดง”) หรือ “กลุ่มความสำนึกรู้ทางการเมือง” (political consciousness) แบบนึงอยู่ ในลักษณะที่คนยังระบุได้อยู่ว่า “ฉันเป็นคนเสื้อแดง”

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

“คนเสื้อแดง” จึงมีลักษณะเป็น “รุ่นทางการเมือง” (political generation?) ด้วย ในลักษณะเดียวกับ “คนเดือนตุลา(16+19)” “คนรุ่นพฤษภา(35)” เพียงแต่ความขัดแย้งยาวนาน รวมถึงการชุมนุมและการล้อมปราบต่างๆ ประกอบกับการที่การเมืองระดับรากหญ้ามันลงหลักแพร่หลาย มันเลยทำให้คนร่วมรุ่นนี้ มีจำนวนมากกว่ามาก

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

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

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

โดย bact ณ 26 May 2020 12:04 +0700

20 May 2020

bact

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

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

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

เวลาที่สะดวกสำหรับการเรียนที่ขึ้นกับทรัพยากรของผู้เรียน

“เวลาที่สะดวก” ในแง่การเรียนออนไลน์นี้ จำเป็นต้องคำนึงถึงปัจจัยดังต่อไปนี้เป็นอย่างน้อย

1) การเข้าถึงอุปกรณ์ที่เหมาะสม (โทรศัพท์หรือคอมพิวเตอร์ที่มีความสามารถเพียงพอจะเปิดสื่อการสอนได้อย่างครบถ้วน)

2) ความเร็วและความเสถียรของอินเทอร์เน็ตที่เหมาะสม

3) พื้นที่ที่เหมาะสม เช่น ที่นั่ง ความสงบ (อาจเป็นในที่พักอาศัยหรือที่อื่น เช่น บ้านญาติ ร้านเน็ต)

“เวลาที่สะดวก” คือช่วงเวลาที่ผู้เรียนสามารถจัดหา (1), (2), และ (3) ได้พร้อมกัน

กรณีบ้านเดียวกันมีอุปกรณ์ตาม (1) เพียงเครื่องเดียว แต่มีสมาชิกในบ้านหลายคนที่ต้องทำงานหรือเรียน การเรียนแบบสด (real time) จะสร้างปัญหาการแย่งกันใช้ทรัพยากรที่มีจำกัด

กรณีมีอุปกรณ์ตาม (1) เพียงพอกับสมาชิกที่ต้องใช้ทุคนในเวลาเดียวกัน แต่บ้านมีพื้นที่เล็ก การต้องเปิดสื่อการสอนพร้อมกันในพื้นที่จำกัดตาม อาจทำให้เกิดการรบกวนสมาธิกันและกันระหว่างสมาชิกในบ้าน กล่าวคือปัจจัยที่ (3) ไม่เกิด หรือการแบ่งความเร็วอินเทอร์เน็ตกันเนื่องจากใช้งานพร้อมกัน ก็ทำให้ปัจจัยที่ (2) ด้อยลงไป

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

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

หากมีการบันทึกการสอนเอาไว้ด้วย ก็จะทำให้ผู้เรียนและสมาชิกคนอื่นๆ ในบ้าน สามารถจัดการทรัพยากรตาม (1), (2), และ (3) ได้ดีขึ้น มีการแบ่งใช้ทรัพยากรกันระหว่างสมาชิกในครอบครัวได้เหมาะสมขึ้นหรือเพิ่มทางเลือกให้สามารถหยิบยืมหรือใช้ทรัพยากรจากภายนอกครอบครัวเป็นการชั่วคราวได้สะดวกขึ้น

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

ทั้งนี้ “เวลาที่สะดวก” ที่ผู้เรียนสามารถจัดหา (1), (2), และ (3) มาได้พร้อมกันนี้ ไม่จำเป็นจะต้องเป็นเวลาที่ต่อเนื่องกัน เช่น สำหรับคาบเรียน 2 ชั่วโมง ในสัปดาห์หนึ่ง ผู้เรียนรายหนึ่งอาจมีเวลาที่สะดวกตอน 11:30-12:30 หนึ่งชั่วโมงในวันจันทร์ และ 20:00-21:00 อีกหนึ่งชั่วโมงในวันอังคาร และเวลานี้อาจเปลี่ยนไปในอีกสัปดาห์

การบันทึกกับพื้นที่ปลอดภัยในการเรียนการสอน

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

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

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

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

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

การเผยแพร่สื่อบันทึกการเรียนการสอนสู่สาธารณะ

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

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

การคำนึงถึงสมาธิในพื้นที่ทางกายภาพที่ไม่ใช่ห้องเรียนโดยเฉพาะ

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

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

ฝากทางสถานศึกษาต่างๆ พิจารณาสำหรับภาคการศึกษานี้หรือที่จะถึงนี้ครับ

โดย bact ณ 20 May 2020 10:43 +0700

16 May 2020

bact

ว่าด้วยการเยียวยา – กรณี #TCAS วารสาร และอื่นๆ ในยุค #COVID19 นี้

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

เช่น จะเลื่อนการบังคับใช้พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคลเพื่อช่วยหน่วยงานที่ยังเตรียมตัวไม่พร้อม ก็ต้องพิจารณาด้วย ว่าหน่วยงานที่พร้อมแล้วและได้ดำเนินแผนงานต่างๆ ในอนาคตตามความเข้าใจว่าจะกฎหมายฉบับดังกล่าวบังคับใช้ในวันที่กำหนด จะได้รับผลกระทบอะไรหรือไม่ หากกฎหมายถูกเลื่อนออกไป (เช่นได้ทำสัญญาหรือทำแผนธุรกิจใดๆ ไว้ ต้องปรับแก้แผน หรือการไม่มีกฎหมายคุ้มครองข้อมูลกลางนี้ จะทำให้ต้นทุนในการแลกเปลี่ยนข้อมูลกับต่างประเทศของเขาเพิ่มขึ้น เนื่องจากต้องไปทำสัญญาลักษณะทวิภาคีต่างหาก ในระยะ 1 ปีตามที่จะเลื่อน จากเดิมที่เขาเคยคิดว่าไม่ต้องทำ หากกฎหมายบังคับใช้ตามกำหนด) – ไม่เช่นนั้นก็จะกลายเป็นว่าเราลงโทษคนที่แข็งขันเตรียมความพร้อมเพื่อทำตามกฎหมาย

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

ดูรายละเอียดลำดับเวลาของเรื่องนี้ที่ https://www.bbc.com/thai/thailand-52688183

1. จริงๆ แนวทางของผู้บริหารมหาวิทยาลัย (ชาลี เจริญลาภนพรัตน์ รองอธิการบดีฝ่ายวิชาการ) นั้นช่วยเยียวยานักศึกษากลุ่มนี้ได้ แต่ถ้าไม่มีมาตรการเพิ่มเติมก็จะเป็นแนวทางที่สร้างผลกระทบกับนักศึกษากลุ่มอื่นไปด้วย

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

3. พวกเขาอาจจะคะแนนไม่เข้าเกณฑ์คณะวารสาร มธ. แต่อาจเข้าเกณฑ์คณะอื่น เขาไม่ควรเสียสิทธิ์ตรงนั้น ต้องมีใครสักคนในระบบการรับเข้านี้ที่จะรับผิดชอบหาทางเยียวยา

4. แต่การที่มหาวิทยาลัยจะ “บังคับ” ให้คณะวารสารต้องรับนักศึกษาเข้า ในจำนวนที่เกินความสามารถที่คณะจะจัดการเรียนการสอนได้อย่างมีคุณภาพ ก็เป็นเรื่องสำคัญ คณะวารสารไม่ควรต้องแบกรับ และนักศึกษาทุกคนไม่ควรจะต้องเจอ

5. ประเด็นที่อาจมองว่า “ไม่เป็นธรรม” กับนักศึกษาที่คะแนนถึงเกณฑ์ หากรับนักศึกษาที่คะแนนไม่ถึงเกณฑ์เข้าศึกษา นั้นไม่ควรเป็นประเด็น เพราะสุดท้ายการได้เข้าศึกษาหรือไม่ในแต่ละปีก็อยู่ที่จำนวนรับด้วย ถ้าจำนวนรับมากก็เป็นไปได้ที่คะแนนต่ำสุดที่จะเข้าเกณฑ์จะต่ำลง — และในแง่หนึ่ง การเปิดรับนักศึกษาให้มากขึ้น ก็เป็นการขยายโอกาสทางการศึกษาด้วย (ดูข้อ 6 ประกอบ)

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

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

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

9. มาตรการในการเยียวยาอีกประการก็คือ หากมีการรับเข้าเป็นนักศึกษาของมหาวิทยาลัยแล้ว มหาวิทยาลัยและคณะ จะต้องไม่แบ่งแยกนักศึกษาออกเป็นกลุ่ม “รับเข้าตามปกติ” และ “รับเข้าเป็นการเยียวยา” เพื่อให้ตลอดการศึกษาจนจบการศึกษาของนักศึกษาทุกคน ไม่อยู่ในภาวะเสี่ยงต่อการถูกเลือกปฏิบัติเชิงลบ

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

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

(โพสต์ครั้งแรกในเฟซบุ๊กและทวิตเตอร์)

โดย bact ณ 16 May 2020 15:23 +0700

14 May 2020

bact

Override / Overrule ปัญหาการเลื่อนบังคับใช้บางหมวดของกฎหมายลำดับสูงกว่าด้วยกฎหมายลำดับต่ำกว่า

กรณีของการพยายามจะเลื่อนบังคับใช้บางหมวดของพ.ร.บ.คุ้มครองข้อมูลส่วนบุคคล ด้วยการออกพ.ร.ฎ.มางดเว้นนี่ก็น่าสนใจ

คือคิดแบบภาวะปกติเลยนะ ไม่ต้องมีภาวะพิเศษหรือรัฐประหาร ตัวพระราชบัญญัตินั้นจะประกาศเป็นกฎหมายใช้บังคับได้ ต้องอาศัยรัฐสภาเห็นชอบ ส่วนพระราชกฤษฎีกา รัฐมนตรีที่มีอำนาจตามกฎหมายนั้นๆ จะเสนอคณะรัฐมนตรีเพื่อพิจารณาได้เลย ตามที่กฎหมายดังกล่าวได้ให้อำนาจนิติบัญญัติบางส่วนเอาไว้กับฝ่ายบริหาร

ทีนี้ มันมีสิ่งน่าสนใจ 2 อย่าง ที่กรณีการพยายามเลื่อนการบังคับใช้ พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคลด้วยพ.ร.ฎ. ซึ่งตามลำดับศักดิ์ของกฎหมายไทยนั้น ตัวพ.ร.ฎ.อยู่ต่ำกว่าพ.ร.บ.

1) การที่เกิดภาวะแบบนี้ได้ เพราะกฎหมายในมาตราที่ให้อำนาจกับรัฐมนตรีในการออกพ.ร.ฎ.นั้น มีผลใช้บังคับแล้ว รัฐมนตรีจึงจะนำอำนาจดังกล่าวมางดเว้นการบังคับใช้กฎหมายหมวดที่ยังไม่ถูกบังคับใช้ (จากเดิมที่เราคิดว่า กฎหมายต้องถูกใช้ก่อน แล้วการงดเว้นค่อยตามมา) การที่กฎหมายฉบับนี้ หรือฉบับใดๆ ก็ตามมีการกำหนดการเริ่มใช้บังคับเป็นหลายขยัก ทำให้เกิดสถานการณ์แบบนี้ได้ ใช่หรือไม่? (ถ้ากฎหมายทั้งฉบับยังไม่ถูกใช้บังคับเลย โดยเฉพาะมาตราที่ให้อำนาจกับรัฐมนตรีในการออกพระราชกฤษฎีกา สถานการณ์แบบนี้จะไม่เกิด หรือไปเกิดด้วยช่องทางอื่น?)

2) ในแง่ศักดิ์และลำดับอำนาจของกฎหมาย สิ่งที่เกิดขึ้นคือ สาระสำคัญของกฎหมายฉบับหนึ่ง (กรณีนี้คือส่วนที่ว่าด้วยการคุ้มครองสิทธิของประชาชน) ที่รัฐสภาพิจารณาประกาศเป็นกฎหมายระดับพระราชบัญญัติแล้ว สามารถถูกรัฐมนตรีโดยความเห็นชอบของคณะรัฐมนตรีออกกฎหมายระดับพระราชกฤษฎีกา ซึ่งมีลำดับต่ำกว่า มาเลื่อนการบังคับใช้ได้ และถ้ายอมให้มีการเขียนกฎหมายลักษณะนี้ โดนไม่มีการท้าทายทางรัฐธรรมนูญ ก็เป็นไปได้ในทางทฤษฎีว่า การเลื่อนหรือการงดเว้นนี้จะสามารถถูกต่ออายุออกไปได้เรื่อยๆ เท่ากับในทางปฏิบัติ จะมีสภาพเหมือนไม่เคยมีการตราพระราชบัญญัติในส่วนสาระสำคัญขึ้นมาเลย

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

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

โดย bact ณ 14 May 2020 21:35 +0700

21 April 2020

bact

แถลงการณ์ว่าด้วยการสืบย้อนผู้ใกล้ชิด (contact tracing) 19 เม.ย. 2563

19 เม.ย. 2563 นักวิทยาศาสตร์และนักวิจัยมากกว่า 300 คนจากทั่วโลก ลงชื่อในแถลงการณ์ร่วม “Joint Statement on Contact Tracing” ว่าด้วยการสืบย้อนกลับว่าบุคคลเคยสัมผัสใกล้ชิดผู้มีเชื้อหรือไม่ เพื่อประโยชน์ในการควบคุมโรคจากไวรัสโคโรนาสายพันธุ์ใหม่ โควิด-19

ใครสนใจก็กดอ่านและร่วมลงชื่อได้ที่ Joint Statement on Contact Tracing: Date 19th April 2020

ประเด็นสำคัญเรื่องหนึ่งในแถลงการณ์ก็คือ เรื่อง “social graph” หรือผังความสัมพันธ์ระหว่างบุคคลในสังคม ซึ่งสามารถสร้างขึ้นจากการประกอบเชื่อมโยงชิ้นส่วนข้อมูลเล็กๆ เข้าด้วยกัน

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

“We urge all countries to rely only on systems that are subject to public scrutiny and that are privacy preserving by design (instead of there being an expectation that they will be managed by a trustworthy party), as a means to ensure that the citizen’s data protection rights are upheld.”

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

สหภาพยุโรปก็มีแนวทางเรื่องนี้ออกมาเช่นกัน โดยออกเป็น Commission Recommendation (EU) 2020/518 ลงวันที่ 8 เมษายน 2563 และในรายละเอียดจะมีเอกสารที่เรียกว่า “toolbox” ตามมาอีกเรื่อยๆ

ตอนนี้ชิ้นแรกที่ออกมาคือ Mobile applications to support contact tracing in the EU’s fight against COVID-19 – Common EU Toolbox for Member States

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

The toolbox sets out the essential requirements for these apps:

โดย bact ณ 21 April 2020 22:53 +0700

18 April 2020

bact

การร่วมสร้างอัตลักษณ์ “คนดี” โดยมวลมหาประชาชน: กรณีศึกษาสื่อส่วนบุคคล

โดย อาจินต์ ทองอยู่คง และ อาทิตย์ สุริยะวงศ์กุล ธันวาคม 2560

งานวิจัยนี้ใช้แนวคิดเรื่อง “มีม” (meme) ศึกษาการมีส่วนร่วมในขบวนการทางการเมืองในประเทศไทยช่วงปี 2556-2557 ผ่านการผลิตมีมของผู้สนับสนุนขบวนการ โดยใช้นิยามของมีมว่า “หน่วยของการส่งผ่านวัฒนธรรม”

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

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

ดาวน์โหลดเอกสารนำเสนอและรายงานฉบับสมบูรณ์ได้ที่ท้ายโพสต์นี้ – มีลิงก์วิดีโอนำเสนอที่ด้านท้ายด้วย

When a meme catches on, it may crystallize whole school of thoughts.

โจทย์วิจัยและวิธีการศึกษา

โจทย์วิจัย

มวลชนร่วมผลิตอะไร – อย่างไร? สร้างอัตลักษณ์แบบไหน?

วิธีการศึกษา
เราจะดู การร่วมผลิต ผ่านอะไรได้บ้าง? โครงการวิจัยนี้เลือกดู

โดยมองว่าสื่อส่วนบุคคลทั้ง 3 สิ่งนี้คือ “ภาชนะ”

โจทย์วิจัย: มวลชนร่วมผลิตอะไร - อย่างไร? สร้างอัตลักษณ์แบบไหน? (ภาพสินค้ารักชาติจากการชุมนุม กปปส.)

ทุนกับการผลิตสื่อ

เราพบว่า “ทุน” ในลักษณะต่างๆ ที่ผู้สนับสนุนมี ทั้งทุนทางเศรษฐกิจ ทุนทางสังคม และทุนทางวัฒนธรรม ทำให้สามารถผลิตสื่อส่วนบุคคลที่มีพลังทั้งทางรูปแบบ เนื้อหา และปฏิบัติการได้

แผนผังแสดงพื้นที่แลกเปลี่ยน รูปแบบของสื่อ (ที่อยู่ของมีม) และเทคโนโลยีการผลิต

การผลิตสื่อส่วนบุคคลที่เป็นภาชนะส่งต่อความคิดและร่วมสร้างอัตลักษณ์ของขบวนการนี้ ใช้ “ทุน” (ในลักษณะที่ Pierre Bourdieu จำแนกไว้ใน “The Forms of Capital” [1986]) เป็นปัจจัยในการผลิตและการเข้าถึง “ตลาด”

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

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

งานศึกษาแยก: กรณีมีมอื่นๆ ในช่วงเวลาใกล้เคียงกัน

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

The Art of Speaking on the Line

การนำเสนอจบโครงการ

การนำเสนอในสัมมนาสรุปโครงการวิจัย เมื่อวันศุกร์ที่ 15 ธันวาคม 2560เวลา 9.00 – 17.00 น. ณ ห้องประชุมบุญชู โรจนเสถียรอาคารอเนกประสงค์ 1 มหาวิทยาลัยธรรมศาสตร์ ท่าพระจันทร์ (ดูกำหนดการ)

การนำเสนอของ อาจินต์ และ อาทิตย์ จะอยู่ในคลิปที่ 3 ของ playlist ตั้งแต่ประมาณนาทีที่ 26:40 เป็นต้นไป หลังการนำเสนอของ ประจักษ์ ก้องกีรติ (ประเด็นว่า ศีลธรรม กับ ความรุนแรง ไปด้วยกันได้อย่างไรในขบวนการ)

ดาวน์โหลด

โครงการวิจัยนี้เป็นส่วนหนึ่งของชุดโครงการ การเมืองของคนดี: ความคิด ปฏิบัติการ และอัตลักษณ์ทางการเมืองของผู้สนับสนุน “ขบวนการเปลี่ยนแปลงประเทศไทย” (“Good Man’s Politics”: Political Thoughts, Practices and Identities of the “Change Thailand Movement” Supporters) สนับสนุนโดย สำนักงานกองทุนสนับสนุนการวิจัย (สกว.) — ดูการสังเคราะห์จากงานของทั้งชุดโครงการวิจัยได้ใน อภิชาตและอนุสรณ์ 2560

ขอบคุณรายการ คนสวยเรียนสูงออนแอร์ EP. 5 ตอน hashtag the movement: ปั่นยังไงให้จีนสะดุ้ง (19 เม.ย. 2563) ที่ทำให้สลัดความขี้เกียจ รวบรวมลิงก์ต่างๆ มาโพสต์เสียที

“สุดงดงาม!!! นศ.ม.ศรีปทุม จัดทำภาพชุดพี่ตูน ใส่กรอบอย่างดี ติดชื่อผู้บริจาค นำรายได้สมทบ“ก้าวคนละก้าว”..โซเชียลแห่แชร์สนั่นหวั่นไหว!!!” — ทีนิวส์ 7 ธ.ค. 2560

โดย bact ณ 18 April 2020 21:39 +0700

12 April 2020

Kitt

คำนวณวันสงกรานต์ปี 2563

สงกรานต์ปี 2563 เป็นปี จ.ศ. (2563 – 1181) = 1382 วันเถลิงศก ตรงกับ (1382 * 0.25875) + floor(1382 / 100 + 0.38) – floor(1382/ 4 + 0.5) – floor(1382 / 400 + 0.595) – 5.53375 = 357.5925 + 14 – 346 – 4 – 5.53375 = 16.05875 = วันที่ 16 เมษายน 2563 เวลา 01:24:36 วันสงกรานต์ ตรงกับ 16.05875 … Continue reading คำนวณวันสงกรานต์ปี 2563

โดย kitty ณ 12 April 2020 10:24 +0700

9 April 2020

bact

การสืบย้อนคนที่เคยใกล้กัน ที่ยังรักษาความเป็นส่วนตัว ในบริบท #COVID19

เขียนไว้ในเฟซบุ๊กและทวิตเตอร์ ชวนคุยเรื่องแอปติดตามผู้เคยอยู่ใกล้ผู้เป็นโรคที่อาจติดต่อได้ (contact tracing) กับความอธิบายได้ทางนโยบาย การเลือกปฏิบัติ และผลกระทบที่อาจอยู่กับเราไปนานกว่าอายุของวิกฤต?

TraceTogether ของสิงคโปร์

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

ทาง GovTech หน่วยงานด้านเทคโนโลยีรัฐบาลของสิงคโปร์ เล่าเรื่องของ OpenTrace ไว้ที่ 6 things about OpenTrace

ไอเดียรวมๆ คือใช้บลูทูธเพื่อเก็บข้อมูลว่า เราเคยไปอยู่ใกล้ใครบ้าง (มือถือของเราเคยไปอยู่ใกล้ใครมือถือเครื่องไหนบ้าง) คือมองว่าต้องการติดตามการติดต่อที่อาจเกิดขึ้นได้ระหว่างคนสู่คนโดยตรง ดังนั้นสิ่งที่สนใจ คือการอยู่ใกล้ชิดของคน ไม่สนใจว่าคนนั้นจะไปอยู่ที่ไหน — คือเก็บเฉพาะ who ไม่เก็บ where

เท่าที่ดูในข่าว Channel News Asia เป็นการเปิดให้ใช้ตามความสมัครใจ ไม่บังคับ แต่ก็เชิญชวน

ThaiAlert (รอประกาศชื่อจริง)

ส่วนนี่เป็นแอปโดยกลุ่ม Code for Public ใน GitHub ใช้ชื่อว่า “contact-tracer”

ไอเดียคล้ายกันในส่วนการใช้บลูทูธ แต่เพิ่มเติมการเก็บตำแหน่งที่ตั้งจาก GPS มาด้วย — ก็คือเก็บทั้ง who และ where

NuuNeoi อธิบายแนวคิดไว้ในบล็อกของเขา (ภาษาไทย – เป็นคนไทย)

คุณลิ่วไปทักเรื่องการเปิดเผย user id ระหว่าง broadcast ใครสนใจตามต่อได้ในเฟซบุ๊กของ NuuNeoi

เข้าใจว่าวันศุกร์ที่ 10 เมษายนนี้ จะมีการประกาศใช้แอปจากกลุ่ม Code for Public นี้ในประเทศไทย (มี DEPA และ DGA ของกระทรวงดิจิทัลเพื่อเศรษฐกิจและสังคม ร่วมสนับสนุน)

ระบบอื่นๆ

ตอนนี้ก็มีระบบอื่นที่เสนอกันมาเยอะ เช่น

ระบบเหล่านี้อาจมีแนวคิดในการออกแบบต่างกัน บางระบบรวมศูนย์ (centralized) บางระบบกระจาย (decentralized) บางอันเก็บแค่ ใคร (who) บางอันเก็บ ที่ไหน (where) ด้วย แต่รวมๆ ก็พยายามบันทึกข้อมูลให้น้อยที่สุดเท่าที่จะใช้ติดตามผู้ที่เคยอยู่ใกล้ผู้ติดเชื้อได้ ตามที่ผู้ออกแบบเห็นว่าเหมาะสมกับบริบทของพื้นที่ที่จะเข้าไปดูแล

สิ่งที่น่าห่วงกว่าเรื่องเทคนิค — การเลือกปฏิบัติ?

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

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

ตัวอย่าง:

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

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

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

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

(อันนี้ยังไม่นับเรื่องความเป็นเจ้าของสมาร์ตโฟน การเข้าถึงโครงข่าย ฯลฯ)

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

หน้าที่ในการอธิบายของผู้ใช้อำนาจ

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

อย่างของ BlueTrace มีอธิบายข้อพิจารณาทางนโยบายของรัฐบาล ซึ่งเป็นที่มาของการออกแบบตัวโปรโตคอลทางเทคนิคที่นี่ https://bluetrace.io/policy/

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

ผลกระทบที่จะอยู่กับเราเกินอายุของวิกฤต

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

Paul-Olivier Dehaye, director of PersonalData.IO, speaks to Open Rights Group about the use of contact tracing surveillance in the global response to Covid-19.

โดย bact ณ 9 April 2020 23:10 +0700

Complain-driven development

Adapting and Adjusting Change Management in an Agile Project

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

อันไหนเป็นบั๊กแต่แก้ไม่ทัน ไม่อยากแก้ตอนนี้ หรือยังคิดไม่ออก ตอบกลับใน issue tracker เลย ว่า “Works for Me” หรือไม่ก็ให้ AE หรือ PR ช่วยคุยหน่อย บอกว่าจริงๆ มันเป็นฟีเจอร์ lol

โดย bact ณ 9 April 2020 20:48 +0700

7 March 2020

Kitt

Stitches removed + lab result

Well, two weeks after the operation, I got stitches removed. The excision wound is somewhere between 4-5 cm long, it’s pretty intact. Still need to put a gauze pad for 4-5 more days though. So, what is it exactly ? Based on diagnostic surgical pathology, it’s an irritated seborrheic keratosis. Safe ? Yes.

โดย kitty ณ 7 March 2020 06:20 +0700

5-min ETH Smart Contract

5-minute smart contract on ETH-compat blockchain network ? .. Yes, it is very possible .. if you already have some knowledge about it.

โดย kitty ณ 7 March 2020 06:17 +0700

16 February 2020

Kitt

Kobe B. Bryant

Kobe กับ Shaq: สองคนนี้เกลียดกัน Kobe เป็นเด็กหัวรั้น ซ้อมหนัก มั่นใจสูงมากว่าลูกบาสในมือเขามีโอกาสมากกว่าในมือคนอื่นในทีมเลยไม่ค่อยจ่ายบอล ในขณะที่ Shaq เข้ามายืนหนึ่งในทีม เฮฮา ปาร์ตี้หนัก ปล่อยเนื้อปล่อยตัว Kobe บ่นเรื่องนี้บ่อย ส่วน Shaq ไม่พอใจความรั้น แต่เขารู้ว่า Kobe จะเป็นคนที่ยิ่งใหญ่แน่ ๆ ช่วงแรกที่สองคนนี้มาอยู่ Lakers มีเกมที่ Kobe ลงสนามแล้วยิง air ball เยอะมากจนโดนโห่ Shaq เป็นคนแรกที่วิ่งไปกอดคอ Kobe แล้วบอกว่า “มึงไม่ต้องไปสนใจว่าใครจะเยาะเย้ย วันหนึ่งเวลาบอลอยู่ในมือมึง คนพวกนี้จะกลัวมึง” จุดเปลี่ยนเกิดในวันที่สองคนทะเลาะกันระหว่างซ้อม เวลานั้น Kobe กับ Shaq ร่วมทีม Lakers มาได้ 2-3 ปีแล้ว แต่ยังไปไม่ถึงแชมป์ NBA สักครั้ง สองคนซ้อมคนละทีม Shaq talk trash … Continue reading Kobe B. Bryant

โดย kitty ณ 16 February 2020 10:16 +0700

13 February 2020

Kitt

Got an operation

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

โดย kitty ณ 13 February 2020 02:23 +0700

7 January 2020

Thep

Fine-tuning Quadratic Splines in Fontforge

นับจากที่ได้เพิ่ม layer ผสมใน Fonts-TLWG เพื่อแก้ปัญหาเรื่อง build reproducibility ในรุ่น 0.7.0 ก็ได้เปิดช่องทางสำหรับการ fine-tune quadratric spline ของฟอนต์ TrueType เพียงแต่ผมยังไม่ได้ทำกับ Fonts-TLWG ในทันที เพราะได้กลับไปทำ layer ผสมกับ Fonts-Arundina เสียก่อน และได้ถือโอกาสทดลอง fine-tune quadratic spline ต่อด้วย

หลังจากที่เพิ่ม layer ผสมกับทุกฟอนต์ในชุด Arundina แล้ว ก็ได้ทดลอง fine-tune quadratic spline ต่อ ซึ่งก็ทำเสร็จแค่ Arundina Sans เท่านั้น พอมาทำ Arundina Sans Mono ต่อ ปรากฏว่าเกิดเหตุ Fontforge ตายกลางคันขณะ save ทำให้ข้อมูลที่แก้ไขมาได้ครึ่งทางแล้วสูญหายทั้งหมด แม้แต่กระบวนการ recovery ของ Fontforge เองก็กู้ข้อมูลขึ้นมาไม่ได้! ถ้าจะเริ่มใหม่ก็ต้อง check out ฉบับที่ยังไม่ปรับเส้นจาก git ออกมาทำใหม่นั่นแหละ

เป็นอุทาหรณ์ว่าควร commit git ให้บ่อยกว่านี้ ถึงยังไม่เสร็จก็ควร commit ไว้ก่อน แล้วค่อยใช้ option --amend ในครั้งต่อ ๆ ไปก็ยังได้!

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

ปรับ Quadratic และ Cubic Spline ไปด้วยกัน

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

การปรับทั้งสอง layer ควบคู่กันยังมีข้อดีอีกอย่าง คือเราสามารถลดปริมาณงานในอนาคตหากมีการ copy ข้ามจาก cubic layer มายัง quadratic layer อีกด้วย เพราะจะได้จำนวนจุด quadratic ที่เหมาะสมทันที ไม่ต้องมานั่งปรับใหม่ รวมถึงกรณีที่ต้องการ generate ฟอนต์ TrueType ด้วยการแปลงจาก cubic layer กลางอากาศ (อย่างที่เราเคยทำในสมัยก่อน)

หรือแม้กระทั่งสำหรับการ generate ฟอนต์ PostScript หรือฟอนต์ OpenType ที่ใช้ cubic spline เอง ก็จะได้โค้งที่ได้สมมาตรสวยงาม และยังอาจช่วยให้ rasterize ได้เร็วขึ้นสำหรับบาง engine ได้อีกด้วย (เช่น สำหรับ rasterizer ที่ render Bézier curve ด้วยการแบ่งครึ่ง curve แบบ recursive บนพื้นฐานของ De Casteljau’s algorithm)

ส่วนวิธีการปรับนั้นจะกล่าวถึงต่อไปเป็นลำดับ

Quadratic Spline ใน Fontforge

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

จุด interpolated ในที่นี้ขอเรียกว่า จุดกะ ในโค้ง quadratic เป็นจุดต่อโค้ง (curve point) ที่อยู่กึ่งกลางระหว่างจุดควบคุมสองจุด และในทางกลับกัน จุดต่อโค้งที่มีแขนสองข้างยาวเท่ากันก็จะถือเป็นจุดชนิด interpolated โดยอัตโนมัติใน Fontforge เช่นกัน (ยกเว้นจุดที่ผู้ใช้กำหนดให้ห้าม interpolate)

Quadratic interpolated point

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

Editing with quadratic interpolated point

การประมาณ Cubic Curve ด้วย Quadratic Curve

ดังที่ได้กล่าวไว้ใน blog เดิม ว่าการแปลง quadratic curve เป็น cubic จะเป็นการแปลงแบบแม่นตรง แต่ในทางกลับกัน คือจาก cubic curve เป็น quadratic จะเป็นการประมาณเท่านั้น เนื่องจาก quadratic curve มีความเป็นอิสระ (degree of freedom) น้อยกว่า ดังนั้น เมื่อคุณคัดลอก spline จาก cubic layer มา quadratic layer จึงมีการประมาณค่าเกิดขึ้น

มีอัลกอริทึมจำนวนหนึ่งสำหรับประมาณ cubic curve ด้วย quadratic เช่น แบ่ง curve เป็นส่วนย่อย ๆ ที่เมื่อตัดสัมประสิทธิ์ดีกรีสามออกแล้วได้ quadratic curve ที่ใกล้เคียงพอ (มี paper ที่คล้ายกัน), แบ่งครึ่ง curve ที่ t=0.5 แล้ว solve หาจุดควบคุม quadratic curve ที่ใกล้เคียงของทั้งสองส่วน ฯลฯ

สำหรับ Fontforge แล้ว ใช้การประมาณด้วยจุดกะ โดยอยู่บนพื้นฐานของทฤษฎีซึ่งพบจากการทดลองแต่ยังไม่มีข้อพิสูจน์ทางคณิตศาสตร์ว่า ถ้าแบ่ง cubic curve เป็นช่วง ๆ ด้วย parameter ที่ห่างเท่า ๆ กันแล้ว ปรากฏว่าจุดแบ่งเหล่านั้นจะอยู่กึ่งกลางระหว่างจุดควบคุมข้างเคียงพอดี ซึ่งหมายความว่าสามารถแทนจุดแบ่งทุกจุดด้วยจุดกะได้ ด้วยทฤษฎีนี้ Fontforge จึงประมาณ cubic spline ด้วย quadratic spline ที่เติมจุดกะตามแนวเส้นโค้งเสมอ

Cubic spline approximation with quadratic spline

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

การลดจำนวนจุดกะใน Quadratic Curve

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

จากภาพในตัวอย่างข้างต้น มีการเติมจุดกะระหว่างกลาง 4 จุดใน quadratic curve แต่เราสามารถลดจำนวนจุดกะนี้ลงได้ ไม่ว่าจะเพื่อความเรียบง่าย เพื่อลดขนาดข้อมูล (ซึ่งสำคัญสำหรับ web font) หรือเพื่อประสิทธิภาพในการ hint และการ rasterize ก็ตาม โดยแนวทางการลดจุดกะที่เป็นไปได้คือ:

  1. ตัดจุดกะด้วยมือ โดยเลือกจุดกะที่ต้องการตัดแล้วสั่ง Merge (Ctrl-M)
  2. ปรับ cubic curve ต้นทางด้วยมือให้สามารถประมาณได้ด้วยจำนวนจุดที่น้อยลง

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

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

แล้ว cubic curve แบบไหนที่จะใช้จำนวนจุดกะน้อยลง?

ก่อนอื่น คนที่เคย edit cubic curve จะรู้ว่าเราสามารถปรับแขนทั้งสองของโค้งได้โดยยังได้โค้งที่ใกล้เคียงกับโค้งเดิม ด้วยการเพิ่มความยาวของแขนข้างหนึ่ง และลดความยาวของแขนอีกข้างหนึ่ง

Cubic curve adjustment

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

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

Quadratic curve of the adjusted cubic curve

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

จาก blog เดิม ผมได้กล่าวไว้ว่า quadratic curve ที่มีจุดควบคุม P0, P1 และ P2 สามารถแทนได้ด้วย cubic curve ที่สมมูลกันโดยมีจุดควบคุม P0, (P0/3 + 2P1/3), (2P1/3 + P2/3), และ P2

Equivalent cubic curve of a quadratic curve

เราสามารถพูดในทางกลับกันได้ว่า cubic curve ที่ว่านี้ เมื่อแปลงเป็น quadratic curve ก็จะใช้จุดควบคุม P0, P1 และ P2 ได้ทันทีโดยไม่ต้องเติมจุดกะ

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

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

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

การปรับอื่น ๆ

ในบางกรณี ก่อนที่จะได้ cubic curve ที่สามารถแทนด้วย quadratic curve ที่เติมจุดกะไม่เกิน 1 จุด ก็อาจจำเป็นต้องปรับจุดต่อโค้งต่าง ๆ เพิ่มตามจำเป็น เช่น

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

แผนการต่อไป

ในฟอนต์ชุด Arundina ที่กำลังจะตัดออกรุ่นนี้ ผมได้ปรับ spline เฉพาะฟอนต์ Arundina Sans เท่านั้น โดยใช้วิธีแรก (ยุบจุดกะใน quadratic spline เท่านั้น) และ commit ไปแล้ว ส่วน Arundina Sans Mono ผมเริ่มใช้วิธีที่สอง แต่น่าเสียดายที่ข้อมูลสูญหายไปหมด จึงไม่ได้รวมมาในรุ่นใหม่นี้ แต่จะนำหลักการที่ได้นี้ไปใช้ปรับฟอนต์ชุด Fonts-TLWG ในลำดับต่อไป

โดย Thep (noreply@blogger.com) ณ 7 January 2020 07:36 +0700

11 November 2019

bact

Hello Dublin

Haven’t posted anything here for like a year. This is just a quick one the mark the fact that I have moved from Bangkok to Dublin recently and most likely will be here for the next four years. — Khao San road, I miss you already.

Hope to have a productive and fun time in this city (so far so good). Getting back to the student life at the age of 40 is interesting. I will doing a research on the governance of artificial intelligence system and the protection of privacy at ADAPT Centre, under SFI Centre for Research Training in Digitally-Enhanced Reality (D-REAL) training program, and now registered as a PhD student (yay! student discounts are underway) at Trinity’s School of Computer Science and Statistics.

Will of course still associated with Thai Netizen Network and the works on digital rights in Thailand and Southeast Asia.

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

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

โดย bact ณ 11 November 2019 14:14 +0700

29 October 2019

Kitt

Alma Mater

โดย kitty ณ 29 October 2019 08:44 +0700

2019 New Year Resolutions

More Read Learn Listen Exercise Gunpla Play Travel Less Meeting Complain Teach

โดย kitty ณ 29 October 2019 08:44 +0700

DNS Flag Day

Background0. อินเทอร์เน็ตอาศัยเลข IP address ในการระบุที่อยู่ของ devices ที่เชื่อมต่อกัน แต่มนุษย์จำเลข IP address พวกนี้ไม่ได้หรอก จึงเกิด Domain Name System (DNS) เพื่อให้เราใช้ชื่อเครื่อง (hostname) ที่จำได้ง่ายกว่า แทน IP address ได้ โดย DNS จะไปหา (resolve) มาให้ว่า hostname นี้ใช้ IP address อะไร 1. บริการของ DNS ทำผ่าน name servers ซึ่งมีกระจายทั่วโลก คอมพิวเตอร์ที่ต่ออินเทอร์เน็ตเกือบทั้งหมดจะได้รับการกำหนดค่า name server(s) เสมอเพื่อจะได้ถามหา IP address ของ hostname ที่ผู้ใช้จะเชื่อมต่อได้ถูก Problems2. มันควรเป็นปกติสุข จนระบบ DNS มีความซับซ้อนมากขึ้นเรื่อย ๆ … Continue reading DNS Flag Day

โดย kitty ณ 29 October 2019 08:43 +0700

ftp.th.debian.org

Well, ftp.th.debian.org was NXDOMAIN for 2+ years. Not anymore: Yes, I’m running ftp.th.debian.org. :)

โดย kitty ณ 29 October 2019 08:43 +0700

CVE-2019-14287 – sudo

Thre is a bug in sudo before 1.8.28. The bug, basically, involve UID validation where user ID -1 or 4294967295 could allow a user with sudo privilege to run command as root, even the Runas specification explicitly disallow root access. For example,  specify Runas in /etc/sudoers like this: test ALL=(ALL,!root) /usr/bin/whoami You can do this: … Continue reading CVE-2019-14287 – sudo

โดย kitty ณ 29 October 2019 08:43 +0700

16 September 2019

Thep

Thanks

ขอขอบคุณ ท่านที่ได้ สนับสนุน งานพัฒนาซอฟต์แวร์เสรีของผมในช่วงที่ผ่านมาครับ

นับจาก ครั้งที่แล้ว ขอขอบคุณผู้สนับสนุนงานของผมดังนี้:

ขอให้ทั้งสองท่านประสบความสำเร็จในหน้าที่การงาน สุขภาพแข็งแรงครับ

ปีนี้อาจเป็นปีที่งานพัฒนาซอฟต์แวร์ของผมขาดช่วงไปบ้าง เนื่องจากรับงานสอนพิเศษนักเรียนอยู่ช่วงหนึ่ง แต่ก็พอสรุปงานตั้งแต่ต้นปีได้ดังนี้:

โดย Thep (noreply@blogger.com) ณ 16 September 2019 04:32 +0700

1 July 2019

Thep

DTAC Leaked Net Data Problem

หลังจากเจอปัญหา DTAC เน็ตมือถือรั่วมานานพอควร คือการหักค่า net data ทั้ง ๆ ที่ผมปิด net data ตลอดเวลา และใช้เน็ตผ่าน Wi-Fi เท่านั้น เดือน มิ.ย. ที่ผ่านมาเลยเช็กตัวเลขจริงจัง พบว่าค่าเน็ตรั่วที่ผมจ่ายทั้งเดือนคือ 57.78 บาท ในขณะที่ค่าโทรผมใช้แค่ 21.25 บาท ผมจ่ายเงินไปฟรี ๆ เกือบสามเท่าของที่ใช้จริง!

เมื่อตรวจสอบปริมาณการใช้ net data จากแอนดรอยด์เอง กลับพบว่าปริมาณการใช้เน็ตทั้งเดือนคือ 0 ไบต์! แล้ว DTAC ตัดเงินผมจากอะไร?

คำอธิบายมีสองแนว

  1. comment หนึ่งใน Pantip อธิบายว่า เทคโนโลยี 4G ออกแบบมาให้ใช้ data ล้วน จึงเชื่อมต่อ data ตลอดเวลาที่เปิดเครื่อง แม้แต่การโทรก็ใช้ data ผ่าน VoLTE แต่เพื่อการติดต่อกับเครือข่าย 3G หรือ 2G ก็จะทำ Circuit Switched FallBack (CSFB) สำหรับการโทรหรือ SMS ได้ แต่สำหรับการเชื่อมต่อ 4G ปกติ ยังไงก็ปิด data ไม่ได้ทั้งหมด ยังต้องมีส่วนที่ใช้ maintain การเชื่อมต่ออยู่ดี
  2. DTAC อธิบายถึงสาเหตุอื่นที่ไม่เกี่ยวกับเทคโนโลยี 4G คือ
    • เมื่อ Wi-Fi สัญญาณอ่อนหรือช้าลง เครื่องจะสลับมาใช้สัญญาณ 3G/4G โดยอัตโนมัติเพื่อความต่อเนื่อง
    • บาง app เช่น passbook จำเป็นต้องใช้สัญญาณ 3G/4G สื่อสารกับเครือข่ายเพื่อยืนยันเบอร์ที่ใช้งาน
    • เมื่อเครื่องเข้าสู่ sleep mode จะสลับจากการจับสัญญาณ Wi-Fi มาเป็น 3G/4G อัตโนมัติ

กรณีของผม ผมเชื่อว่ามาจากข้อ 1 เพราะเริ่มสังเกตเห็นอาการเน็ตรั่วหลังจากที่ในพื้นที่มีสัญญาณ DTAC-Turbo และมือถือผมก็จับสัญญาณนี้ ในขณะที่เครื่องของอีกคนที่ใช้ DTAC เหมือนกันจับสัญญาณ VoLTE และไม่มีปัญหาเน็ตรั่ว

ฉะนั้น ผมจึงแก้ปัญหาด้วยการตั้งมือถือให้เชื่อมต่อกับเครือข่าย 3G เท่านั้น แทนที่จะเชื่อม 3G/4G อัตโนมัติ

อย่างไรก็ดี ปัญหาข้อ 2 ก็ยังอาจมีได้สำหรับเครือข่าย 3G ก็เลยสั่งปิดสัญญาณอินเทอร์เน็ตที่เครือข่ายไปเลย โดยสำหรับ DTAC ใช้เบอร์ดังนี้

จากที่ผมสังเกตเปรียบเทียบกับเครื่องของเพื่อนที่ไม่มีปัญหาเน็ตรั่วทั้งที่ใช้ 4G เหมือนกัน ซึ่งก็ควรต้องใช้ data ในการ maintain การเชื่อมต่อเหมือนกัน แต่ VoLTE กลับไม่มีปัญหาการตัดเงิน ในขณะที่เครื่องที่ใช้ DTAC-Turbo กลับมีปัญหา หรือจะเป็นปัญหาของ DTAC-Turbo?

ทั้งนี้ ก็ต้องพิจารณาด้วยว่าปัญหานี้ไม่ได้พบแค่กับ DTAC เท่านั้น แต่ทั้ง AIS และ True ต่างก็ดูจะมีปัญหานี้เช่นกัน และถ้าทางแก้คือการถอยกลับไป 3G ก็หมายความว่าถ้าไม่แก้ปัญหาการคิดค่าใช้งานตรงนี้ การขยับไป 4G หรือ 5G ของประเทศก็อาจเกิดแรงเสียดทานจากผู้ใช้ได้

โดย Thep (noreply@blogger.com) ณ 1 July 2019 05:11 +0700

29 June 2019

bact

Rule of Law in Thailand

Sirawith

Political activist Sirawith “Ja New” Serithiwat is brought to hospital on June 28, 2019, with major head injuries. This is the second time, in less than a month, that he got seriously attacked in the public. The authority still has no clue.

Image: Democracy Restoration Group

โดย bact ณ 29 June 2019 04:03 +0700

22 May 2019

Thep

Esaan Tones

จาก blog เก่าเรื่อง ไตรยางศ์อยุธยา เมื่อ 7 ปีก่อน ผมทิ้งท้ายไว้ว่าจะเขียนถึงไตรยางศ์อีสานต่อ จนแล้วจนรอดก็หาเวลาเขียนไม่ได้ จนกระทั่งได้ไปร่วม Thailand ICT Camp ที่ชะอำ ซึ่งมีกิจกรรม BarCamp ในวันสุดท้าย ผมไม่เคยร่วม BarCamp มาก่อน แต่ก็ลองเสนอหัวข้อ ไตรยางศ์ไทย-อีสาน ดู พอได้นำเสนอจึงถือโอกาสนำมาเขียนบันทึกต่อเสียเลย

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

ปัญหาของการเขียนลักลั่นแบบนี้คือ หลักการอ่านจะไม่แน่นอน เอาหม่ำไปใส่หม้อ ควรอ่านเป็น [เอ่า-มัม^-ไป่-ใซ^-หม่อ] ตามกฎการผันเสียง หรือควรอ่านเป็น [เอ่า-หม่ำ-ไป่-ใซ^-หม่อ] โดยอาศัยความรู้ทางศัพท์แก้เสียงวรรณยุกต์ในระหว่างอ่าน? และเมื่อเด็กอีสานไปเรียนคำใหม่จากหนังสือ เขาจะรู้ได้อย่างไรว่าคำที่เขียนนั้นตั้งใจให้อ่านแบบไทยกลางหรือไทยอีสาน? เช่นคำว่า หล่า ถ้าอ่านแบบไทยกลางเป็น [หล่า] จะหมายถึงคนสุดท้อง แต่ถ้าอ่านแบบไทยอีสานเป็น [ลา^] จะหมายถึงอาการหน้าเจื่อน แล้วเราก็จะกลับไปสู่ยุค หนังสือหนังหา สมัยที่ยังเขียน หนังสือ แบบไม่ใส่วรรณยุกต์ แล้วให้คนอ่านอ่าน หนังหา คือหาเสียงวรรณยุกต์ที่ถูกต้องมาใส่เอาเอง ซึ่งถ้าเป็นเช่นนั้น เราจะใส่วรรณยุกต์ไปทำไมกัน?

รายละเอียดเพิ่มเติมเกี่ยวกับประเด็นการสะกดคำ กรุณาอ่านจาก blog Esaan Language Tidbits

สิ่งที่ควรจะเป็นคือเขียนภาษาเขียนเหมือนไทยกลาง แต่ใช้หลักไตรยางศ์เฉพาะของอีสานในการผันเสียง โดยเขียน หม้ำ แล้วผันเสียงเป็น [หม่ำ] เหมือนที่ผัน หม้อ เป็น [หม่อ] เพื่อที่จะใช้หลักการเดียวในการอ่านข้อความ เอาหม้ำไปใส่หม้อ ตลอดข้อความโดยไม่ต้องมีข้อยกเว้น

ไตรยางศ์ขอนแก่น

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

สำเนียงขอนแก่น มีวรรณยุกต์ทั้งหมด 5 เสียง

  1. เสียงเอก ตรงกับเสียงเอกในภาษาบางกอก เช่น ในคำว่า กิน ขาด ปาก หม้อ เข้า
  2. เสียงโทต่ำ คล้ายเสียงโทของภาษาบางกอก แต่เสียงต่ำกว่า (ต้นพยางค์เท่า ๆ กับเสียงสามัญของบางกอก แล้วลงต่ำที่ท้ายพยางค์) เช่น ในคำว่า ป้า (น้ำไหล)โจ้ก ค้า เคียด
  3. เสียงสามัญสูง เสียงเป็นระดับเดียวตลอดพยางค์เหมือนเวลาออกเสียงสามัญ แต่เสียงสูงกว่าเสียงสามัญของบางกอก เช่น ในคำว่า เต่า ข่า พ่อ งึด
  4. เสียงโท ตรงกับเสียงโทของภาษาบางกอก เช่น ในคำว่า คา งู มา
  5. เสียงจัตวา ตรงกับเสียงจัตวาของภาษาบางกอก เช่น ในคำว่า ขา กบ เห็ด

การเขียนบรรยายเสียงอ่าน จะมีสองเสียงที่เสียงไม่ตรงกับภาษาบางกอก คือเสียงโทต่ำและสามัญสูง จึงขอเขียนเครื่องหมายพิเศษเพื่อกำกับเสียง โดยเสียงโทต่ำจะเขียนเสียงโทแล้วตามด้วยขีดล่าง (_) เช่น ป้า [ป้า_], โจ้ก [โจ้ก_], ค้า [ค่า_], เคียด [เคียด_] ส่วนเสียงสามัญสูงจะเขียนเสียงสามัญแล้วตามด้วยหมวก (^) เช่น เต่า [เตา^], ข่า [คา^], พ่อ [พอ^] ยกเว้นกรณีที่ไม่สามารถเขียนเสียงสามัญได้ จะเขียนเสียงอื่นโดยอนุโลมแล้วใช้หมวกกำกับเสียง เช่น งึด [งึด^], คัก [คัก^]

หลักการผันวรรณยุกต์

คำเป็น

คำตายสระเสียงยาว

คำตายสระเสียงสั้น

รูปสะกดที่คลาดกับไทยกลาง

หลักไตรยางศ์ข้างต้นสามารถใช้ได้กับทุกกรณี แต่คนอีสานอาจสังเกตพบบางคำที่เสียงอ่านไม่เป็นไปตามกฎนี้ เช่น น้ำท่วม [น่าม_-ถ่วม ไม่ใช่ น่าม_-ทวม^], คอยท่า [ค่อย-ถ่า ไม่ใช่ ค่อย-ทา^], ฆ่างัว [ข่า-งั่ว ไม่ใช่ คา^-งั่ว] ฯลฯ ทั้งนี้เป็นเพราะวิวัฒนาการของการสะกดคำของบางกอกได้เลือกเอาตัวสะกดที่ไม่ตรงกับอีสานไว้ กล่าวคือ:

ยังมีคำอื่น ๆ ในทำนองนี้ เช่น ໜ້າຮັກ (หน้าฮัก = น่ารัก), ຫຼິ້ນ (หลิ้น = เหล้น = เล่น) ซึ่งทำให้เห็นว่าการเสาะหาตัวสะกดที่สูญหายไปของภาษาอีสานอาจหาได้จากแหล่งใกล้เคียงคือภาษาลาวใน สปป. ลาวนั่นเอง

ย ยุง กับ ย ยา

อีกประเด็นหนึ่งที่สร้างความสับสนให้กับผู้ฝึกภาษาอีสานได้ไม่น้อยคือความแตกต่างระหว่าง ຍ ຍຸງ (ย ยุง) กับ ຢ ຢາ (ย ยา) ที่ผันวรรณยุกต์คนละแบบ เพราะ ຍ ຍຸງ นั้นนับเป็นอักษรต่ำ (เดี่ยว, นาสิก) ในขณะที่ ຢ ຢາ จะเทียบเท่ากับ อ นำ ย ในภาษาไทย และผันอย่างอักษรกลาง ซึ่งภาษาไทยปัจจุบันเหลือคำที่ใช้ อ นำ ย อยู่แค่ 4 คำ คือ อย่า อยู่ อย่าง อยาก แต่ในภาษาลาวและอีสานยังคงรักษาคำไว้มากกว่านั้น ตัวอย่างเช่น

โดย Thep (noreply@blogger.com) ณ 22 May 2019 09:03 +0700

2 January 2019

Thep

New Year Thanks

สวัสดีปีใหม่ 2562 ครับ ขอถือโอกาสนี้ ขอบคุณ ทุกท่านที่ได้ สนับสนุน งานพัฒนาซอฟต์แวร์เสรีของผมในปีที่ผ่านมาครับ

นับจาก ครั้งที่แล้ว ขอขอบคุณผู้สนับสนุนงานพัฒนาของผมในช่วงครึ่งหลังของปี 2561 ดังนี้:

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

สรุปกิจกรรมซอฟต์แวร์เสรีในครึ่งหลังของปี 2561 ของผม:

โดย Thep (noreply@blogger.com) ณ 2 January 2019 08:39 +0700

6 November 2018

Thep

Fonts-TLWG 0.7.0 and 0.7.1

Fonts-TLWG 0.7.0 ออกไปแล้วเมื่อปลายตุลาที่ผ่านมา หลังจากสะสมงานพัฒนามาได้ครึ่งปี โดยมีการเปลี่ยนแปลงตามลำดับเวลาดังนี้:

หลังจาก อัปโหลด แพกเกจเข้า Debian ไปแล้ว ก็รอตรวจสอบหน้า reproducible build ของ fonts-tlwg ใน unstable ปรากฏว่ายังไม่ผ่าน ยังคงมีประเด็นตกค้างอยู่ ซึ่งเมื่อตรวจสอบ diff ดูแล้ว พบว่ามาจาก date stamp ที่เกิดจากฟิลด์ UniqueID ใน TTF Names ที่ Fontforge เติมให้โดยอัตโนมัติสำหรับฟอนต์ที่ไม่ได้จัดเตรียมไว้

(สังเกตที่คำว่า date stamp ซึ่งเป็นสาเหตุที่ทำให้มันหลุดรอดการทดสอบก่อนออกรุ่น 0.7.0 เพราะผมไม่ได้ทดสอบแบบข้ามวัน ทดสอบกี่รอบ date stamp มันก็ไม่เปลี่ยน)

Fonts-TLWG 0.7.1 จึงเกิดขึ้นตามมาเพื่ออุดช่องโหว่ดังกล่าว โดยเติมฟิลด์ UniqueID ใน TTF Names ให้ครบทุกฟอนต์เสีย

ขณะเดียวกัน เป็นธรรมเนียมของ Fonts-TLWG ที่จะ release พร้อมกับฟอนต์ OTF, TTF, WOFF ที่ build สำเร็จรูปแล้ว นอกเหนือจากซอร์สของฟอนต์ เพื่ออำนวยความสะดวกผู้ใช้ฟอนต์ทั่วไปที่ไม่สะดวกจะ build ฟอนต์เอง ซึ่งในทุกรุ่นที่ผ่านมา ผมสร้าง tarball เหล่านี้แบบ manual ด้วยการ configure และ build สามแบบเพื่อเก็บเข้า tarball ทีละก้อน ซึ่งถ้านาน ๆ ทำทีก็ไม่รู้สึกลำบาก แต่พอออกรุ่นนี้ไล่หลังรุ่นที่แล้วแบบค่อนข้างกระชั้นชิด เลยรู้สึกว่ามันควร automate มาตั้งนานแล้ว

จึงได้เป็น automation สำหรับการ build font tarballs โดยอิงอาศัย make rule ชุดเดิมที่เคยใช้ build ZIP file สำหรับ CTAN upload

พร้อมกันนี้ ในรุ่นนี้ผมเริ่มเผยแพร่ฟอนต์สำเร็จรูปในรูปแบบ ZIP file นอกเหนือจาก tarball ด้วย เพื่อส่งเสริมการใช้งานในวินโดวส์หรือแฟลตฟอร์มอื่นด้วย เพราะที่ผ่านมา Fonts-TLWG ถูกมองจากผู้ใช้ทั่วไปว่าเป็น ฟอนต์สำหรับ LaTeX บ้าง ฟอนต์สำหรับลินุกซ์ บ้าง ทั้งที่มันใช้ได้ในแพลตฟอร์มทั่วไป

upload เข้า Debian แล้ว ต่อไปก็รอดู reproducibility test ต่อไป

ทางด้าน CTAN ก็ได้ upload ไล่หลัง Debian แล้วทั้งสองรุ่น

โดย Thep (noreply@blogger.com) ณ 6 November 2018 06:46 +0700

21 October 2018

Thep

Reproducible Fonts-TLWG

ความเปลี่ยนแปลงล่าสุดใน Fonts-TLWG คือเรื่อง reproducibility คือการ build ที่ให้ผลลัพธ์เป็น binary file ที่เป็นข้อมูลเดิมทุกบิตทุกครั้งที่ build โดยไม่ขึ้นกับสภาวะที่ใช้ในการ build

สำหรับฟอนต์จากโครงการ Fonts-TLWG มีปัญหา reproducibility ตามที่รายงานโดย Debian คือ modification timestamp ที่เกิดจาก Fontforge script ที่ใช้ build โดยมีการเปลี่ยนแปลงข้อมูลของฟอนต์ระหว่างทาง ทำให้ timestamp ของการเปลี่ยนแปลงถูกปรับเป็นเวลาขณะ script ทำงานนั้น และทำให้ข้อมูลฟอนต์ผลลัพธ์แปรเปลี่ยนไปตามเวลาที่ build

Modification กลางอากาศ

script ที่ใช้ generate ฟอนต์ชนิดต่าง ๆ จะมีการเปลี่ยนแปลงข้อมูลฟอนต์กลางอากาศขณะ build ดังนี้

PUA Glyphs

PUA (Unicode Private Use Area) glyphs สำหรับสระบน-ล่างและวรรณยุกต์ที่เลื่อนหลบหางพยัญชนะ เป็นสิ่งจำเป็นสำหรับการ render ข้อความในสภาวะที่ไม่มีเทคโนโลยี OpenType เช่น บน Windows XP และการใช้ virtual font ใน TeX engine เก่า (เช่น pdfTeX) ซึ่งเราได้ตัดสินใจยกเลิกการรองรับ TTF แบบเก่าไปนานแล้ว แต่ยังไม่สามารถตัดการรองรับ TeX engine เก่าได้ จึงยังคง PUA glyphs ไว้ใน source ของฟอนต์ แต่ใช้วิธีลบกลางอากาศขณะ gen OTF และ TTF เอา

แต่การลบ glyph กลางอากาศนี่เองที่เป็นสาเหตุหนึ่งที่ทำให้ modification timestamp ของฟอนต์เปลี่ยน และทำให้ได้ไฟล์ฟอนต์ที่ไม่ reproducible

วิธีแก้ปัญหาก็เป็นไปได้สองทาง:

  1. ไม่ต้องตัด PUA glyphs เลย ใส่เกินไว้ในฟอนต์อย่างนั้นแหละ การมีอยู่ของ OpenType tables ต่าง ๆ จะทำให้ shaping engine อย่าง Harfbuzz ไม่ fallback มาใช้ PUA shaping เมื่อเจอ PUA glyphs ในฟอนต์
  2. ตัด PUA glyphs ออกจาก source ไปเลย ซึ่งจะหมายถึงการตัดการรองรับ shaping ผ่าน TeX virtual font ด้วย ผลคือ ตัดการรองรับ pdfTeX ไปเลย และหยุดอัปเดตแพกเกจ fonts-tlwg บน CTAN ไปเสีย

ทางเลือก 2 ดูจะเป็นเรื่องใหญ่ ผมคิดว่าควรชะลอไปก่อน และเลือกทางเลือก 1 ไว้ก่อน และได้ commit ไปตามนี้

TrueType Instructions

เพื่อเพิ่ม hint ให้กับฟอนต์ TrueType ในขณะที่ source ของเราอยู่ในรูป cubic spline ตัว script จึงใช้วิธีแปลง spline ให้เป็น quadratic ก่อน แล้ว apply AutoInstr กลางอากาศก่อน generate TTF

ซึ่งการแปลงและสั่ง AutoInstr ทำให้ modification timestamp ของฟอนต์เปลี่ยน ทำให้ได้ไฟล์ฟอนต์ที่ไม่ reproducible อีกเช่นกัน

ผมค้นคิดวิธีที่จะแก้ปัญหานี้ไปเรื่อย ๆ จนในที่สุดก็ได้ไอเดียการทำ mixed layers โดยมีหลักการคือ:

เมื่อได้หลักการเช่นนี้แล้ว ก็ได้แตก branch mixed-layer-ttf เพื่อดำเนินการ โดยตั้งชื่อ quadratic layer ให้เหมือนกันทุกฟอนต์ว่า Quad เพื่อจะได้ใช้ชื่อนี้ใน script ให้ทำงานได้ทุกฟอนต์ และเปลี่ยนมาใช้ Python script สำหรับ TTF แทน native script เดิม

ด้วยหลักการเช่นนี้ source สำหรับ TTF ก็จะเตรียมพร้อมอยู่ใน source สำหรับ generate ได้โดยไม่ต้องแก้ไขกลางอากาศอีก

ทำเสร็จหมดแล้ว ก็ merge เข้า master เสีย เป็นอันเสร็จพิธี

ส่วน LaTeX fonts ไม่มีประเด็นอะไรต้องแก้ ผลคือ ขณะนี้ fonts-tlwg สามารถ build แบบ reproducible ได้ทั้งหมดแล้ว

อนาคต

ประเด็นที่น่าจะทำในอนาคต:

โดย Thep (noreply@blogger.com) ณ 21 October 2018 10:36 +0700

29 August 2018

Thep

thpronun

ประกาศเปิดตัวโครงการ thpronun ซึ่งเป็นซอฟต์แวร์เสรีสำหรับวิเคราะห์เสียงอ่านของข้อความภาษาไทย (grapheme-to-phoneme) ภายใต้การสนับสนุนของ บริษัท เมตามีเดีย เทคโนโลยี จำกัด

ซอฟต์แวร์เสรีที่สนับสนุนโดยเอกชน

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

เมื่อได้ข้อตกลงแล้ว ผมจึงนั่งร่างโปรแกรมใน local Git จนโปรแกรมพร้อมทดสอบ จึงได้หารือเรื่อง repository ที่จะใช้ส่งโค้ดระหว่างกัน ซึ่งคุณภัทระก็เสนอให้ใช้ tlwg บน GitHub ไปเลย ดังนั้น TLWG จึงได้เกิดโครงการน้องใหม่คือ thpronun ด้วยประการฉะนี้

นอกจากนี้ ในระหว่างการพัฒนา ก็ได้รับ contribution ใน libthai 0.1.28 เป็นอานิสงส์ด้วย

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

ลักษณะของโปรแกรม

ตัวโปรแกรมเป็นคำสั่ง command line รับข้อมูลเข้าเป็นข้อความภาษาไทย แล้วจะให้ข้อมูลออกเป็นคำอ่านที่เป็นไปได้ทั้งหมดของข้อความนั้น โดยสามารถเลือกรูปแบบของคำอ่านได้จาก command-line option

$ thpronun --help
Usage: thpronun [OPTION] [WORD...]

Thai word pronunciation program.

It reads Thai words from command-line arguments, or from standard input
if no argument is given, and generates all possible pronunciations
of the words.

Options:

General:
  -V, --version  Displays program version info
  -h, --help     Displays help
  -d<DICTPATH>   Use exception dict from <DICTPATH>
  -n             Turns off word segmentation

Output structures:
  -j             Turns on JSON output
  -g             Turns on grouping in JSON output (implies '-j')

Output notations:
  -r             Outputs Romanization
  -t             Outputs Thai pronunciation
  -p             Outputs Phonetic form
  -w             Outputs Raw pronunciation code
  -s             Outputs Soundex code

ตัวอย่างคำอ่านภาษาไทย:

$ thpronun -t เถลไถล
เถลไถล:
ถะ-เหฺล-ถะ-หฺลัย
เถน-ถะ-หฺลัย
เถ-ละ-ถะ-หฺลัย

Romanization:

$ thpronun -r เถลไถล
เถลไถล:
thalethalai
thenthalai
thelathalai

phonetic:

$ thpronun -p เถลไถล
เถลไถล:
thah1 ley4 thah1 lahy4
theyn4 thah1 lahy4
they4 lah3 thah1 lahy4

soundex:

$ thpronun -s เถลไถล
เถลไถล:
Ta_-le_-Ta_-lay
Ten-Ta_-lay
Te_-la_-Ta_-lay

หรือกระทั่ง raw code ตามที่เก็บในโปรแกรม:

$ thpronun -w เถลไถล
เถลไถล:
T_a_1@-3,l_E_4@3,T_a_1@-306,l_ay4@6
T_En4@3,T_a_1@-306,l_ay4@6
T_E_4@2,l_a_3@3,T_a_1@-306,l_ay4@6

กลไกภายใน

ตัวโปรแกรมพัฒนาด้วย C++14 (ควรคอมไพล์ด้วย GCC 6.1 ขึ้นไป หรือ Clang 3.4 ขึ้นไป) ซึ่งมีสิ่งอำนวยความสะดวกครบครันอย่างที่ภาษาโปรแกรมในยุคนี้ควรมี ทำให้ได้โค้ดที่กระชับและใช้เวลาพัฒนาไม่นานเกินไป โดยเฉพาะเมื่อเทียบกับ C++ สมัยก่อน ๆ

build-dependencies:

กลไกภายใน ใช้ hard-coded rule base แบบดิบ ๆ เลย ซึ่งมีข้อดีคือไม่ต้องเสียเวลาเตรียม corpus และสามารถปรับแก้กฎต่าง ๆ ได้ตามต้องการภายในกำหนดเวลาพัฒนาที่มี แต่ข้อเสียนอกเหนือจากเรื่อง human error ที่ต้องตามแก้ในกฎก็คือ ไม่สามารถให้น้ำหนักคำอ่านแต่ละแบบตามความน่าจะเป็นได้ ซึ่งเผอิญว่าโจทย์ที่ต้องการคือการค้นฐานข้อมูล ไม่ใช่การสังเคราะห์เสียงพูดที่ต้องเลือกคำอ่านเพียงแบบเดียว จึงยังพอกล้อมแกล้มได้

เมื่อแจงรูปแบบพยางค์ของ input ด้วยกฎแล้ว ก็จะได้ abstract representation ของคำอ่าน ซึ่งสามารถใช้ polymorphism ในการ generate รูปแบบคำอ่านสุดท้ายที่ต้องการ ไม่ว่าจะเป็น romanization, คำอ่านเรียงพยางค์ด้วยอักษรไทย, คำอ่านแบบ phonetic หรือกระทั่ง soundex

องค์ประกอบหลักของแต่ละพยางค์ประกอบด้วย:

  1. เสียงพยัญชนะต้น
  2. เสียงพยัญชนะควบกล้ำ (ถ้ามี)
  3. เสียงสระ
  4. เสียงพยัญชนะสะกด
  5. เสียงวรรณยุกต์

นอกจากนี้ ยังมี requirement เพิ่มเติมจากเมตามีเดียที่ต้องการให้จัดโครงสร้างข้อมูลเป็น lattice โดยแทนที่จะ enumerate คำอ่านทุก combination เป็น list เส้นตรง ก็ให้จัดเป็น lattice โดยแยกเส้นทางคำอ่านเฉพาะในช่วงที่อ่านได้หลายแบบ แล้ว merge กลับเมื่อถึงจุดร่วม โดยให้จัดรูปแบบ output เป็น nested list ของ JSON (ไม่เกิน 2 ชั้น)

$ thpronun -t -g เถลไถล
เถลไถล:
[[[["เถ","ละ"],["เถน"],["ถะ","เหฺล"]],[["ถะ","หฺลัย"]]]]

โครงสร้างดังกล่าวสามารถแทนได้ด้วย Directed Acyclic Graph (DAG) โดยแต่ละ vertex ของกราฟแทนตำแหน่งอักขระจบพยางค์ในข้อความ input และแต่ละ edge แทนเสียงอ่านที่เกิดขึ้นระหว่างตำแหน่งที่มันเชื่อมโยง

ด้วย requirement นี้ ทำให้ทุกฟีเจอร์ที่จะเพิ่มต้องคำนึงถึงการแปลงเข้าสู่ DAG และการทำ output grouping เสมอ จึงต้องเพิ่มข้อมูลตำแหน่งอักขระจบพยางค์เป็นองค์ประกอบที่หกของทุกพยางค์ด้วย โดยบางพยางค์ที่เพิ่มเข้ามาเพราะหลักอักษรนำ (เช่น ถะ ใน เถล และ ไถล ข้างต้น) ต้องแทนด้วยเลขลบที่ encode ขอบเขตพยางค์ที่มันเกาะอยู่ไปด้วยในเวลาเดียวกัน (ในทางเทคนิค สูตรที่ใช้คือ -(ตำแหน่งต้นพยางค์ * 100 + ตำแหน่งท้ายพยางค์))

ข้อยกเว้น

กฎที่ใช้แจงพยางค์จะพยายามครอบคลุมพยางค์ทั่ว ๆ ไป แต่จะไม่เจาะจงข้อยกเว้นบางอย่าง เช่น ทร ที่อ่านเป็น ซ, ฑ นางมณโฑ ที่อ่านเป็น ด, เสียงวรรณยุกต์ของคำแผลง (เช่น กำเนิด, ตำรวจ), การันต์ซับซ้อน (เช่น กษัตริย์, สิริกิติ์, รามเกียรติ์, สุรเกียรติ์) ฯลฯ ซึ่งกรณีเหล่านี้จะจัดการด้วยพจนานุกรมคำยกเว้น (exception dictionary) เพราะการพยายามรวมในกฎจะทำให้เกิด noise เป็นคำอ่านที่ผิดเจือปนเข้ามาโดยไม่จำเป็นสำหรับกรณีทั่วไป

โดยปกติ thpronun จะมีพจนานุกรมคำยกเว้นมาให้อยู่แล้ว แต่คุณก็สามารถสร้างพจนานุกรมคำยกเว้นเองได้ โดยดัดแปลงจากไดเรกทอรี data/ ใน source tree และใช้ตัวเลือก -d<DICTPATH> ใน command line เพื่อระบุพจนานุกรมคำยกเว้น

เนื้อหาของพจนานุกรม จะ map จากตัวสะกดคำไทยไปเป็นคำอ่านในรูป raw code ซึ่งเป็นรูปแบบภายในของโปรแกรมที่แสดงจากตัวเลือก -w เช่น:

ทรง s_og0@3
ทรัพย์ s_ap3@6

การแบ่งคำ

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

โดย Thep (noreply@blogger.com) ณ 29 August 2018 05:57 +0700

23 August 2018

Thep

LibThai 0.1.28 and its Consequences

บันทึกการเปลี่ยนแปลงต่าง ๆ ที่มาใน LibThai 0.1.28 และผลพวงทั้งหลายหลังจากนั้น

LibThai 0.1.28 ออกไปตั้งแต่ต้นเดือน โดยรุ่นนี้มีรายการเปลี่ยนแปลงสำคัญ ๆ คือ:

จากนั้นก็ได้ upload debian package พร้อมความเปลี่ยนแปลงอย่างอื่น คือ เพิ่ม pkg-config ให้เป็น dependency ของ libthai-dev เพื่อให้แน่ใจว่า libthai.pc จะสามารถทำงานได้แม้ในระบบที่ติดตั้งแบบเล็กที่สุด (เป็นปัญหาที่พบระหว่างที่ทำงานชิ้นหนึ่งร่วมกับ metamedia technology) และ การรองรับการ build ที่ไม่ต้องใช้ (fake)root

รายการคำจากพจนานุกรมตัดคำของ libthai ก็ได้นำไปใช้ สร้าง hyphenation pattern ที่โครงการ thailatex ซึ่งขณะนี้กลายสภาพเป็นเพียงที่พักงานพัฒนา hyphenation pattern เท่านั้น จากนั้นจึงได้เสนอ pull request สำหรับ update hyphenation pattern สำหรับภาษาไทยในโครงการ TeX hyphenation patterns ซึ่งต้องรอการ merge เพื่อให้มีผลที่ต้นน้ำต่อไป

จาก TeX hyphenation pattern ก็ต้อง sync มายังเครื่องมือตัดคำสำหรับเอกสาร LaTeX ด้วย คือ swath ซึ่งนอกจากการปรับพจนานุกรมแล้ว ก็ได้ปรับโค้ดเล็ก ๆ น้อย ๆ ตามที่เคยทำในทุกรุ่นที่ผ่านมา โดยสิ่งที่ทำในรุ่นนี้คือ:

แล้วก็ออกรุ่น swath 0.6.1 ตามมาด้วย Debian upload ซึ่งก่อนอัปโหลดก็ได้ปรับ branch layout ของ swath packaging ตาม DEP-14 ด้วย

โดย Thep (noreply@blogger.com) ณ 23 August 2018 05:20 +0700

21 August 2018

Thep

DEP-14 Note

บันทึกเตือนความจำสำหรับการทำตาม DEP-14: Recommended layout for Git packaging repositories เพื่อนำไปใช้ทำกับแพกเกจอื่น ๆ ในความดูแลของผมต่อไป

สำหรับ Debian package ปกติที่จัดการเวอร์ชันบน Git และใช้ git-buildpackage ในการ build นั้น จะมี branch layout ดังนี้:

master
pristine-tar
upstream

ศึกษารายละเอียดเพิ่มเติมได้ที่:

DEP-14 ได้แนะนำให้ใช้ branch layout แบบใหม่ เพื่อให้ Debian derivatives ต่าง ๆ ทำงานได้สะดวกขึ้น พร้อมกับเป็นการเตรียมการสำหรับเครื่องมือสร้างแพกเกจบน Git ต่าง ๆ ที่จะมีต่อไปในอนาคต

สำหรับแพกเกจใน Debian เอง โดยสรุปแล้วจะมีการเปลี่ยนแปลง branch layout ภาคบังคับอยู่ 2 รายการ คือ:

ทำให้มี branch layout ขั้นต่ำคือ:

debian/master
pristine-tar
upstream/latest

ที่เหลือก็ขึ้นอยู่กับความเปลี่ยนแปลงที่เกิดขึ้นกับแพกเกจ เช่น:

สำหรับแพกเกจที่ผมดูแล ส่งตรงจาก linux.thai.net ซึ่งที่ผ่านมามีแต่ release เป็นเส้นตรง ไม่มีแยกแขนง ก็มักไม่มีความซับซ้อนอะไร (ยกเว้นตอนที่มี security update) สิ่งที่ต้องทำในตอนนี้จึงมีเพียง 3 ขั้นตอน:

  1. เปลี่ยนชื่อ branch upstream เป็น upstream/latest
  2. เปลี่ยนชื่อ branch master เป็น debian/master
  3. เพิ่มไฟล์ debian/gbp.conf เพื่อระบุให้ใช้ branch ชื่อใหม่

เปลี่ยนชื่อ branch upstream

การเปลี่ยนชื่อ Git remote branch สามารถทำได้ตามขั้นตอนดังนี้

  1. เปลี่ยนชื่อ local branch
    $ git branch -m upstream upstream/latest
    
  2. ลบ remote branch upstream
    $ git push origin :upstream
    
  3. push local branch ชื่อใหม่ไปที่ remote
    $ git push --set-upstream origin upstream/latest
    

เปลี่ยนชื่อ branch master

โดยหลักการแล้วก็ทำเหมือนตอนเปลี่ยนชื่อ branch upstream นั่นแหละ แต่จะมีความไม่ตรงไปตรงมานิดหน่อย

  1. เปลี่ยนชื่อ local branch
    $ git branch -m master debian/master
    
  2. ลบ remote branch master

    ขั้นตอนนี้แหละที่ tricky ที่สุด เพราะ คุณกำลังจะลบ default branch (master) ออกจาก repository!

    ถ้าคุณใช้ Salsa ล่ะก็ hook script ของมันจะปฏิเสธไม่ให้ลบ default branch ผ่านการ push เลยทีเดียว คุณต้องทำผ่าน web interface ดังนี้

    1. เปลี่ยน default branch ไปที่อื่นก่อน โดยใช้เมนู Settings > General > Default Branch
    2. ลบ branch master โดยใช้เมนู Repository > Branches สังเกตว่า branch master จะถูก protect ไว้ ไม่สามารถลบผ่านการ push ได้ แต่ใช้ web interface ลบได้ โดยมันจะถามยืนยันก่อนลบ
  3. push local branch ชื่อใหม่ไปที่ remote
    $ git push --set-upstream origin debian/master
    
  4. เปลี่ยน default branch ให้ชี้มาที่ debian/master โดยใช้เมนู Settings > General > Default Branch

เพิ่มไฟล์ debian/gbp.conf

คุณอาจจะต้อง clone Git repository ใหม่อีกครั้ง เพื่อให้ค่าต่าง ๆ ของ origin ตรงกับของ remote (เช่น HEAD)

จากนั้น เพิ่มไฟล์ debian/gbp.conf ที่มีเนื้อหาดังนี้:

[DEFAULT]
pristine-tar = True
debian-branch = debian/master
upstream-branch = upstream/latest

ก็จะสามารถ build package ด้วย git-buildpackage ได้ตามปกติผ่าน branch layout ตาม DEP-14

โดย Thep (noreply@blogger.com) ณ 21 August 2018 08:09 +0700