19 June 2018

Thep

libdatrie 0.2.12

libdatrie 0.2.12 ออกแล้ว ไล่หลัง 0.2.11 เพียง 2 เดือน หลังจากผ่านการทำความสะอาดโค้ดมาระยะหนึ่ง

เริ่มจากผมได้รับแพตช์จากคุณ Peter Moulder ทางเมลส่วนตัว ซึ่งเสนอปรับแก้ 3 รายการคือ:

นั่นนำไปสู่การตรวจสอบหาประเด็นอื่น ๆ ต่อ โดยใช้ CFLAGS="-ansi -pedantic -Wall" รวมถึงการใช้ CC=clang ด้วย ทำให้จับประเด็นเพิ่มได้อีกหลายรายการ หนึ่งในนั้นมีผลข้างเคียงเป็นการป้องกันการตัดท้ายชื่อพาธของพจนานุกรมที่ยาวมาก ๆ ด้วย

เหลือประเด็นที่ยังคงไว้ คือการใช้ "%ls" ใน printf() format string เพื่อพิมพ์ข้อความยูนิโค้ดที่อยู่ในรูป wide char string ซึ่งไม่มีใน C90 โค้ดนี้เป็นโค้ดที่อยู่ใน test ในส่วนแสดงข้อมูลการทำงานของ test เท่านั้น ไม่ได้อยู่ในโค้ดของ library และไม่ใช่ส่วนสำคัญที่ชี้ขาดผลการ test จึงปล่อยไว้อย่างนั้น เพราะหากพยายามทำให้ได้ตาม C90 จริง ๆ จะยุ่งยากเกินจำเป็น

ตามมาด้วย Debian upload ซึ่งเพิ่ม pkg-config เข้าใน dependency ของ libdatrie-dev เพื่อประกันว่า datrie-0.2.pc สามารถทำงานได้แม้ในระบบที่ติดตั้งแบบ minimal จริง ๆ

โดย Thep (noreply@blogger.com) ณ 19 June 2018 15:03 +0700

8 May 2018

bact

เขียนและออกแบบหน้าตานโยบายความเป็นส่วนตัว-นโยบายการใช้ข้อมูล

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

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

หน้าแรกของนโยบายความเป็นส่วนตัวของเว็บไซต์ Juro
หน้าแรกของนโยบายความเป็นส่วนตัวของเว็บไซต์ Juro

 

โดย bact ณ 8 May 2018 13:37 +0700

6 May 2018

bact

เจ้าหน้าที่รัฐกับ gated community

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

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

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

สิ่งนี้เป็นประเด็นเดียวกันกับที่คนวิพากษ์วิจารณ์กันว่า สถาบันตุลาการไทยไม่ยึดโยงกับประชาชน

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

เรื่องนี้สำคัญ เพราะ *ถ้า* ในทางปฏิบัติแล้ว ผู้พิพากษาไม่ได้อยู่ในสังคมเดียวกับเรา ก็แปลว่าคำพิพากษาและการตีความกฎหมายใดๆ ที่จะส่งผลผูกพันกับเราทุกคน กลับไม่มีโอกาสผูกพันกับตัวผู้พิพากษาเอง พูดอีกแบบคือ มีแนวโน้มจะเป็นการตัดสินแบบไม่จำเป็นต้องมี accountability หรือความรับผิดรับชอบใดๆ

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

ต่อให้ไปสร้างหมู่บ้านในเมือง ไม่ยุ่งกับป่า ผมว่าถ้ายังเป็นรูปแบบนี้ก็มีปัญหาข้างต้นอยู่ดี

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

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

ถ้าเรามองว่า polarization การแบ่งขั้วแบ่งข้างจนไม่สนใจคนอื่น ทำให้คนมีพื้นที่ตรงกลางน้อยลงที่จะเข้าใจกัน (*ผมคิดว่าสุดท้ายเราเลือกข้างได้นะ ไม่จำเป็นต้องอยู่ตรงกลาง เพียงแต่ควรเข้าใจข้างอื่นๆ ด้วย) ไอ้ gated community อยู่กันเฉพาะพวกตัวเองแบบนี้ก็เป็นปัญหาแบบเดียวกัน (ผมไม่ค่อยชอบธรรมศาสตร์รังสิตในประเด็นนี้ด้วย)

ถ้าคิดว่าวาระสำคัญของชาติคือการ “ปรองดอง” ก็ควรจะออกมาดองกับคนอื่นบ้างน่ะครับ

….

ค้นคำว่า “gated community” เจอบทความนี้ของ นิธิ เอียวศรีวงศ์ จาก มิ.ย. 2560 – “ฐานทางสังคมของเผด็จการ”

(เผยแพร่ครั้งแรกในเฟซบุ๊ก 29 เม.ย. 2018)

ภาพประกอบ “Gated” โดย Gordon Joy สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบแสดงที่มา-อนุญาตแบบเดียวกัน

โดย bact ณ 6 May 2018 04:53 +0700

5 May 2018

bact

ทำเว็บไซต์ให้ปลอดภัยขึ้นอีกนิดนึง ไม่ยากเกินไป ถ้าเขียนเว็บได้ก็น่าจะทำได้ #websecurity

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

เครื่องมือตรวจสอบเบื้องต้น (ส่วนใหญ่ฟรี)

ใครเป็นคนดูแลเว็บ ลองใช้เครื่องมือในลิงก์นี้ตรวจสอบเบื้องต้นก่อนก็ได้ครับ ว่าเว็บไซต์เรายังโอเคไหม: 12 Online Free Tools to Scan Website Security Vulnerabilities & Malware

เข้าไล่มา 12 เครื่องมือ ผมก๊อปมาให้ดูตรงนี้อีกที (บางตัวก็ทำงานคล้ายๆ กัน)

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

ส่วนใหญ่จะฟรี บางอันต้องลงทะเบียนก่อน หรือต้องยืนยันสิทธิ์ก่อนว่าเราเป็นผู้ดูแลของเว็บไซต์นั้นจริงๆ (ด้วยการเอาไฟล์บางอย่างไปวางไว้ในเครื่องเรา – ยังไงก็ตรวจสอบดีๆ ก่อนจะเอาไฟล์อะไรไปวางนะครับ มันควรจะเป็น text/html file ที่เราเปิดเข้าไปอ่านๆ ได้ ถ้าดูแปลกๆ ก็อย่าทำต่อ)

