Theppitak's blog

My personal blog.

25 เมษายน 2561

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 ตัวจริงคนหนึ่งมา ณ ที่นี้ ที่จับบั๊กนี้ได้ครับ

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

  • แปลงแฟ้มต้นฉบับของฟอนต์เป็นฟอร์แมตของ Fontforge รุ่นล่าสุด
  • ปรับ configure script ให้ตรวจรุ่นของ fontforge ตามรูปแบบเลขรุ่นที่เปลี่ยนไป จากแบบตัวเลขมาเป็นแบบวันที่
  • ย้ายที่ติดตั้งแฟ้ม fontconfig template ทั้งหลาย จาก /etc/fonts ไปไว้ที่ /usr/share/fontconfig ตามการเปลี่ยนแปลงใน fontconfig ล่าสุด
  • ปรับค่า TTFWeight ของฟอนต์น้ำหนักปกติทุกฟอนต์ให้เป็นค่า 400 (Regular) ทั้งหมด เนื่องจากบางฟอนต์ที่ยังมีค่าเป็น 500 (Medium) นั้น ทำให้แอปบางตัว (เช่นที่รายงานใน Issue #5 คือ EditPad) จัดฟอนต์ให้ไปอยู่ในกลุ่มตัวหนา

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

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

ป้ายกำกับ: ,

23 เมษายน 2561

libdatrie 0.2.11

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

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

  • ตรวจสอบ error จาก iconv() ได้ถูกต้องยิ่งขึ้น จากรายงานของ Daniel Macks ใน Issue #3
  • ปรับคำบรรยายแพกเกจใน README เนื่องจาก @flackbash ทักท้วงมาใน Issue #4 ว่า complexity ของการ search ของ trie เป็น O(m) เมื่อ m คือความยาวของคีย์ ไม่ใช่ O(1) เสียหน่อย ซึ่งอันที่จริง การอ้าง O(1) ก็เป็นเพียงการบอกว่า เวลาที่ใช้มันไม่ขึ้นกับขนาดของฐานข้อมูลเท่านั้น ในทำนองเดียวกับที่ hash table มักจะอ้าง compexity O(1) เหมือนกัน ทั้ง ๆ ที่เวลาที่ใช้ในการคำนวณค่า hash โดยปกติก็เป็น O(m) อย่างไรก็ดี ถูกทักท้วงมาเช่นนี้ก็แก้ไขตามนั้น แต่ยังคงเน้นว่ามันไม่ขึ้นกับขนาดของฐานข้อมูล
  • ปรับแก้การทำงานของ trie_state_get_data() ซึ่งเดิมทำงานไม่ถูกต้องในกรณีที่คีย์ที่ใช้ค้นนั้นเป็นส่วนต้นของคีย์อื่น (เช่น กา เป็นส่วนต้นของ การ) ซึ่งทำให้โครงการ pytries หันไปใช้วิธีเพิ่มฟังก์ชันใหม่ โดยส่งแพตช์มาให้ผมในเมลส่วนตัว ผมจึงแสดงความเห็นไปว่าน่าจะปรับแก้ฟังก์ชันเดิมให้ทำงานให้ถูกต้อง แทนที่จะเพิ่มฟังก์ชันใหม่ เรื่องเงียบไประยะหนึ่ง จนกระทั่งมีการผลักดันแพกเกจ python-datrie เข้า Debian (ITP) Andreas Tille จึงหันมากระทุ้งผมเรื่องนี้อีกครั้ง (Debian #894278) จนในที่สุดผมก็เลยแก้ปัญหานี้ (commit) และ Filip Pytloun ก็ได้ช่วยทดสอบให้ และปรับแก้ที่ pytries ให้
  • แก้ปัญหา segfault เมื่อใช้งานกับ alpha map แบบเต็มช่วง (0-255) โดย Xiao Wang รายงานใน Issue #6 ว่าเขาพบเมื่อใช้งานกับ PHP ซึ่งผมยังไม่มีเวลาไปตรวจสอบ จึงทิ้งช่วงมาจนกระทั่ง @nevermatch เข้ามาวิเคราะห์และชี้จุดผิดพลาดให้ ซึ่งผมก็ยังคง reproduce ไม่ได้อยู่ดี คือมันไม่ segfault แต่พบความผิดปกติตามที่เขาชี้จริง จึงถือว่ามีข้อมูลเพียงพอที่จะแก้ปัญหาได้แล้ว ซึ่งต้องขอขอบคุณทั้งสองท่านอย่างมากที่ช่วยตรวจสอบปัญหานี้ให้

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

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

ป้ายกำกับ:

hacker emblem