Theppitak's blog

My personal blog.

09 มกราคม 2561

Thanks for the Last Year

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

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

  • เดือนเมษายน 2560
    • คุณวิทยา ไตรสารวัฒนะ
  • เดือนมิถุนายน 2560
    • คุณวิทยา ไตรสารวัฒนะ
  • เดือนสิงหาคม 2560
    • คุณวิทยา ไตรสารวัฒนะ
  • เดือนธันวาคม 2560
    • คุณวิทยา ไตรสารวัฒนะ

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

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

ป้ายกำกับ:

01 ธันวาคม 2560

swath 0.6.0

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

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

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

  • ตัดตัวเลือก -l ซึ่งไม่มีเอกสารอธิบายว่าเอาไว้ทำอะไร
  • refactor dictionary ออกจากตัวตัดคำ ทำให้แยก lifetime ของพจนานุกรมออกจากตัวตัดคำ ซึ่งในอนาคตอาจเรียกตัวตัดคำซ้ำหลายครั้งได้โดยไม่ต้องเปิด dictionary ใหม่ หรือสามารถเรียกตัวตัดคำตัวเดิมซ้ำโดยเปลี่ยน dictionary ได้ เป็นต้น
  • simplify โค้ดของตัวตัดคำให้เข้าใจง่าย ลดความซับซ้อน ตัดส่วนที่ไม่จำเป็น รวมส่วนที่สามารถรวมได้
  • แก้ไขการทำงานของ longest matching scheme ที่เดิมทำงานไม่ถูกต้อง เพราะโค้ดทำงานง่ายเกินเหตุ ไม่มีการ backtrack ทำให้ได้คำตอบผิดพลาดในบางกรณี ในรุ่นนี้ได้แก้ให้ทำงานถูกต้องแล้ว (พร้อม test case สำหรับยืนยัน)
  • จัดระเบียบโค้ดยิบย่อยเพื่อความเป็นระเบียบ (ยังเหลือให้ปรับได้อีกในรุ่นถัด ๆ ไป)
  • ปรับแก้การใช้คำพูดใน manpage พร้อมกับการอ้างถึงโปรแกรม trietool ของ libdatrie แทน trietool-0.2 ซึ่งเป็นชื่อเก่า

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

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

ป้ายกำกับ:

25 ตุลาคม 2560

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 ก็จะเพิ่มการรองรับนี้ต่อไปในอนาคตเช่นกัน

ป้ายกำกับ:

20 ตุลาคม 2560

Fonts-SIPA-Arundina 0.2.2

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

  • ตัวเลือก sans เพื่อกำหนดให้ใช้ฟอนต์ sans-serif เป็นฟอนต์ปริยายของเอกสาร
  • ตัวเลือก scale=value เพื่อกำหนดอัตราย่อ-ขยายของตัวอักษร

นอกจากนี้ ยังมีรายการเปลี่ยนแปลงเล็กน้อยเกี่ยวกับ 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 จึงสามารถอัปเกรดและทดลองใช้ได้ทันที

ป้ายกำกับ: ,

06 ตุลาคม 2560

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 สำหรับความคืบหน้าที่เกิดขึ้นในรุ่นนี้ครับ

ป้ายกำกับ: ,

08 กุมภาพันธ์ 2560

Dell Inspiron 5468 with Debian Power

TL;DR แล็ปท็อปใหม่ของผม Dell Inspiron 5468 ใช้ CPU Intel Core i5-7200U, RAM 4 GB และ SSD 256 GB ติดตั้ง Ubuntu มาพร้อม นำมาติดตั้ง Debian Sid แบบ dual boot ใช้การได้ดี ยกเว้นมีปัญหา Wi-Fi, ไม่ชินกับปุ่ม PgUp/PgDn/Home/End, และเสียงไม่ออกหูฟังโดยอัตโนมัติเมื่อเสียบ

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