* สำหรับตัวที่มีการทดสอบ SQL injection ให้ระวังด้วยว่ามันจะพยายามยิงอะไรบางอย่างเข้าไปในฐานข้อมูลของคุณ เพื่อจะทดสอบ แปลว่ามันอาจจะทำให้เกิดขยะในฐานข้อมูลได้  ดังนั้นไม่ควรทดสอบกับระบบที่ใช้อยู่จริง (on production) นะครับ ให้ทดสอบกับระบบที่เอาไว้ทดสอบเท่านั้น ถ้าเจอรูก็รีบอุด พอแน่ใจแล้วค่อยไปอัปเดตโค้ดในส่วนของ production ครับ [ขอบคุณคุณ Thitipong Samranvarnich ในกลุ่มสมาคมโปรแกรมเมอร์ไทย ที่เตือนเรื่องนี้ครับ]

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

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

(แต่ถ้าไม่พบ ก็ไม่ได้แปลว่าไม่มีนะครับ อาจจะแค่หาไม่เจอ)

ป้องกันคนมาดูภาพหรือไฟล์ที่ยังไม่พร้อมเผยแพร่

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

ถ้าเว็บเซิร์ฟเวอร์ใช้ Apache HTTP Server ก็ทำได้ด้วยการแก้ไขไฟล์ .htaccess โดยเพิ่มบรรทัด

Options -Indexes

ทีนี้ก็จะยังมีปัญหาอยู่บ้าง คือถ้าคนรู้ชื่อไฟล์ (อาจจะเดาไปเรื่อยๆ) เขาก็จะยังดูได้อยู่ดี

อันนึงที่ทำได้ก็คือ อย่าตั้งขึ้นไฟล์ให้มันเดาง่ายนัก (พวกรันเลขเรียงลำดับไปเรื่อยๆ นี่เดาสบายเลย)

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

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

Please do not leave the key in the lock

ปกปิดข้อมูลเว็บเซิร์ฟเวอร์

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

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

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

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

ยังไงก็ควรหมั่นอัปเดตรุ่นของซอฟต์แวร์ที่เขาแก้ไขเรื่องความปลอดภัยครับ

WordPress และ CMS อื่นๆ

ใครใช้เวิร์ดเพรส ลองดูหน้านี้ครับ มีอะไรที่พอทำตามได้บ้าง เช่นการตั้ง permission ของ directory ต่างๆ การปิดไม่ใช้แก้ไขไฟล์ของเวิร์ดเพรสผ่านหน้า dashboard ได้
https://codex.wordpress.org/Hardening_WordPress

คนใช้ Joomla, Drupal หรือ CMS อื่นๆ ลองเสิร์ชดูครับ ผมว่ามีแน่ๆ
https://docs.joomla.org/Security
https://www.keycdn.com/blog/drupal-security/

พอทำได้เบื้องต้นไปก่อน-แต่ในระยะยาวก็ต้องลงทุนน่ะ

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

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

คำเตือน

ผมไม่ใช่ผู้เชี่ยวชาญด้านนี้ ไม่ต้องมาถามผมเรื่องนี้ lol
ทั้งหมดนี้อาศัยจำจากเพื่อนๆ ที่เขาทำงานพวกนี้ และอ่านๆ เอาในเน็ตทั้งนั้น

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

ชุมชนความปลอดภัยเว็บ

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

https://www.facebook.com/groups/2600Thailand/
https://www.facebook.com/groups/owaspthailand/

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

อีกกรุ๊ปในเฟซบุ๊กที่ก็เข้าไปถามได้เหมือนกัน คือกลุ่มสมาคมโปรแกรมเมอร์ไทยครับ กลุ่มนี้ใหญ่และหลากหลายครับ https://www.facebook.com/groups/ThaiPGAssociateSociety/

เพิ่มเติม

(เผยแพร่ครั้งแรกในเฟซบุ๊ก 1 พ.ค. 2018)

ภาพประกอบ “Key locker” โดย Jonathan O’Donnell สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบแสดงที่มา-อนุญาตแบบเดียวกัน

โดย bact ณ 5 May 2018 16:19 +0700

เก็บตกวันแรงงาน #MayTheForthBeWithYou #8hourday

“By extending the working day, therefore, capitalist production…not only produces a deterioration of human labour power by robbing it of its normal moral and physical conditions of development and activity, but also produces the premature exhaustion and death of this labour power itself.”
Karl Marx

Socialists in Union Square, N.Y.C., 1 May 1912
Socialists in Union Square, N.Y.C., 1 May 1912

(เผยแพร่ครั้งแรกในเฟซบุ๊ก 4 พ.ค. 2018)

 

โดย bact ณ 5 May 2018 15:32 +0700

29 April 2018

bact

Timeline of SIM registration in Thailand + Notes on regulatory impact assessment

เวียดนามกำลังวางแผนจะให้ลงทะเบียนซิม – ตอนเย็นนักข่าวบีบีซีเวียดนามขอสัมภาษณ์เรื่องนี้ เขาอยากรู้ประสบการณ์เมืองไทย เลยกดๆ หาข้อมูลเร็วๆ เอาโน๊ตมาแชร์กันครับ (พูดไม่หมดหรอกนะ โดยเฉพาะตอนท้ายเรื่อง RIA) เคยเขียนเรื่องนี้ไว้สองปีที่แล้ว (ประวัติกฎหมายลงทะเบียนซิมใน 3 จังหวัดภาคใต้ [2548 – ยุคก่อนประกาศกสทช.]) อันนี้เหมือนเป็นอัปเดต+ความเห็นเพิ่มเติม

Vietnam is about to adopt mandatory SIM registration policy. Last Friday, BBC Vietnamese interview me for background and thoughts on SIM registration in Thailand. This is my rough notes for the interview. For more details on this, from the beginning in 2004 up until 2013, see this blog post (in Thai).

Rational

In general, Thai government and the telecom regulator (National Broadcasting and Telecommunications Commission – NBTC) put concerns on criminal activities (like identity fraud) and on terrorism (like using phone call to activate bombs).

History

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

Cases

Recent cases related to personal data breach/fraud

Assessment

Question on the policy. Should there be a Regulatory Impact Assessment (RIA) for a public policy with wide impact like this?

Some thoughts…

WITHOUT SIM registration:

WITH SIM registration:

Last Point

Do we pay the high prices of our personal data for, in the end, low or no benefits at all?

โดย bact ณ 29 April 2018 06:45 +0700

28 April 2018

bact

อุตสาหกรรมไอทีล้มเหลวที่จะปกป้องผู้ใช้ เพราะเรา move fast and break things?

“Move fast and break things. Unless you are breaking stuff, you are not moving fast enough”

— Mark Zuckerberg

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

การสร้างของที่ “ดีพอ” (good enough) เอาล่ะพอใช้ได้แล้ว แล้วเอาไปใช้ก่อน เสียก็ซ่อม ผิดก็แก้ไข เมื่อก่อนมันไม่ค่อยมีปัญหา เพราะเทคโนโลยีมันมาเกี่ยวกับชีวิตคนเราน้อย – ข้อผิดพลาดในการคำนวณเลขทศนิยมในซีพียูเพนเทียมไม่ได้ทำให้ใครตาย (อย่างน้อยก็ไม่มีบันทึกเอาไว้) เล่นเกมแล้วติดบั๊ก ไอเท็มไม่ออก ก็ไม่ได้ทำให้ใครเสียหาย (แม้จะอารมณ์เสีย)

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

Move Fast and Break Things.

“Move fast and break things.” (ให้แปลก็คงทำนองว่า พุ่งให้เร็ว ใส่ไม่ยั้ง พังไม่เป็นไร) เป็นคำขวัญที่โด่งดังของเฟซบุ๊ก เป็นหลักคิดที่ดีเพื่อการสร้างนวัตกรรม ทดลองทำ ดูว่าใช้ได้หรือไม่ เก็บข้อมูล ตรงไหนไม่ดีก็ทำใหม่ ทำซ้ำวนรอบไปเรื่อยๆ

ฟังดูโอเค แต่ถ้าเมื่อใดมันเป็นเรื่องที่จะกระทบกับสาธารณะ คุณทำแบบนี้คนจะเจ็บเยอะ มันไม่ควร โน่นครับ ไปทำใน sandbox ก่อนดีไหม เพื่อจำกัดความเสียหาย

ถ้า things ที่จะถูก break เป็น status quo หรือเป็นวิธีการทำธุรกิจแบบเก่าๆ น่ะ break ไปเถอะครับ break คนที่โดยเปรียบเทียบแล้วมีอำนาจมากกว่า

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

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

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

อ้อ เฟซบุ๊กเปลี่ยนคำขวัญแล้วตั้งแต่ปี 2014 มาใช้ของใหม่ว่า “Move fast with stable infrastructure.”

(โพสต์ครั้งแรกในเฟซบุ๊ก 12 เม.ย. 2018)

โดย bact ณ 28 April 2018 21:12 +0700

ประชารัฐ? มีบริการสาธารณะอะไรบ้างไหม ที่ไม่ควรให้เอกชนทำ?

“TurboTax’s powerful lobbying against tax simplification is a great example of what happens when tech is deployed to ‘solve’ a political problem.”

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

บทความ Why I’m boycotting TurboTax this year พูดถึงความพยายามของรัฐบาลสหรัฐที่จะออกกฎหมายสร้างระบบให้ประชาชนไม่ต้องกรอกแบบฟอร์มภาษีหรือกรอกให้น้อยที่สุด และความพยายามล็อบบี้โดยบริษัทซอฟต์แวร์ช่วยกรอกแบบฟอร์มภาษีที่จะไม่ให้กฎหมายดังกล่าวผ่าน

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

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

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

บทความวิชาการนี้น่าสนใจ

Pasquale, Frank A., A Rule of Persons, Not Machines: The Limits of Legal Automation (March 6, 2018). George Washington Law Review, Forthcoming; U of Maryland Legal Studies Research Paper No. 20018-08. Available at SSRN: https://ssrn.com/abstract=3135549

(โพสต์ครั้งแรกในเฟซบุ๊ก 15 เม.ย. 2018)

ภาพประกอบ “Tabletop Assistant” โดย Matthew Hurst สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบแสดงที่มา-อนุญาตแบบเดียวกัน

โดย bact ณ 28 April 2018 20:33 +0700

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

เมื่อวานคุยกับมิตรสหายท่านหนึ่ง นึกออกมาเร็วๆ ได้ว่า

การทำหน้าที่พลเมืองในส่วนของตัวเองให้เต็มที่ นี่เหมือนกับการเขียนโค้ดให้มันดีที่สุด

แต่สุดท้ายมันจะดีได้ถึงแค่จุดๆ หนึ่ง

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

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

(โพสต์ครั้งแรกในเฟซบุ๊ก 28 เม.. 2018)

โดย bact ณ 28 April 2018 20:15 +0700

Science Communication สื่อสารวิทยาศาสตร์ให้สาธารณะเข้าใจ

สิ่งที่ทำให้วงการวิทยาศาสตร์ในต่างประเทศก้าวหน้า ไม่ใช่เพียงทรัพยากรในการพัฒนาตัวความรู้ แต่มีเรื่องของการสื่อสารความรู้ด้านวิทยาศาสตร์สู่สาธารณะด้วย

….

ในไทยเห็นเพจ Science Communication Thailand สื่อสาระวิทยาศาสตร์ไทย พูดถึงวิชา Science Storytelling ที่บางมด ก็น่าสนใจดี เหมือนจะเป็นการเอานักวิทยาศาสตร์มาเล่าเรื่อง?

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

บางที่หลักสูตรพวกนี้ก็ไปอยู่ในคณะวิทยาศาสตร์ บางทีก็คณะวารสารศาสตร์/นิเทศศาสตร์

….

เว็บไซต์ Knight Science Journalism at MIT https://ksj.mit.edu/ รวมทรัพยากรและสถานศึกษาเกี่ยวกับเรื่องนี้ไว้ ใครสนใจไปกดดูได้ครับ (อยู่ในหน้า Resources)

(โพสต์ครั้งแรกในเฟซบุ๊ก 28 เม.ย. 2018)

โดย bact ณ 28 April 2018 19:02 +0700

25 April 2018

Thep

Fonts-TLWG 0.6.5

Fonts-TLWG 0.6.5 ออกแล้ว โดยมีความเปลี่ยนแปลงที่สำคัญคือการแก้บั๊กของฟอนต์ Laksaman เมื่อใช้กับเอกสาร LaTeX โดยผมได้รับรายงานปัญหานี้จาก อ. กิตติพิชญ์ มีสวาสดิ์ ในการประชุม โสเหล่ ของ KKLUG เมื่อเดือนมีนาคมที่ผ่านมา

อาการคือ คำที่มี ff, ffi, ffl จะไม่มี ligature สามชุดนี้ปรากฏ ผมสร้างเอกสารทดสอบ โดยในข้อความแต่ละชุด บรรทัดแรกจะป้อนข้อความปกติ ส่วนบรรทัดที่สองจะเลี่ยง ligature:

if iff film flow difficult affluent

if if{}f f{}ilm f{}low dif{}f{}icult af{}f{}luent