Spec ที่ต้องการ

  • CPU เพื่องานคอมไพล์โปรแกรมและการเปิดหน้าต่างหลายบานทำงานพร้อมกันเยอะหน่อย ผมจึงคิดว่าผมต้องการ Core i5 หรือ i7 เพื่อประโยชน์จาก Turbo Boost (ลิงก์ที่น่าสนใจ: Best Intel Processor: Core i3, i5, i7 explained)
  • การ์ดจอ ผมไม่ต้องการการ์ดจอที่แรงนัก ได้ Intel on-board ได้ยิ่งดี เพราะไม่ต้องไปวุ่นวายหาไดรเวอร์ที่ไม่โอเพนซอร์ส แต่พบว่าเครื่องรุ่นใหม่ ๆ โดยเฉพาะ CPU Core i5, i7 มักจะมาพร้อมการ์ดจอแยก (คงเพื่อให้ประสิทธิภาพกราฟิกส์สมน้ำสมเนื้อกับความแรงของ CPU) การเจาะจง Intel on-board จะจำกัดตัวเลือกลงมากจนหาซื้อไม่ได้เลยจากร้านใกล้บ้าน ถ้าเช่นนั้น AMD ก็เป็นทางเลือกที่น่าสนใจ เพราะทำให้ราคาถูกลง โดยประสิทธิภาพก็ไม่ได้แย่เกินไปนัก (Test 1, Test 2) และยังเป็นมิตรกับโอเพนซอร์สกว่า NVIDIA อีกด้วย
  • จอภาพ ต้องการจอ 14" เพื่อความสะดวกในการพกพา (15" เทอะทะเกินไป) แต่ไม่เล็กจนเกินไป (11", 13" เนื้อที่ทำงานน้อยเกินไป) ไม่เกี่ยงชนิดของจอ ไม่จำเป็นต้อง IPS
  • OS อาจจะดูแปลกสำหรับผู้ใช้ทั่วไป แต่ผมจะให้ความสนใจกับแล็ปท็อปรุ่นที่ไม่มีไลเซนส์วินโดวส์เป็นพิเศษ เพราะผมไม่ใช้วินโดวส์อยู่แล้ว ได้ไลเซนส์มาก็เปลืองเงินเฉย ๆ ยิ่งถ้าเป็นรุ่นที่มาพร้อมลินุกซ์เลย (เช่น Ubuntu) ยิ่งน่าสนใจ เพราะเท่ากับลดความเสี่ยงที่จะใช้กับลินุกซ์ไม่ได้ลงไปเยอะ แต่รุ่นที่ลง DOS มาให้ก็สนใจเป็นอันดับรองลงไปเช่นกัน

สี่อย่างนี้ ผมใช้เป็นตัว screen เบื้องต้น แล้วค่อยไปเช็กอย่างอื่นเป็นรายตัวไป เช่น RAM, ฮาร์ดดิสก์, พอร์ตต่าง ๆ ฯลฯ

Dell Inspiron 5468

ตัดฉับมาตอนที่ผมหิ้วเครื่องออกจากร้าน มันคือ Dell Inspiron 5468 โดยมี spec ดังนี้:

  • CPU: Intel Core i5-7200U (3 MB L3 Cache, 2.50 GHz)
  • Graphic card: AMD Radeon R7 M440 (2 GB DDR3)
  • Display: 14" HD (1366x768) anti-glare
  • Memory: 4 GB DDR4
  • Hard Drive: 256 GB SATA SSD (INTEL SSDSC2KF256H6)
  • OS Bundle: Ubuntu 16.04 LTS

รายละเอียดอื่น ๆ ดูได้จาก Dell แต่ในรุ่นนี้ มี CPU ให้เลือกสองแบบ คือรุ่น Core i5 และรุ่น Core i7 ราคาต่างกันอยู่ 3,000 บาท โดยรุ่น Core i5 นั้น ได้ SSD ขนาด 256 GB ในขณะที่รุ่น Core i7 ได้ HDD ขนาด 1 TB (5400 RPM) ผมเลือกรุ่น Core i5 เพราะ SSD เลยทีเดียว

รายละเอียดอื่น ๆ

  • DVD Writer: HL-DT-ST DVD+-RW GU90N
  • Wi-Fi: Qualcomm Atheros QCA9377 802.11ac
  • Ethernet: Realtek RTL8101/2/6E PCIe Gigabit Ethernet
  • Bluetooth: Qualcomm Atheros (ID 0cf3:e009)
  • SD Card Reader: Realtek RTS5129 (ID 0bda:0129)
  • Webcam: Realtek Integrated Webcam (ID 0bda:5684)