ผลลัพธ์คือ:

Laksaman bug on LaTeX

สังเกต ligature ที่หายไปในบรรทัดแรกของข้อความแต่ละชุด

ในฟอนต์ต้นทาง คือ TH Sarabun New นั้น มี ligature ของละตินมาให้เพียงสองตัว คือ fi และ fl แต่ในกฎ LIGKERN ของ TeX จะใช้ทั้งหมด 5 ตัว โดยอีก 3 ตัวที่ยังขาดคือ ff ffi และ ffl เมื่อสร้าง glyph ทั้งสามตัวเพิ่มเข้าไปก็จะได้ผลลัพธ์ที่ควรจะเป็น:

Laksaman fixed for LaTeX

ผลข้างเคียงก็คือ ฟอนต์ Laksaman เมื่อใช้บนเดสก์ท็อปหรือบนเว็บจะมี ligature ครบกว่า TH Sarabun New ซึ่งความแตกต่างนี้ต้องสังเกตใกล้ ๆ อย่างละเอียดพอสมควร

ก่อนแก้:

Laksaman on Firefox, before

หลังแก้:

Laksaman on Firefox, after

ขอขอบคุณ อ. กิตติพิชญ์ ผู้ใช้ LaTeX ตัวจริงคนหนึ่งมา ณ ที่นี้ ที่จับบั๊กนี้ได้ครับ

นอกจากนี้ยังมีความเปลี่ยนแปลงอื่น ๆ คือ:

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

ส่วนบนเดสก์ท็อปนั้น ก็ได้อัปโหลด 1:0.6.5-1 เข้า Debian เรียบร้อยแล้วครับ

โดย Thep (noreply@blogger.com) ณ 25 April 2018 04:52 +0700

23 April 2018

Thep

libdatrie 0.2.11

libdatrie 0.2.11 ออกแล้ว หลังจากที่ไม่ได้ออกรุ่นมาเลยถึงสองปีครึ่ง และนับเป็น release แรกของ libdatrie ที่ออกจาก github หลังจากที่ปล่อยให้แพกเกจอื่น ๆ ทยอยออกรุ่นกันไปเยอะแล้ว

รุ่นนี้มีความเปลี่ยนแปลงที่สำคัญนอกเหนือจากการย้ายมา Github คือ:

ถือว่ารุ่นนี้ได้รับ contribution จากผู้ใช้ค่อนข้างหลากหลาย โดยเฉพาะการช่วยวิเคราะห์ปัญหาที่น่าประทับใจ และได้รู้เพิ่มเติมว่ามีการใช้งาน libdatrie กับ PHP ด้วย

และเช่นเคย upload 0.2.11-1 เข้า Debian เรียบร้อยแล้ว พร้อมความเปลี่ยนแปลงอื่น ๆ เพิ่มเติม เช่น การรองรับการ build ที่ไม่ต้องใช้ (fake)root

โดย Thep (noreply@blogger.com) ณ 23 April 2018 15:52 +0700

9 April 2018

Kitt

สงกรานต์ ๒๕๖๑

สงกรานต์ปี 2561 เป็นปี จ.ศ. (2561 – 1181) = 1380 วันเถลิงศก ตรงกับ (1380 * 0.25875) + floor(1380 / 100 + 0.38) - floor(1380/ 4 + 0.5) - floor(1380 / 400 + 0.595) - 5.53375 = 357.075 + 14 - 345 - 4 - 5.53375 = 16.54125 = วันที่ 16 เมษายน 2561 เวลา 12:59:24 วันสงกรานต์ ตรงกับ 16.54125 … Continue reading สงกรานต์ ๒๕๖๑

โดย kitty ณ 9 April 2018 13:19 +0700

15 March 2018

Kitt

A command for Pi Day

Well, the command is … $ date -u '+%-m.%d%-H%M%S' If you execute at the right time, you get this:

โดย kitty ณ 15 March 2018 08:59 +0700

19 February 2018

bact

ทดลอง Tesseract 4.0alpha กับภาษาไทย

Tesseract เป็นซอฟต์แวร์และไลบรารีแปลงภาพข้อความ (ที่คนอ่านเข้าใจ) ให้เป็นข้อความ (ที่คอมพิวเตอร์อ่านเข้าใจ) หรือที่เรียกกันว่า OCR

สาเหตุที่ Tesseract ได้รับความนิยม เพราะมันเป็นซอฟต์แวร์เสรี (free software ไม่ต้องจ่ายเงิน มีซอร์สโค้ดให้ดูและแก้ไขเผยแพร่ต่อได้ และประสิทธิภาพมันก็ดี จะเรียกใช้ตรงๆ ทาง command line ก็ได้ หรือจะเขียนโปรแกรมเชื่อมกับ API มันก็ได้ — ดู wrapper และ GUI อื่นๆ ได้ที่หน้า Add Ons ของโครงการ

ภาพที่จะส่งมา Tesseract ต้องเป็นภาพที่ปรับแต่งมาให้เหมาะกับการอ่านข้อความแล้ว คือหมุนมาค่อนข้างตรง และปรับแสงและสีให้อ่านง่าน พื้นหลังสีขาวหรือสีอ่อน ตัวอักษรสีดำ ใน StackOverflow มีคนอธิบายการใช้ OpenCV ปรับภาพเพื่อ OCR เอาไว้

Tesseract รองรับภาษาไทย (น่าจะตั้งแต่รุ่น 3) ตอนนี้รุ่น 4 กำลังจะออก เพิ่มเอนจินที่ใช้โมเดล Deep Learning แบบ LSTM เข้ามา เท่าที่ทีมพัฒนาทดสอบกันเอง มีข้อผิดพลาดน้อยกว่าเอนจินของรุ่นก่อน

โพสต์นี้จะพูดถึงการทดสอบรุ่น 4.0alpha บน macOS และทดลองเพิ่ม/ลดคำในรายคำศัพท์ที่ตัวเอนจิน LSTM จะเอาไปใช้

ส่วนใครจะใช้รุ่นที่ released แล้ว ติดตั้งด้วยวิธีปกติของแต่ละระบบปฏิบัติการได้นะครับ วิธีตามเอกสาร

ติดตั้งไลบรารีที่จำเป็น

brew install autoconf-archive leptonica icu4c pango

ไลบรารี icu4c (เอาไว้จัดการ Unicode) กับ pango (จัดการการวาดตัวอักษร) ติดตั้งเฉพาะถ้าเราต้องการฝึกโมเดลใหม่

อาจจะมีไลบรารีอื่นที่ต้องใช้เพิ่มเติม ลองอ่านที่ configure มันแจ้ง และติดตั้งตามที่มันบอกครับ

ICU ที่มากับ macOS ไม่มีไฟล์ header มาด้วย ดังนั้นใช้คอมไพล์ไม่ได้ ต้องลงใหม่ครับ

ตั้งค่า environment

ในไฟล์ ~/.bash_profile

export PATH="/usr/local/opt/icu4c/bin:$PATH"
export PATH="/usr/local/opt/icu4c/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/icu4c/lib"
export CPPFLAGS="-I/usr/local/opt/icu4c/include"

อันนี้ผมใช้ brew ปกติของมันจะเอาไลบรารีและเฮดเดอร์ต่างๆ ไปไว้ที่ไดเรกทอรี /usr/local/opt/ ถ้าใครติดตั้งไว้ที่อื่นก็เปลี่ยนตามนั้นครับ

ดาวน์โหลดโค้ดและเตรียมคอมไพล์

โค้ด Tesseract ตัวล่าสุดอยู่ที่ https://github.com/tesseract-ocr/tesseract ก็ไปโคลนหรือฟอร์กมาได้เลย

จากนั้นในไดเรกทอรีของ tesseract เราก็สร้างไฟล์คอนฟิกเพื่อเตรียมคอมไพล์

./autogen.h

และ

./configure

จากนั้นก็คอมไพล์และติดตั้งตัว tesseract

make
make install

และคอมไพล์และติดตั้งตัวโปรแกรมสำหรับฝึกและแก้ไขรายการคำ

make training
make training-install

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

ใช้งาน Tesseract

การจะใช้งาน Tesseract ได้ ต้องมีไฟล์ข้อมูลภาษาให้มันด้วย ซึ่งดาวน์โหลดได้จาก https://github.com/tesseract-ocr/tessdata_best และ https://github.com/tesseract-ocr/tessdata_fast ตัวแรกจะแม่นกว่า ตัวหลังจะเร็วกว่า

โมเดลภาษาไทยชื่อ tha.traineddata
โมเดลภาษาอังกฤษชื่อ eng.traineddata

ตัวอย่างการเรียกใช้งานจาก command line:

tesseract input.png output --oem 1 -l tha -c preserve_interword_spaces=1 --tessdata-dir ./tessdata_best/

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

แก้ไขไฟล์ wordlist

ไฟล์ tha.traineddata จริงๆ ข้างในมีข้อมูลอยู่หลายประเภท เราสามารถแตกมันออกมาเป็นไฟล์ย่อยๆ ได้

combine_tessdata -u ./tessdata_best/tha.traineddata ./tessdata_TEST/tha.

จะได้ไฟล์ unicharset และไฟล์ dawg (Directed Acyclic Word Graphs) ออกมา ซึ่งจากไฟล์เหล่านี้ เราใช้สร้างรายการคำศัพท์ได้

dawg2wordlist ./tessdata_TEST/tha.lstm-unicharset ./tessdata_TEST/tha.lstm-word-dawg ./tessdata_TEST/tha.lstm-word-list

พอได้รายการคำศัพท์มาแล้ว เราแก้มันได้ด้วย text editor ทั่วไปเลย — 1 บรรทัด 1 คำ

พอแก้ไขเสร็จแล้ว ก็ทำกลับกัน คือแปลงรายการคำศัพท์ให้เป็น unicharset และ dawg

wordlist2dawg ./tessdata_TEST/tha.lstm-word-list ./tessdata_TEST/tha.lstm-word-dawg ./tessdata_TEST/tha.lstm-unicharset

และรวมทั้งหมดเข้าด้วยกันเป็นไฟล์ traineddata เพื่อเอาไปใช้งานกับ tesseract

combine_tessdata ./tessdata_TEST/tha.

เราสามารถลองใช้โมเดลใหม่นี้ได้โดยบอก tesseract ผ่านพารามิเตอร์ –tessdata-dir ให้มาใช้ข้อมูลในไดเรกทอรีนี้

(วิธีการจัดการกับไฟล์คำศัพท์นี้ ขอบคุณ Shreeshrii ที่ช่วยอธิบายอย่างละเอียด)

ผลการทดสอบ

เท่าที่ทดสอบเร็วๆ การ preprocess ประมวลภาพก่อนจะส่งให้ Tesseract มีผลมาก แค่ปรับภาพจากสีเป็นขาวดำ ก็ทำให้อ่านข้อความได้เพิ่มขึ้น และยิ่งเราตัด (crop) ภาพมาเฉพาะส่วนที่มีข้อความ มันก็จะแม่นขึ้นอีก อย่างไรก็ตามการ postprocess อย่างการทำ spellcheck แก้คำผิด ก็ยังจำเป็นอยู่ ถ้าต้องการความแม่นยำที่เพิ่มขึ้นครับ

ด้านล่างเป็นผลทดสอบด้วยโมเดลจาก tessdata_best โดยไม่ได้ปรับแต่งอะไรเพิ่ม

Pantip on Facebook Color - read with Tesseract
ภาพจากสื่อสังคม (ไม่ได้ preprocess เลย) เมื่อทดสอบอ่านด้วย Tesseract
Pantip on Facebook Black and White - read with Tesseract
ภาพจากสื่อสังคม (ปรับสีเป็นขาวดำ) เมื่อทดสอบอ่านด้วย Tesseract
Pantip on Facebook Black and White, Cropped - read with Tesseract
ภาพจากสื่อสังคม (ปรับสีเป็นขาวดำและตัดมาเฉพาะส่วนที่เป็นข้อความ) เมื่อทดสอบอ่านด้วย Tesseract

ใครลองเล่นแล้วได้ผลอย่างไรบอกกันได้ครับ

โดย bact ณ 19 February 2018 06:50 +0700

22 January 2018

bact

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

ไลบรารี/เฟรมเวิร์กสำหรับการทำให้แอป/เว็บไซต์รองรับหลายภาษา/วัฒนธรรม หรือที่เรียกว่า “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/

สำหรับ Ruby on Rails มีตัวนี้อีกตัว https://github.com/fnando/i18n-js คุณ Vittayasak Rujivorakul แนะนำมา

จบดื้อๆ แค่นี้ มีอะไรไปคุยกันได้ในเฟซบุ๊กกรุ๊ป สมาคมโปรแกรมเมอร์ไทย ครับ https://www.facebook.com/groups/ThaiPGAssociateSociety/

โพสต์(อาจจะ)ที่เกี่ยวข้อง

โดย bact ณ 22 January 2018 13:16 +0700

13 January 2018

bact

National Digital ID

Aadhaar เป็นระบบยืนยันตัวตนแห่งชาติของอินเดีย ดูแลโดยหน่วยงานชื่อ UIDAI (Unique Identification Authority of India) ถ้าจะเทียบกับของไทยตอนนี้ก็คือโครงการ National Digital ID

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

แต่ก็นั่นแหละ ตั้งแต่เปิดใช้มา มีข่าวเจ๊ง หลุด รั่ว ล่ม แทบทุกสัปดาห์ (ลองดูข่าวที่ Software Freedom Law Centre, India และ Centre for Internet and Society รวบรวมมา) และปัญหาที่เกิด ไม่ได้มีเพียงปัญหาทางเทคโนโลยี แต่มีปัญหาที่เกิดระหว่างชิ้นส่วนที่เอามาประกอบกันด้วย และรูรั่วอีกมาจากคนหรือระบบการทำงานขององค์กร

Sunil Abraham จากศูนย์ Centre for Internet and Society ที่อินเดีย เขียนไว้น่าสนใจว่ามันอาจจะเกิดความผิดฝาผิดตัวในสมมติฐานการออกแบบระบบ

“This is because the digital identity solution for the nation as conceived by Aadhaar architects is based on the problem statement of digital identity within a firm. Within a firm all internal entities can be trusted. But in a nation state you cannot make this assumption.”

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

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

ก็เรียนรู้จากบทเรียนในอดีตของเรา กับบทเรียนในปัจจุบันของประเทศอื่นกันไปครับ

ใครสนใจโครงการ Digital ID Platform ของไทย เชิญได้ที่เว็บไซต์ www.digitalid.or.th ครับ มีร่าง White Paper ให้โหลดไปอ่านด้วย นอกจากนี้ยังมีกิจกรรม open forum อยู่เป็นระยะ ถ้าสนใจเข้าร่วมก็ติดต่อทีมงานได้ครับ ข่าวสารส่วนหนึ่งเผยแพร่ทางเฟซบุ๊กด้วยที่เพจ National Digital ID

 

โดย bact ณ 13 January 2018 12:10 +0700

11 January 2018

bact

ตรวจสอบการจัดหาข้อมูลเข้าสำหรับระบบปัญญาประดิษฐ์

โมเดลหนึ่งในการพิจารณาการเลือกปฏิบัติของอัลกอริทึม แบ่งการพิจารณาออกเป็นส่วนๆ ดังนี้
Input -> Process -> Output(2) นี่มันอาจจะเป็นเหมือนกล่องดำ คือไม่สามารถบอกได้ชัดๆ ว่าเครื่องมันตัดสินใจอย่างไร การจะไปประเมินไปตรวจสอบก็ทำลำบาก

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

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

เป็นไปได้ไหมว่า ปัญญาประดิษฐ์มันสามารถตัดสินใจเกี่ยวกับข้อมูลเข้าได้ด้วย ว่าจะเลือกข้อมูลชนิดไหนเข้ามา ด้วยปริมาณเท่าไหร่

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

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

ถ้าเป็นแบบนี้ การประเมิน “ข้อมูลเข้า” (1) อย่างเดียวก็จะไม่พอไหม ต้องประเมิน “การจัดหาข้อมูลเข้า” (0) ด้วยอีกที?

ก่อนหน้านี้มันเป็น คอมเล่มเกมกับคอมกันเอง เพื่อฝึกฝน
ต่อไปมันจะเป็น คอมสร้างเกมขึ้นมาให้คนเล่นตามเกมนั้น เพื่อฝึกฝน

Collect -> Input -> Process -> Output

โดย bact ณ 11 January 2018 15:59 +0700

9 January 2018

Thep

Thanks for the Last Year

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

ขอขอบคุณผู้สนับสนุนดังนี้:

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

สำหรับปีที่ผ่านมา นอกจากงานยืนพื้นที่ผมแวะเวียนมาทำอยู่ตลอดเมื่อมีโอกาส คืองานแปล Xfce แล้ว ในช่วงปลายปีราวเดือนกันยายนเป็นต้นมา ผมถูกกระตุ้นด้วย issue จำนวนหนึ่งในโครงการ fonts-tlwg จากคุณ Abhabongse Janthong จนได้ออกรุ่น 0.6.4 ประเดิมเป็นงานแรกของปี แล้วก็ตามมาด้วย fonts-sipa-arundina 0.2.2 ที่หยิบยืมแพตช์ของคุณ Abhabongse มาใช้ด้วย

จากนั้นก็ติดลมมาถึงซีรีส์ของ libthai ที่ได้ทำสะสมมาตลอดปี ได้เป็นรุ่น 0.1.27 แล้วก็เอา word list ที่ได้ไปปรับใส่ใน TeX hyphenation และออก swath 0.6.0 พร้อมกับการปรับกลไกภายในขนานใหญ่ของตัวตัดคำของ swath เอง

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

โดย Thep (noreply@blogger.com) ณ 9 January 2018 05:22 +0700

8 January 2018

bact

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

ในหนังสือ Algorithms to Live By: The Computer Science of Human Decisions มีอยู่ตอนหนึ่งที่ยกตัวอย่างน่าสนใจดี (ได้จำเอาไปคุยกับนักศึกษาวิชา Computer Ethics and Law ที่ลาดกระบังด้วย)

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

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

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

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

ต่อให้เราเจออาหารมันๆ แต่มันอาจจะไม่ได้มันจากไขมันที่ร่างกายเอาไปใช้ประโยชน์ได้

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

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

การประกันคุณภาพหรือการป้องกันการทุจริตด้วยการตั้ง KPI ตั้งตัวชี้วัดต่างๆ นานาขึ้นมา ก็น่าจะคิดถึงเรื่องนี้ด้วย

ว่าเรากำลังจะมองหาคุณสมบัติเฉพาะบางอย่างที่มันมีประโยชน์กับงานจริงๆ โดยมองผ่านทางตัวชี้วัด

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

โดย bact ณ 8 January 2018 06:07 +0700

31 December 2017

bact

Consumer information security tools – Thai localization 2017 summary

การแปลโปรแกรมรักษาความปลอดภัยในการใช้คอมใช้เน็ต สำหรับผู้ใช้ทั่วไป สรุปสิ้นปี 2017

Thanks COCONET: Southeast Asia Digital Rights Camp and Localization Lab for a localization sprint this year for Thai, Bahasa Indonesia, Burmese, and Khmer. Events like that help volunteer translators get connected to people who close to developers, and it helps the translation submission goes more smooth.

รอผู้พัฒนาดำเนินการต่อ

แปล 100% รีวิว 100% รอให้าทางผู้พัฒนาทดสอบการใช้งานในแอป

A chart showing that Signal on Android 100% translated to Thai

ยังแปลไม่เสร็จ

รอให้ทางโครงการเพิ่มภาษาไทย

สำหรับโปรแกรมที่อยู่บน Transifex แล้ว ใครสนใจช่วยแปล สามารถสมัครสมาชิก Transfex (ฟรี) แล้วไปที่หน้าโครงการ กด Join Team ได้เลยครับ — ถ้าโปรแกรมเหล่านี้เป็นภาษาไทย ก็มีโอกาสที่คนไทยจะสามารถใช้โปรแกรมช่วยความปลอดภัยเหล่านี้ได้มากขึ้นครับ

สวัสดีปีใหม่ 2018 ทุกท่าน ขอให้เป็นปีที่ปลอดภัย คิด ทำ พูด ได้อย่างมั่นใจ 🙂

โดย bact ณ 31 December 2017 11:17 +0700

16 December 2017

Kitt

พิธีพระราชทานปริญญาบัตร มข. พ.ศ. ๒๕๖๐

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

โดย kitty ณ 16 December 2017 11:42 +0700

1 December 2017

Thep

swath 0.6.0

swath 0.6.0 ออกแล้วเมื่อวันก่อน โดยมีลำดับความต่อเนื่องนับจากการปรับพจนานุกรมใน libthai 0.1.27 ดังนี้:

แต่การปรับพจนานุกรมตัดคำก็เป็นแค่น้ำจิ้มสำหรับ swath รุ่นนี้ เพราะมีการปรับซอร์สโค้ดตามที่เคยทำมาต่อไป โดยในครั้งนี้เป็นครั้งแรกที่ล้วงเข้าไปปรับกลไกภายในของการตัดคำ หลังจากที่รุ่นก่อน ๆ ทำแค่ส่วน command line parsing และ input/output filter ต่าง ๆ เท่านั้น

สรุปความเปลี่ยนแปลงที่สำคัญคือ

ด้วยความเปลี่ยนแปลงขนานใหญ่ในกลไกภายใน จึงได้ปรับเลข minor version แทนที่จะปรับแค่ micro version โดยเปลี่ยนจากซีรีส์ 0.5.x ขึ้นเป็น 0.6.0

ในส่วนของ Debian upload ก็ได้เพิ่ม test suite สำหรับ autopkgtest ในทำนองเดียวกับ libthai ด้วย

โดย Thep (noreply@blogger.com) ณ 1 December 2017 10:11 +0700

17 November 2017

Ott

คุณเป็นผู้นำหรือผู้ตาม?


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



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

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

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

หากท่านต้องการเป็นผู้ตามที่ดี ก็ต้อง

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

โดย Pattara Kiatisevi (noreply@blogger.com) ณ 17 November 2017 17:41 +0700

25 October 2017

Thep

LibThai 0.1.27 & Word Suggestion Channel

LibThai 0.1.27 ออกแล้ว โดยห่างจาก รุ่นที่แล้ว ถึง 10 เดือน ก็สมควรแก่เวลาปล่อยข้อมูลพจนานุกรมที่แก้ไขสะสมไว้ในช่วงเวลาดังกล่าว รวมถึงแก้ปัญหา reproducibility ที่ถูกจับโดยโครงการ Reproducible Builds ของ Debian

พูดถึงประเด็นหลังก่อน ปัญหา reproducibility ที่ตรวจพบก็คือ มีการ capture build path ลงใน document ที่สร้างด้วย doxygen ทำให้เนื้อหาที่ได้มีความแตกต่างเกิดขึ้นในกรณีที่ build path ต่างกัน ก็แก้ไขด้วยการ strip path prefix ออกเสีย

เกี่ยวกับเรื่องพจนานุกรมตัดคำ รุ่นนี้เพิ่มคำเข้ามา 175 รายการ ทำให้จำนวนคำเพิ่มจาก 24,294 คำในรุ่นที่แล้ว เป็น 24,469 คำในรุ่นนี้ โดยคำที่เพิ่ม แบ่งเป็น:

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

ในส่วนของ Debian upload นอกเหนือจากการปรับรุ่นของต้นน้ำแล้ว ก็ได้เพิ่ม test suite สำหรับ autopkgtest เพื่อรองรับ CI (Continuous Integration) Test ของ Debian โดยในการอัปโหลดแพกเกจอื่นที่เกี่ยวข้อง เช่น libdatrie ก็จะเพิ่มการรองรับนี้ต่อไปในอนาคตเช่นกัน

โดย Thep (noreply@blogger.com) ณ 25 October 2017 04:59 +0700

20 October 2017

Thep

Fonts-SIPA-Arundina 0.2.2

Fonts-SIPA-Arundina 0.2.2 ออกแล้ว รุ่นนี้ปรับปรุงความสามารถของ LaTeX package โดยดึงมาจาก Fonts-TLWG 0.6.4 สองเรื่อง คือ

นอกจากนี้ ยังมีรายการเปลี่ยนแปลงเล็กน้อยเกี่ยวกับ CTAN คือผมพยายามจะเปลี่ยนชื่อแพกเกจจาก fonts-sipa-arundina ให้เป็น fonts-arundina เพื่อความกระชับในการเรียก โดยได้ทำไปแล้วสองส่วน คือ ชื่อโครงการที่ GitHub และในชื่อแพกเกจ LaTeX ซึ่งผู้ใช้สามารถเรียกใช้ด้วยคำสั่ง \usepackage{fonts-arundina} ได้

ส่วนที่ทำเพิ่มในรุ่นนี้ก็คือ การเปลี่ยนชื่อไดเรกทอรีที่ CTAN จาก /fonts/thai/fonts-sipa-arundina ให้เป็น /fonts/thai/fonts-arundina เฉย ๆ เพื่อให้สอดคล้องกับชื่อแพกเกจจริง รวมทั้งเปลี่ยนชื่อ source directory ใน CTAN ZIP file ด้วย

ส่วนที่ยังเหลือ คือ ชื่อ Debian package และ ชื่อ FTP directory ที่ LTN ซึ่งทั้งสองส่วนยังเกี่ยวพันกันอยู่ และการเปลี่ยนชื่อแพกเกจใน Debian จะมีรายละเอียดให้ทำพอสมควร เช่น การรอคิว NEW, การทำ package transition, การ clean config file เก่า ฯลฯ จึงยังคงชะลอไว้ก่อน จนกว่าจะมีเวลาเป็นเรื่องเป็นราวกว่านี้

เนื่องจาก LaTeX package ของฟอนต์ Arundina ยังไม่ได้เป็นส่วนหนึ่งของ TeXLive เหมือนกับชุด fonts-tlwg และเสิร์ฟให้ผู้ใช้ Debian ผ่านแพกเกจ latex-fonts-sipa-arundina โดยตรง ผู้ใช้ LaTeX ผ่าน Debian unstable จึงสามารถอัปเกรดและทดลองใช้ได้ทันที

โดย Thep (noreply@blogger.com) ณ 20 October 2017 08:03 +0700

8 October 2017

bact

ออกแบบ User Interface และ User Experience กรณีศึกษาฉลากโภชนาการแบบใหม่ของสหรัฐ

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

จะเห็นว่ามีการปรับ interface การแสดงผล ทำให้ข้อมูลสำคัญอย่างปริมาณแคลอรีปรากฏเด่นขึ้น ดูได้ง่ายขึ้น มองแว๊บเดียวก็เจอเลยฉลากโภชนาการใหม่ของสหรัฐ

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

ตรงนี้คนทำงานต้องไม่ทำงานแค่ส่วนกราฟิกหรือการออกแบบ interface แต่ต้องไปทำความเข้าใจพฤติกรรมผู้บริโภคจริงๆ ด้วยหน่วยบริโภคใหม่ตามอย.สหรัฐ

ลองเปรียบเทียบกับของประเทศไทยในปัจจุบัน
ฉลากโภชนาการของไทย

ข้อมูลและภาพจาก Banana Post – อย.สหรัฐดีไซน์ป้ายข้อมูลสารอาหารใหม่ ปรับสูตรโภชนาการ แจ้งน้ำตาลที่ใส่เพิ่ม (ภาพ 2 ภาพแรกดัดแปลงมาจากภาพของ USFDA)

(วันนี้นั่งเคลียร์ Desktop เจอรูปนี้เลยเอามาอัปบล็อก เผื่อหาย / Banana Post ตอนนี้เหมือนไม่ค่อยได้อัป สงสัยบก.หายตัว ถถถถถ)

โดย bact ณ 8 October 2017 05:44 +0700

How to write good

Found on the internet.

Subset of Plain Language Humor at PlainLanguage.gov

1. Avoid alliteration always.
2. Prepositions are not words to end sentences with.
3. The passive voice is to be avoided.
4. Avoid cliches like the plague. They’re old hat.
5. It is wrong to ever split an infinitive.
6. Writers should never generalize.
Seven: Be consistent.
8. Don’t use more words than necessary. It’s highly superfluous.
9. Be more or less specific.
10. Exaggeration is a billion times worse than understatement.

More tips at PlainLanguage.gov

โดย bact ณ 8 October 2017 05:15 +0700

6 October 2017

Thep

Fonts-TLWG 0.6.4

Fonts-TLWG 0.6.4 ออกแล้วเมื่อวันก่อน โดยรุ่นนี้เป็นผลงานของคุณ Abhabongse Janthong ที่ได้รายงานบั๊ก 1 รายการ และขอเพิ่มฟีเจอร์อีก 1 รายการ ซึ่งเป็นเรื่องเกี่ยวกับ LaTeX ทั้งสองรายการ

Issue #1 เป็นปัญหาความไม่สมบูรณ์ของการกำหนดตระกูลฟอนต์เมื่อสลับภาษาใน Babel ทำให้คำสั่ง \normalfont ทำงานผิดพลาดเมื่อใช้ร่วมกับตัวเลือก sans ของแพกเกจ ซึ่งคุณ Abhabongse ก็ได้เสนอ Pull Request #2 เพื่อแก้ปัญหานี้

กล่าวคือ รุ่นนี้จะแก้ปัญหากรณีเช่นนี้:

\usepackage[sans]{fonts-tlwg}

...

ข้อความก่อน \normalfont ข้อความหลัง

ทั้ง ข้อความก่อน และ ข้อความหลัง ควรเป็นฟอนต์ sans-serif ทั้งคู่ ซึ่งรุ่นก่อนหน้านี้จะจัด ข้อความหลัง ด้วยฟอนต์ serif ซึ่งไม่ถูกต้อง

ส่วนอีกรายการหนึ่งคือ Pull Request #3 เพื่อเพิ่มตัวเลือก scale สำหรับกำหนดอัตราย่อ-ขยายของตัวอักษรตามต้องการ ซึ่งจะเป็นประโยชน์ในกรณีที่ใช้ฟอนต์ชุดนี้ร่วมกับภาษาอื่นที่ฟอนต์ขนาดไม่สมส่วนกัน กล่าวคือ ในรุ่นนี้ ผู้ใช้จะสามารถใช้ตัวเลือกเช่นนี้เพื่อขยายขนาดตัวอักษรขึ้น 30% :

\usepackage[scale=1.3]{fonts-tlwg}

เนื่องจากในรุ่นนี้ไม่มีความเปลี่ยนแปลงในเนื้อหาส่วนอื่นอีกนอกจากการรองรับ LaTeX ผู้ใช้จะได้พบสิ่งที่เปลี่ยนแปลง ก็จากแพกเกจ fonts-tlwg บน CTAN เท่านั้น ส่วน Debian upload นั้น ก็เป็นไปตามภาคบังคับเพื่ออัปเดตรุ่นและซอร์สโค้ด ผู้ใช้ Debian สามารถติดตามได้จากแพกเกจ texlive-lang-other ว่าจะดึง fonts-tlwg ตัวใหม่จาก CTAN มาเสิร์ฟเมื่อไร

สุดท้ายนี้ ขอขอบคุณคุณ Abhabongse Janthong สำหรับความคืบหน้าที่เกิดขึ้นในรุ่นนี้ครับ

โดย Thep (noreply@blogger.com) ณ 6 October 2017 06:41 +0700

1 October 2017

Kitt

Why Google Apps / G Suite for Education is free ?

ทุกครั้งที่บอกว่า G Suite for Education ฟรี พื้นที่ไม่จำกัด และ มข. ให้ใช้งานได้ไปตลอดชีวิต จะมีคำถามเสมอว่า “แล้ว Google เขาได้อะไร ?” คำตอบทางการ ของ Google น่าสนใจทีเดียว G Suite for Education is free. We plan to keep the core offering of G Suite for Education free. This offering includes user accounts for future incoming students. As you may know, Google was founded by a … Continue reading Why Google Apps / G Suite for Education is free ?

โดย kitty ณ 1 October 2017 08:17 +0700