dump ข้อมูลที่เป็นประโยชน์สำหรับผู้ที่จะซื้อมาใช้กับลินุกซ์ดังนี้ (จัดบรรทัด output เล็กน้อยเพื่อให้อ่านง่าย):

$ lscpu

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 142
Model name:            Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
Stepping:              9
CPU MHz:               797.772
CPU max MHz:           3100.0000
CPU min MHz:           400.0000
BogoMIPS:              5424.00
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
  cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
  pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl
  xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl
  vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe
  popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch
  epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1
  avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec
  xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp

$ lspci

00:00.0 Host bridge: Intel Corporation Device 5904 (rev 02)
00:02.0 VGA compatible controller: Intel Corporation Device 5916 (rev 02)
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI
  Controller (rev 21)
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP
  Thermal subsystem (rev 21)
00:15.0 Signal processing controller: Intel Corporation Sunrise Point-LP Serial
  IO I2C Controller #0 (rev 21)
00:15.1 Signal processing controller: Intel Corporation Sunrise Point-LP Serial
  IO I2C Controller #1 (rev 21)
00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI
  #1 (rev 21)
00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller
  [AHCI mode] (rev 21)
00:1c.0 PCI bridge: Intel Corporation Device 9d10 (rev f1)
00:1c.4 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #5
  (rev f1)
00:1c.5 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #6
  (rev f1)
00:1f.0 ISA bridge: Intel Corporation Device 9d58 (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)
00:1f.3 Audio device: Intel Corporation Device 9d71 (rev 21)
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
01:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Topaz XT
  [Radeon R7 M260/M265 / M340/M360 / M440/M445] (rev 83)
02:00.0 Network controller: Qualcomm Atheros QCA9377 802.11ac Wireless Network
  Adapter (rev 31)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101/2/6E PCI
  Express Fast/Gigabit Ethernet controller (rev 07)

$ lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 0cf3:e009 Atheros Communications, Inc. 
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card
  Reader Controller
Bus 001 Device 003: ID 0bda:5684 Realtek Semiconductor Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

$ lsscsi

[0:0:0:0]    disk    ATA      INTEL SSDSC2KF25 D07N  /dev/sda 
[1:0:0:0]    cd/dvd  HL-DT-ST DVD+-RW GU90N    A1C1  /dev/sr0 

Ubuntu hardware certification ระบุว่า Ubuntu ที่ติดตั้งมาจากโรงงานมีปัญหา hibernate ไม่ได้ และ Bluetooth 4.0 HID ไม่ทำงาน แต่ก็รายงาน wireless adaptor เป็น Intel Wireless 3165 ในขณะที่ในเครื่องจริง ๆ เป็น Qualcomm Atheros QCA9377

เตรียมพาร์ทิชัน

เครื่องมาพร้อมกับ Ubuntu 16.04 LTS ติดตั้งไว้ โดยแบ่งพาร์ทิชันดังนี้:

$ fdisk -l /dev/sda

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   1026047   1024000   500M EFI System
/dev/sda2    1026048   7317503   6291456     3G Microsoft basic data
/dev/sda3    7317504 483756031 476438528 227.2G Linux filesystem
/dev/sda4  483756032 500117503  16361472   7.8G Linux swap

สองพาร์ทิชันแรก (sda1, sda2) ใช้สำหรับ UEFI boot พาร์ทิชันที่สาม (sda3) เป็น Ubuntu 16.04 LTS โดยเมานท์กับ / เพียงจุดเดียว และที่ท้ายดิสก์เป็นพาร์ทิชัน swap 7.8 GB (ประมาณสองเท่าของ RAM 4 GB)

หากจะติดตั้ง Debian โดยลบ sda3 ทิ้งไปเลยก็ย่อมได้ แต่เห็นว่า Ubuntu image ที่ติดตั้งมาจากโรงงานอาจพอมีประโยชน์สำหรับอ้างอิงอาการต่าง ๆ ที่อาจพบในอนาคต ระหว่าง config จากโรงงานกับที่เราติดตั้งเอง และอาจใช้ลอกการบ้านในกรณีที่มีปัญหากับฮาร์ดแวร์ได้ จึงตัดสินใจว่าจะหดพาร์ทิชัน Ubuntu แล้วสร้างพาร์ทิชันใหม่สำหรับ Debian และ /home

วิธีการที่ใช้คือ:

  1. ดาวน์โหลด Debian Installer จากหน้าโครงการ Debian-installer โดยผมเลือก Current daily snapshot สำหรับ amd64
  2. เขียน installer image โดยเสียบ USB flash drive เปล่า แล้วตรวจหา device file ของมันด้วยคำสั่ง dmesg แล้วไล่หาดูอุปกรณ์ล่าสุดใน log ซึ่งในกรณีของผมมันคือ /dev/sdb จากนั้นก็สั่งเขียน:
    # dd if=debian-testing-amd64-netinst.iso of=/dev/sdb
    
  3. เตรียม firmware โดยดาวน์โหลด firmware tarball จาก Debian cdimage มารอไว้เพื่อเขียนลง flash drive โดยจากขั้นตอนที่แล้ว ISO image ที่เขียนลงไปจะทำให้ใน flash drive จะมี 2 partition เกิดขึ้น พาร์ทิชันแรกใช้สำหรับบูต Debian installer และเราจะเขียน firmware ลงในพาร์ทิชันที่สอง โดยอาจจะแตก tarball ทั้งหมดลงไปเลย:
    # mount /dev/sdb2 /mnt
    # tar xzf firmware.tar.gz -C /mnt
    # umount /mnt
    
    หรือเลือกเฉพาะที่ต้องใช้สำหรับเครื่องนี้ คือ firmware-atheros และ firmware-realtek:
    $ tar xzf firmware.tar.gz
    # su
    Password:
    # mount /dev/sdb2 /mnt
    # cp firmware-atheros*.deb firmware-realtek*.deb /mnt
    # umount /mnt
    
  4. บูต Installer โดย disable secure boot เสียก่อน (ผมไม่แน่ใจว่า Debian installer สามารถบูตใน secure mode ได้หรือเปล่า แต่เนื่องจากผมมีเวลาไม่มาก จึงรวบรัดตัดตอน และเครื่อง Dell นี้ก็สามารถปิด secure boot ได้ โดยกด F12 ขณะเปิดเครื่องแล้วเซ็ต boot mode เป็น legacy mode คือ UEFI with secure boot OFF จากนั้นก็เซ็ต boot order ให้บูตจาก USB drive ก่อน internal HDD) เมื่อบูตเข้า Debian installer แล้ว ก็ตอบคำถามไปเรื่อย ๆ จนเสร็จขั้น load installer components แล้วหยุดอยู่แค่นั้น
  5. resize พาร์ทิชัน Ubuntu โดยกด Alt-F2 เพื่อไปที่ console ที่ 2 แล้วกด Enter เพื่อเข้า Busybox shell แล้วเริ่ม resize partition sda3 ตามขั้นตอนที่แนะนำใน หน้านี้ คือ:
    1. check file system
      # fsck /dev/sda3
      
    2. ปิด journal เพื่อเปลี่ยนพาร์ทิชัน ext4 ให้เป็น ext2
      # tune2fs -o ^has_journal /dev/sda3
      
    3. check file system อีกครั้งเพื่อจัดระเบียบบล็อคต่าง ๆ
      # e2fsck -f /dev/sda3
      
    4. resize file system ใน sda3
      # resize2fs /dev/sda3 15G
      
    5. resize ตัวพาร์ทิชัน sda3 ด้วย fdisk
      # fdisk /dev/sda
      
      โดยขั้นตอนที่ต้องทำคือ:
      1. ลบพาร์ทิชัน sda3 ด้วยคำสั่ง d
      2. เพิ่มพาร์ทิชัน sda3 กลับคืนด้วยขนาดใหม่ ด้วยคำสั่ง n
      3. เขียนตารางพาร์ทิชันลงดิสก์ ด้วยคำสั่ง w
      4. ออกจาก fdisk ด้วยคำสั่ง q

จากนี้ ระบบก็พร้อมแล้วสำหรับติดตั้ง Debian GNU/Linux สามารถกด Alt-F5 เพื่อกลับไป console ติดตั้งเพื่อทำงานต่อได้ หรือจะรีบูตเข้า installer อีกรอบเพื่อความแน่ใจก็ตามแต่

Debian GNU/Linux

เพื่อไม่ให้บล็อกนี้ยาวเกินไป ผมขอข้ามรายละเอียดการติดตั้ง Debian เอาเป็นว่า ผมเลือกติดตั้ง Xfce desktop เครื่องนี้จึงเป็นเครื่องที่ปลอด GNOME ยิ่งกว่าเครื่องก่อนที่อาจจะยังมีแพกเกจของ GNOME ตกค้างอยู่บ้างระหว่างย้ายมา Xfce

การใช้งานนับว่ารวดเร็วปรู๊ดปร๊าดกว่าเครื่องก่อนอย่างมโหฬาร SSD ทำให้อ่าน-เขียนดิสก์ได้เร็วแบบลื่นหัวแตก ความรู้สึกเหมือนสมัยใช้ RAM disk บน DOS ยังไงยังงั้น ใช้ aptitude upgrade/install/remove โปรแกรมได้สนุกสนาน ไม่ต้องรอนาน โหลด Firefox พร้อมประวัติและ bookmark ต่าง ๆ ที่ import มาจากเครื่องเก่าเสร็จภายใน 3 วินาที บ้าไปแล้ว! และเครื่องก็แทบไม่ร้อนเลยแม้จะเล่นวิดีโอยาว ๆ ทำให้พัดลมระบายความร้อนแทบไม่ได้ทำงานเลย นาน ๆ จะได้ยินสักครั้ง เป็นการใช้คอมพิวเตอร์ที่เงียบสนิทจนน่าตกใจ เมื่อเทียบกับเครื่องเก่า

ปัญหาที่พบ

ก่อนที่จะลงรายละเอียดที่เป็นความชอบส่วนตัว ผมขอบันทึกปัญหาที่พบเสียก่อน:

  • Wi-Fi หลุดบ่อยเมื่อใช้กับ access point ที่มีการเปลี่ยน bandwidth เป็นระยะ อ่าน syslog แล้ว พบว่ามีข้อความ firmware crash ซึ่งตรงกับรายงานใน Debian #839662 และ LP #1627474 คงต้องติดตามที่ upstream ว่ามีการแก้ไขอะไรอย่างไรบ้าง
  • แป้นพิมพ์วางปุ่ม PgUp/PgDn/Home/End ไว้ในปุ่มเดียวกับปุ่มลูกศร โดยให้กดปุ่ม Fn เพื่อเลือก ซึ่งการกดปุ่มประกอบเพิ่มอีกปุ่มทำให้ไม่สะดวกอย่างมาก
  • เสียงไม่ออกหูฟังโดยอัตโนมัติเมื่อเสียบ เสียงยังคงออกลำโพงของเครื่องตามปกติ ต้องไปเลือกอุปกรณ์เอาต์พุตใน audio mixer แบบ manual เอา (อาการใน Ubuntu หนักกว่า คือนอกจากเสียงจะไม่ออกหูฟังแล้ว ใน sound config ยังไม่มีรายการของหูฟังให้เลือกเลยด้วย)

ส่วนอื่น ๆ เช่น webcam, bluetooth ยังไม่ได้ทดสอบครับ ไว้ถ้ามีโอกาสค่อยว่ากันอีกที

การปรับแต่งซอฟต์แวร์

หัวข้อนี้เป็นการปรับแต่งซอฟต์แวร์สำหรับให้ตัวผมเองในอนาคตอ่าน ในกรณีที่ต้องเซ็ตเครื่องทำงานเครื่องใหม่

นอกจาก Xfce ปกติแล้ว ผมติดตั้งแพกเกจต่อไปนี้ของ GNOME เพิ่มเติม:

  • gucharmap เพื่อใช้ดู/ป้อนอักขระยูนิโค้ด
  • evince สำหรับเปิดเอกสาร PDF แม้ผมจะใช้ MuPDF เป็นหลัก แต่บางครั้งก็ต้องมี Evince ไว้สำรองเผื่อเหลือเผื่อขาด
  • eog แม้จะซ้ำซ้อนกับ ristretto ของ Xfce เพราะ ristretto ยังไม่สามารถสั่งหมุนภาพ 90 องศาได้ ซึ่งจำเป็นเวลานำเข้ารูปจากกล้องดิจิทัล

รายการปรับแต่งซอฟต์แวร์

  • Console:
    • ตั้งค่าใน /etc/default/keyboard:
      XKBLAYOUT="us,th"
      XKBVARIANT=",tis"
      XKBOPTIONS="grp:alt_shift_toggle,lv3:ralt_switch,terminate:ctrl_alt_bksp,\
      grp_led:scroll,ctrl:nocaps"
      
      ใช้ผังแป้นพิมพ์ มอก. 820-2538 พร้อม level 3 shift และเปลี่ยนปุ่ม CapsLock ให้เป็น Ctrl (ผมเคยอธิบายเหตุผลไว้ใน blog เก่า)
  • Xfce:
    • โปรแกรม > ตั้งค่า > ปรับละเอียดโปรแกรมจัดการหน้าต่าง:
      • สิ่งอำนวยความสะดวก > ปิดตัวเลือก เรียงหน้าต่างต่อชนโดยอัตโนมัติเมื่อย้ายไปชนขอบหน้าจอ
        ป้องกัน accidental maximization
      • พื้นที่ทำงาน > ปิดตัวเลือก ใช้การกลิ้งลูกกลิ้งเมาส์บนพื้นโต๊ะในการสลับพื้นที่ทำงาน
        ป้องกันความรำคาญจากการกลิ้งลูกกลิ้งเมาส์นอกหน้าต่างโดยบังเอิญ
    • โปรแกรม > ตั้งค่า > โปรแกรมจัดการหน้าต่าง:
      • โฟกัส > ยกเมื่อคลิก > ปิดตัวเลือก ยกหน้าต่างขึ้นเมื่อคลิกภายในหน้าต่างโปรแกรม
        เป็นความสะดวกส่วนตัว ที่บ่อยครั้งอยากดูเนื้อหาหน้าต่างหนึ่งเต็ม ๆ เพื่อใช้ประกอบการป้อนคำสั่งในอีกหน้าต่างหนึ่งที่เผยเฉพาะบริเวณที่ป้อนก็พอแล้ว ถ้าอยากดูเนื้อหาหน้าต่างที่ป้อนข้อความอยู่แบบเต็ม ๆ เมื่อไร ก็ค่อยไปคลิกที่กรอบหน้าต่างเอา
    • แอพเพล็ต สลับพื้นที่ทำงาน:
      • คุณสมบัติ > รูปปรากฏ > จำนวนแถว = 2
        เพื่อจัดวางพื้นที่ทำงานแบบ 2×2
    • โปรแกรม > ตั้งค่า > รูปลักษณ์:
      • สไตล์ = Greybird (จากแพกเกจ greybird-gtk-theme)
        เป็น theme ที่ทำให้วิดเจ็ตของ GTK+ 3 ไม่ใหญ่เทอะทะเหมือน theme มาตรฐาน
  • Vim:
    • install vim เพื่อใช้แทน vim-tiny
    • remove nano (ไม่เคยได้ใช้เลย ในเครื่องก่อน ๆ นั้น ยังประนีประนอมด้วยการเซ็ต vim ให้เป็น default editor แต่ nano ที่เหลือไว้ก็กินเนื้อที่ในระบบเฉย ๆ โดยไม่เคยถูกเรียกใช้เลย)
    • ตั้งค่าใน /etc/vim/vimrc.local:
      " Disable mouse clicks
      set mouse-=a
      
      vim 8 มาพร้อมกับการรองรับ mouse แม้จะทำงานใน text mode ซึ่งทำให้ตำแหน่งเคอร์เซอร์เปลี่ยนเมื่อมีการ copy/paste ข้ามหน้าต่างด้วยเมาส์ หรือแม้แต่การคลิกในหน้าต่างเพื่อโฟกัส และยิ่งสร้างความสับสนยิ่งขึ้นถ้ายังอยู่ใน insert mode ดังนั้น ปิดมันซะ!
      " Force syntax highlight
      syntax on
      
      vim มี default config เปลี่ยนไปมาเรื่อง syntax highlight บางรุ่นก็เปิด บางรุ่นก็ปิด ดังนั้น ตัดปัญหาด้วยการระบุสิ่งที่เราต้องการให้ชัดเสีย
    • ตั้งค่าใน ~/.vimrc:
      set modeline
      
      ด้วยเหตุผลด้านความปลอดภัย vim จึงปิดการใช้ modeline ไว้ และไม่แนะนำให้เปิดใช้เมื่อเป็น root แต่ผมใช้ในซอร์สโค้ดเพื่อความสะดวกในการควบคุมสไตล์การร่นย่อหน้า จึงเปิดใช้ในขอบเขตของ user ปกติเท่านั้น ถ้าต้องเปิด text file ที่ไม่น่าเชื่อถือ ควรใช้ less เปิดดูก่อน

สรุป

โดยรวมแล้ว ผมพอใจกับเครื่องใหม่นี้มาก มันทำให้งานผมเสร็จได้เร็วขึ้น โดยปัจจัยหลักคือ SSD ที่ทำให้ไม่ต้องรอ I/O นาน นอกจากนี้ยังพอใจกับความร้อนที่น้อย การรองรับของลินุกซ์ที่เพียงพอต่อความต้องการ มียกเว้นแค่สองเรื่องที่ค่อนข้างร้ายแรง คือ Wi-Fi ที่หลุดบ่อยเมื่อใช้กับ access point ที่มีการเปลี่ยนแบนด์วิดท์เป็นระยะ (กับ access point บางตัวไม่มีปัญหานี้) และปุ่ม Home/End/PgUp/PgDn ที่ต้องกด Fn ร่วมด้วย (external keyboard ช่วยได้ แต่ก็ต้องฝึกใช้ปุ่มแล็ปท็อปให้เคยชินเพื่อความคล่องตัวในการใช้งานนอกสถานที่ด้วย)

ป้ายกำกับ: , ,

11 มกราคม 2560

Long Time No Thanks

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

อย่างไรก็ดี ผมก็ขอถือโอกาสนี้ ขอบคุณย้อนหลัง 11 เดือน สำหรับผู้ที่ได้ หย่อนสตางค์ลงหมวก เพื่อสนับสนุนงานพัฒนาซอฟต์แวร์เสรีของผม ดังนี้:

  • เดือนกุมภาพันธ์ 2559
    • คุณธนาธิป ศรีวิรุฬห์ชัย
    • ผู้ไม่แสดงตน 1 ท่าน
  • เดือนมีนาคม 2559
    • คุณธนาธิป ศรีวิรุฬห์ชัย
  • เดือนเมษายน 2559
    • คุณวิทยา ไตรสารวัฒนะ
    • คุณธนาธิป ศรีวิรุฬห์ชัย
  • เดือนพฤษภาคม 2559
    • คุณธนาธิป ศรีวิรุฬห์ชัย
  • เดือนมิถุนายน 2559
    • คุณวิทยา ไตรสารวัฒนะ
  • เดือนกรกฎาคม 2559
    • คุณธนาธิป ศรีวิรุฬห์ชัย
  • เดือนสิงหาคม 2559
    • คุณวิทยา ไตรสารวัฒนะ
  • เดือนกันยายน 2559
    • ผู้ไม่ประสงค์จะออกนาม
  • เดือนธันวาคม 2559
    • คุณวิทยา ไตรสารวัฒนะ

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

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

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

ส่วนงานแปล ก็ยังคงอัปเดตคำแปลของ Xfce ใน development snapshot และตรวจทานคำแปลของ GNOME ตามที่โอกาสจะอำนวย ซึ่งก็เรียกได้ว่าไม่ได้ active เท่าเมื่อก่อน แต่ก็ยังไม่เลิกทำนะครับ

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

ป้ายกำกับ:

hacker emblem