Planet TLWG

Syndicate content
Planet TLWG - http://debianclub.org/planet-tlwg
Updated: 1 hour 12 min ago

Thep: Thanks (2012-02-04)

4 February, 2012 - 12:33

ขอขอบคุณ พี่โดม (โดม เจริญยศ), คุณ Donga (ถนอมทรัพย์ นพบูรณ์), คุณ เริงฤทธิ์ (Rerngrit Rakkanittakorn), และคุณ kenggg (ปฏิพัทธ์ สุสำเภา) ที่ได้หย่อนสตางค์สนับสนุนการทำงานซอฟต์แวร์เสรีของผม

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

ขอขอบคุณเป็นพิเศษสำหรับพี่โดมที่ได้เชิญชวนใน Facebook ให้ร่วมกัน donate ให้ผมครับ

Thep: A Butterfly in ThaiLaTeX

3 February, 2012 - 12:08
๏ มาจะกล่าวบทไป
บั๊กหนึ่งใน ThaiLaTeX เล็กนักหนา
เพียงวูบวับขยับปีกกรีดกรายมา
เกิดลมพาถาโถมโพยมบน ฯ

จากที่ได้เขียนถึง ปัญหาอัญประกาศ ใน ThaiLaTeX ไปเมื่อปลายธันวา นับจากวันนั้นถึงวันนี้ เวลาว่างของผมก็หมดไปกับการแก้ ThaiLaTeX และสิ่งที่เกี่ยวข้อง โดยบั๊กนี้ได้กลายเป็นผีเสื้อกระพือปีกที่ทำให้เกิดผลพวงเป็นพายุใหญ่ได้ทีเดียว

เริ่มจาก:

  • พบว่าลำดับ `` และ '' ในเอกสาร ThaiLaTeX ไม่ได้มีการแปลงเป็นอัญประกาศคู่ แต่ยังคงรูปเป็นอัญประกาศเดี่ยวสองตัวเหมือนเดิม ซึ่งพบว่าปัญหาอยู่ที่ฟอนต์
  • ระหว่างตรวจสอบปัญหาในกฎ ligkern ของ virtual font ก็พบว่ามีลำดับอื่นที่ยังไม่มีการแปลงเช่นกัน เช่น ?` (¿), !` (¡), \dag (†), \ddag (‡) ฯลฯ ดังที่กล่าวไปแล้วใน blog ก่อน
  • ขณะทดสอบผลการแก้กฎ ligkern ก็พบว่า swath ไปแทรกรหัสแบ่งคำตรงกลางระหว่างลำดับ `` กลายเป็น `{\wbr}` ในบางกรณี
  • ก่อนจะลงมือแก้ swath ก็ชักทนปวดหัวกับซอร์สที่อ่าน (โคตร) ยากของ swath ไม่ไหว จึงจัดระเบียบซอร์สเสียใหม่ ตั้งแต่ใช้เครื่องมือจัดสไตล์ของซอร์สอัตโนมัติแล้วมาปรับแต่งด้วยมือทีหลัง ปรับเปลี่ยนโครงสร้าง ตัดตัวแปรหรือ member ที่ไม่จำเป็น ซึ่งกลายเป็น commit ชุดใหญ่ คือประมาณ 40 commit ใน 4 วัน ส่งท้ายปีเก่า หลังจากนั้นจึงได้แกะและแก้บั๊กที่ต้องการ และปรับโค้ดต่ออีกนิดหน่อย
  • กลับมาที่ ThaiLaTeX เอง เพื่อจะทดสอบฟอนต์ต่าง ๆ จึงมีการปรับเปลี่ยนเอกสารทดสอบ (teststd.tex) ให้รวมลำดับอักษรพิเศษด้วย แต่เพื่อความสะดวกในการปรับแก้ จึงจัดโครงสร้างเอกสารใหม่เสียก่อนโดยใช้แมโคร แล้วจึงแก้เพิ่ม
  • กลับมาแก้ฟอนต์ที่เหลือต่อ โดยหลังจากที่ทดสอบกับฟอนต์ Norasi ที่มี glyph ค่อนข้างครบแล้ว ก็จำเป็นต้องไล่เพิ่ม glyph พิเศษทั้งหมดที่ lthenc.def ตัวใหม่รองรับในฟอนต์ที่เหลืออีก 11 family ในชุด tlwg ซึ่ง glyph ที่ขาดก็มากบ้างน้อยบ้างแล้วแต่ฟอนต์
  • หลังจากเพิ่ม glyph ที่จำเป็นสำหรับ LaTeX แล้ว ก็จำเป็นต้องเพิ่ม glyph ละตินที่เหลือด้วย มิฉะนั้นการแสดงผลบนเดสก์ท็อปก็จะแหว่งไป ซึ่งปริมาณ glyph ที่เพิ่มนั้นเยอะกว่าชุด LaTeX หลายเท่า
  • การเพิ่ม glyph ละติน มีบางฟอนต์ที่ต้องวาดเพิ่มเอง ไม่สามารถหยิบยืมจากฟอนต์อื่นได้ ก็จำเป็นต้องดูขนาดของเส้นจากอักษรอังกฤษที่มี ซึ่งทำให้พบว่ามีบางฟอนต์ที่เส้นอักษรอังกฤษยังไม่สม่ำเสมอ จึงต้องนั่งปรับเส้น glyph อังกฤษเสียก่อน ได้แก่ฟอนต์ Loma ซึ่งมีการหยิบยืมไปใช้ในฟอนต์ Umpush ด้วย การแก้ครั้งนี้จึงทำให้ฟอนต์ทั้งสองได้เส้นที่สม่ำเสมอยิ่งขึ้นด้วย
  • ระหว่างทดสอบ พบบั๊กในฟอนต์ Loma และ Umpush เมื่อใช้กับเอกสาร LaTeX คือสระบนและวรรณยุกต์จะเยื้องกัน ทำให้คำว่า "ที่" จะวาดไม้เอกและสระอีไม่ตรงแนวกัน ก็แก้บั๊กนี้ในฟอนต์ทั้งสองด้วย

บั๊กตัวแรกที่พบจึงไม่ใช่แมลงธรรมดา แต่เป็นผีเสื้อกระพือปีกด้วยประการฉะนี้

ยังเหลือฟอนต์ชุด Arundina ต้องทำต่ออีกครับ แล้วค่อยออกทั้งชุดพร้อมกันทีเดียว

Thep: Unicode 6.1 and Thai-Lao Scripts

2 February, 2012 - 13:11

Blognone ออกข่าว Unicode 6.1 ออกแล้ว โดยมีการกล่าวถึงการแก้ปัญหา Grapheme Cluster Boundaries ซึ่งเป็นปัญหาภาษาไทยใน UAX #29 ผมได้พูดถึงเรื่องนี้ประปรายใน blog เก่า (เช่น เมื่อ 16 มี.ค. 2552 และ 6 ต.ค. 2553) แต่ไม่เคยเขียนถึงเป็นเรื่องเป็นราวโดยตรง

ปัญหาของ UAX #29 ในส่วนของ grapheme cluster boundary นี้ก็คือ มันได้กำหนด cluster ซึ่งเป็นหน่วยที่เล็กที่สุดของการตัดบรรทัดและเลื่อนเคอร์เซอร์ โดยให้สระหน้าและสระหลังของอักษรไทยและลาวถูกนับรวมไปใน cluster เดียวกับพยัญชนะที่มันเกาะ แทนที่จะแยกเป็น cluster อิสระ เช่น:

|เป็|น|เรื่|อ|ง|เป็|น|รา|ว|

แทนที่จะเป็น:

|เ|ป็|น|เ|รื่|อ|ง|เ|ป็|น|ร|า|ว|

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

เรื่องนี้เกิดจากข้อกำหนดเรื่อง extended grapheme cluster ซึ่งใน UAX #29 ฉบับเดิมกำหนดให้สระหน้าของไทย-ลาว (เอ, แอ, โอ, ใอ, ไอ, ເອ, ແອ, ໂອ, ໃອ, ໄອ) มีคุณสมบัติ Grapheme_Cluster_Break เป็นแบบ Prepend และสระหลังของไทย-ลาว (อะ, อา, อำ, ອະ, ອາ, ອຳ) มีคุณสมบัติเป็นแบบ Extend ซึ่งอักษรที่มีคุณสมบัติเหล่านี้จะไม่สามารถยืนเป็น cluster เดี่ยว ๆ ได้ ต้องเกาะไปกับพยัญชนะ โดยแบบ Prepend ต้องเกาะไปกับพยัญชนะที่ตามมา และแบบ Extend ต้องเกาะไปกับพยัญชนะที่มาก่อนหน้า ซึ่งตรงนี้เป็นพฤติกรรมปกติในอักษรตระกูล Indic ซึ่งรวมถึงอักษรพม่าและเขมรด้วย แต่เผอิญเขาอาจจะลืมว่าอักษรไทย-ลาวเป็นอักษร Indic ที่แหกคอก

ความจริงแล้ว UAX #29 ฉบับเดิมได้กำหนดว่า นี่เป็นเพียงพฤติกรรม ปริยาย เท่านั้น ระบบต่าง ๆ สามารถ ดัดแปลง (tailor) ไปตามที่เห็นสมควรได้ แต่นั่นก็ไม่น่าสนใจเพียงพอให้นักพัฒนาระบบต่าง ๆ ดัดแปลง ตามที่ผู้ใช้คาดหวังโดยพร้อมเพรียงได้

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

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

ความจริงก็ได้ยินมาว่ามีตัวแทนจาก Apple ที่อเมริกาเสนอแก้เรื่องนี้ไปรอบหนึ่งแล้วเหมือนกัน แต่ก็ตกไป นั่นยิ่งทำให้เราต้องหาหลักฐานที่หนักแน่นยิ่งขึ้น รายงานบั๊กต่าง ๆ ในโลกโอเพนซอร์สช่วยยืนยันได้ในระดับหนึ่ง แต่หลักฐานในเอกสารจริงว่าไม่มีใครแบ่ง cluster แบบนั้นเลยจะช่วยตีประเด็นได้ผลกว่า ผมได้ขอร้องให้เพื่อน ๆ ช่วยหาตัวอย่างป้ายข้อความแนวดิ่งที่แสดงตัวอักษรทีละช่องโดยเห็นสระหน้า-หลังแยกจากพยัญชนะ ก็ปรากฎว่าหายากเหลือเกิน ส่วนมากป้ายแนวดิ่งจะเขียนทีละพยางค์มากกว่า ในเวลาเดียวกันก็พยายามหาหลักฐานแนวอื่น จนกระทั่งไปเจอ การทำ drop cap ในวารสารที่แสดงให้เห็นการแบ่ง cluster ในเอกสารจริง

ด้วยการประสานงานของคุณ Martin การแก้ข้อกำหนดในครั้งแรก เขาแก้เป็น clustering สองแบบ คือแบบ extended กับแบบ legacy โดยแนะนำให้ใช้แบบ extended ยกเว้นภาษาไทย-ลาวที่อาจจะใช้แบบ legacy แทนได้ ฟังดูเหมือนเริ่มโอนอ่อนลงบ้าง แต่ก็ยังไม่กระตุ้นนักพัฒนามากพออยู่ดี จนกระทั่งคุณ Martin ได้ยื่นหลักฐานภาพ drop cap ของผมเข้าไป ผมเองก็คิดว่าคงได้แค่นั้นแหละ จนกระทั่งมาได้ข่าวจาก Blognone จึงตรวจสอบดู ก็ปรากฏว่าเขาแก้โดยตัดเรื่อง Prepend และ Extend ในส่วนภาษาไทย-ลาวออกไปหมดแล้ว ยกเว้นสระอำ โดยย้ายมาอยู่ในหมวด SpacingMark ซึ่งผลคือจะยังคงให้สระอำเกาะไปกับพยัญชนะนำหน้าต่อไป โดยจะอยู่ในโหมด extended grapheme cluster เท่านั้น ถ้าเป็นโหมด legacy ก็จะให้เคอร์เซอร์ตกหน้าสระอำได้ ส่วนสระหน้า-หลังอื่น ๆ จะแยกเป็น cluster ได้อย่างอิสระตามความคาดหวังของผู้ใช้

งานนี้ต้องให้เครดิตคุณ Martin Hosken เต็ม ๆ ครับ ที่ช่วยประสานงานและชี้แนะแนวทางต่าง ๆ ให้

ขั้นต่อไปคือขอแก้ GNOME #576156 ตามข้อกำหนดใหม่นี้ หรือไม่ก็รอนักพัฒนา Pango ปรับโค้ดใหม่ตามข้อกำหนดใหม่ก็อาจจะเพียงพอ ส่วนในที่อื่น ๆ เช่น ICU และ Chromium เข้าใจว่าเขาแก้ไปนานแล้ว

Thep: Thanks

1 February, 2012 - 20:24

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

萬事如意,身體健康,出入平安,財喜登門。
[แต้จิ๋ว: บ่วงสื่อยู่อี่ ซิงที่เกี่ยงคัง ชุกยิบเผ่งอัง ไฉ่ฮี่เต็งมึ้ง]
หมื่นกิจสมหวัง สุขภาพแข็งแรง กิจการราบรื่น ทรัพย์สุขมาเยือน

และขอขอบคุณที่ให้การสนับสนุนด้วยดีตลอดมา ขอให้ happy hacking ครับ!

Neutron: I'm now a Debian Maintainer

1 February, 2012 - 14:51

For a few years that I have involved in Debian as a new maintainer. I have maintained some packages, "xiterm+thai", "flvmeta" and also the new ITP "ipset", which I have learned to package as well.

Many comments from several Debian Developers, especially Theppitak Karoonboonyanan and also Paul Wise, which I must say that both are the great teachers. They have pointed me to many good resouces for startup and also adviced me every mistakes I have made. They have shown that the "Debian Developers" is a kind of expertise and It's not easy if you do not try harder.

I know Theppitak as he is my idol and he who is the Debian guy that has introduced me to Debian as well. The first Debian distribution that I installed on the first my Debian computer (it's not my property, it's the company property that I worked with at that time) was "sid" aka. "unstable" and It's the main distribution that I always use for my main working laptop. IMHO, I never get back to any Linux distributions since I have found Debian.

I know Paul as he is a first Debian Developer I have met (at that time Theppitak was being in the NM process).
He is a cool guy. He also the first Debian Developer that signed my GPG key. He many times sponsored my packages and everytime for good practices.

However, the efforts you have get from the process are much more than you think as you could evaluate your self which you have more skills to handle with many problems than ever, you could package in the correct direction with a good quality. Obviously, you have learned to communicate with the communities which is the main reason that could bring you to be a good developer in the future.

Therefore, I have read the Debian Maintainer wiki page and applied the DM application (http://lists.debian.org/debian-newmaint/2012/01/msg00092.html) and thanks to both DDs that I mention above for their advocations.

Last, I have finished the last step 4 for account creation and my GPG key has been accepted to the active Debian Maintainer keyring (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657331).

Finally, I'm now a Debian Maintainer.

LookHin: การทำ Virtual Host บน Apache Web Server

1 February, 2012 - 01:48

โดยปกติแล้ว Web Server เครื่องๆ หนึ่งจะใช้สำหรับเว็บไซต์หลายเว็บ ซึ่งสามารถทำได้โดยการทำ Virtual Host โดยบน Apache สามารถทำได้ 2 แบบ คือ

1. IP Based Virtual Host คือการทำ Virtual Host โดยใช้ IP Address เป็นตัวแบ่ง ซึ่งวิธีนี้เราจะต้องมี IP สำหรับทุกๆ เว็บไซต์ที่จะทำ

2. Name Based Virtual Host วิธีนี้จะใช้ชื่อ domain name เป็นตัวแบ่ง โดยทุกๆ เว็บไซต์จะใช้ IP เดียวกันหมด ซึ่ง Hosting ส่วนใหญ่นิยมใช้แบบนี้ และวันนี้เราก็จะมาลองทำแบบนี้กัน ^^

ตัวอย่างที่เราจะทดสอบกันต่อไปนี้ Client เราจะใช้ Windows ส่วน Apache Web Server เราจะใช้ Linux CentOS ที่เราได้ทำการติดตั้งกันไปแล้วจากบทความก่อนๆ ส่วน DNS Server เราจะพูดถึงอีกทีในบทความต่อๆ ไป

เข้าเรื่องกันเลย อย่างแรกที่เราต้องทำก่อนก็คือกำหนดให้ domain name ของเรา point ไปยัง IP ของ Web Server ซึ่งในทีนี้ก็คือ 192.168.10.10 และเนื่องจากว่าเราเองยังไม่มี DNS Server ฉะนั้นในการทดสอบ ให้เราเข้าไปแก้ไข /etc/hosts ของเครื่องไคลเอนต์กันก่อน เพื่อกำหนดค่า ip ให้กับ domain แบบตรงๆ กันก่อน โดยถ้าใช้ windows ให้เข้าไปแก้ไขที่ไฟล์ c:\Windows\System32\drivers\etc\hosts และสำหรับ Linux ให้แก้ไขที่ไฟล์ /etc/hosts โดยให้เพิ่มบรรทัดต่อไปนี้

1
2
192.168.10.10 vhost1.unzeen.com
192.168.10.10 vhost2.unzeen.com

เมื่อเพิ่มข้อมูลลงไปแล้ว ให้ทดสอบทำการ ping vhost1.unzeen.com ว่าได้ IP กลับมาถูกต้องหรือไม่ ถ้าได้แล้วก็ไปขั้นตอนถัดไปได้เลย

ขั้นตอนถัดไปให้เข้าไปที่ Linux Server และทำการสร้างโฟลเดอร์ /var/www/vhost1/ และ /var/www/vhost2/ เพื่อเอาไว้เก็บไฟล์ของเว็บไซต์

1
2
# mkdir /var/www/vhost1/
# mkdir /var/www/vhost2/

จากนั้นทำการสร้างไฟล์ index.html ไว้ที่ /var/www/vhost1/ และ /var/www/vhost2/

# index.html ใน vhost1

1
2
3
4
5
6
7
8
<HTML>
 <HEAD>
  <TITLE>VHOST1</TITLE>
 </HEAD>
 <BODY>
  VHOST1
 </BODY>
</HTML>

# index.html ใน vhost2

1
2
3
4
5
6
7
8
<HTML>
 <HEAD>
  <TITLE>VHOST2</TITLE>
 </HEAD>
 <BODY>
  VHOST2
 </BODY>
</HTML>

เนื่องจากเราทำการล๊อกอินเข้าระบบด้วย root ฉะนั้นเพื่อความแน่ใจทำการเปลียน Permission ของ vhost1 และ vhost2 เล็กน้อย

1
2
# chmod -R 755 /var/www/vhost1/
# chmod -R 755 /var/www/vhost2/

ต่อไปทำการแก้ไขไฟล์ /etc/httpd/conf/httpd.conf โดยให้เอา # หน้า NameVirtualHost ออก และเพิ่มบรรทัดในส่วนของ VirtualHost ลงไปตามตัวอย่าง

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NameVirtualHost *:80
 
<VirtualHost *:80>
    ServerAdmin webmaster@unzeen.com
    DocumentRoot /var/www/vhost1
    ServerName vhost1.unzeen.com
    ErrorLog logs/vhost1.unzeen.com-error_log
    CustomLog logs/vhost1.unzeen.com-access_log common
</VirtualHost>
 
<VirtualHost *:80>
    ServerAdmin webmaster@unzeen.com
    DocumentRoot /var/www/vhost2
    ServerName vhost2.unzeen.com
    ErrorLog logs/vhost2.unzeen.com-error_log
    CustomLog logs/vhost2.unzeen.com-access_log common
</VirtualHost>

จากนั้นสั่ง restart service ของ apache ด้วยคำสั่ง

1
# service httpd restart

เท่านี้ก็เป็นอันว่าเราทำการสร้าง VirtualHost เป็นที่เรียบร้อย ทดสอบเปิดจาก Web Browser ดูได้

วันนี้เท่านี้ก่อน รอบหน้าเราจะมาต่อกันที่เรื่อง SSL กันจริงๆ หละ

Chatsiri: Deli.cio.us

22 January, 2012 - 01:17

วันนี้ไปถึง BITEC บางนา แบบไม่ต้องพึ่งแท็กซี่ที่สถานนี้ออนนุชอีกแล้ว เพราะไปถึงสถานีบางนาแล้วเดินลงมาก็แทบเจอเลย. แว๊บแรกผ่าน อ่านเป็น "Del.icio.us" ทีไหนได้กลับมาดูในกล้องตัวเองมันเขียนเป็น "Deli.cio.us".

Vee: ได้ข่าวว่ามีอะไรใหม่

20 January, 2012 - 11:21
ได้ข่าวว่ามีอะไรใหม่ ใน Exteen.com อะไรก็ไม่รู้ ก็เลยมาลองโพสสักหน่อย อิๆ

Udomsak: Twitter Bootstrap

19 January, 2012 - 20:07
Twitter-bootstrap  helper tool release By Twitter designed  useful when you want to developer twitter web application you can fork from github ( https://github.com/twitter/bootstrap )


My site Article and Topic

LookHin: ขั้นตอนการติดตั้ง CentOS 6.2 แบบ Minimal

18 January, 2012 - 01:30

บทความนี้จะแนะนำการติดตั้งและใช้งาน CentOS http://www.centos.org/ ซึ่งเป็น Linux สาย Redhat ตัวหนึ่ง ในการนำมาใช้ทำเป็น Server โดยจะแบ่งเนื้อหาออกเป็นตอนๆ เพื่อความสะดวกของคนเขียน (ผมเอง) โดยจะมีเนื้อหาทั้งหมดคราวๆ ตามหัวข้อดังนี้

* CentOS Minimal Installation
* Web Server: Apache and PHP
* Secure Web Server : Apache & Mod SSL
* Database: MySQL & PHP MySQL Extension
* Database: Oracle & PHP OCI8 Extension
* Mail Server: Postfix
* DNS Server: BIND
* FTP Server: ProFTPD
* User & Group Management

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

อย่างแรกเราต้องทำการ Download ตัวติดตั้งมาก่อน ซึ่งจะมีให้เลือก Download อยู่ 2 แบบหลักๆ ตามชนิดของ CPU ของเราคือ i386 จะใช้สำหรับ CPU 32 บิท และ x86_64 จะใช้สำหรับ CPU แบบ 64 บิท

# i386 สำหรับ CPU 32 บิท
http://mirror.centos.org/centos/6.2/isos/i386/

# x86_64 สำหรับ CPU 64 บิท
http://mirror.centos.org/centos/6.2/isos/x86_64/

จากนั้นทำการ Download CentOS-6.2-i386-minimal.iso หรือ CentOS-6.2-x86_64-minimal.iso ตามชนิดของ CPU ของเรา

ขั้นตอนแรกเลือก Install or upgrade an existing system

Skip ไปเลยเพราะว่าเราไม่ต้องการทำการตรวจสอบแผ่น

เข้าสู่หน้าจอการติดตั้งแบบกราฟฟิกอันสวยงาม กด Next

ทำการเลือกภาษา

จากนั้นเลือก Keyboard Layout

ทำการเลือก Basic Storage Device เพราะว่าเราใช้ Hard Disk ธรรมดาๆ

กด Yes, discard any data เพื่อยืนยันว่าถ้ามีข้อมูลอยู่ใน Hard Disk ตัวนี้เราไม่เอามันแล้วนะให้ลบเลย

ทำการตั้งชื่อเครื่อง ในที่นี้ผมตั้งว่า centos.unzeen.com

จากนั้นคลิกที่ Configure Network เพื่อทำการกำหนด IP Address โดยเลือกไปที่ Wired และคลิก Edit ที่ eth0 ซึ่งเป็นการ์ดแลนของเราเอง

ทำการคลิกถูกที่ Connect automatically (อันนี้ห้ามลืมเลยนะ) จากนั้นเลือกไปที่แท็บ IPv4 Setting กำหนดข้อมูลในช่อง Method เป็น Manual และทำการเพิ่ม IP Address, Netmask, Gateway, DNS Server โดยของผมกำหนดดังนี้

1
2
3
4
IP Address : 192.168.10.10
Netmask : 24
Gateway : 192.168.10.1
DNS Server : 8.8.8.8 //อันนี้ของกูเกิลเลยนะ

ต่อไปทำการเลือกประเทศ

กำหนดรหัสผ่านสำหรับ root //ตั้งรหัสผ่านยากๆ ไว้

เลือก Use All Space เพราะว่าเราต้องการติดตั้งโดยไม่แบ่ง partition แต่ถ้าใครเชียวชาญมากแล้วก็เลือก Create Custom Layout ได้เลยไม่ว่ากัน

คลิก Write changes to disk

ระบบเริ่มทำการติดตั้ง CentOS ลงบน Hard Disk ของเรา รอสักครู่……

เมื่อติดตั้งเรียบร้อยแล้วคลิก Reboot

เมื่อ Reboot เรียบร้อยแล้วเราจะเห็นหน้าจอให้ใส่ Username และ Password (ไม่มีหน้าจอแบบ GUI ให้นะจ้ะ เพราะว่าเราจะเอามาทำ Server หน้าจอกราฟฟิกแบบ GUI คงไม่จำเป็น)

ขั้นตอนต่อไปทำการลงโปรแกรมแรกในเครื่องกันก่อน อันนี้ผมลง nano เอาไว้แก้ไขเท็กไฟล์ต่างๆ เพราะผมใช้ vi หรือ vim ไม่คล่อง แต่สัญญาว่าจะหัดใช้ – -’

1
# yum install nano

จากนั้นทำการ Disable SELinux โดยเข้าไปแก้ไขไฟล์คอนฟิกที่ /etc/selinux/config โดยแก้ไขให้ SELINUX=disabled (ใน nano ให้กด CTRL+O เพื่อทำการ save และกด CTRL+X เพื่อออกจากโปรแกรม)

1
# nano /etc/selinux/config

ต่อไปทำการ Disable Firewall

1
# chkconfig iptables off

เมื่อแก้ไขค่าต่างๆเรียบร้อยแล้วทำการ restart สักหนึ่งรอบ

1
# shutdown -r now

เมื่อ Reboot เครื่องเสร็จแล้ว เราสามารถทำการ SSH เพื่อเข้าใช้งานได้

เสร็จสินขั้นตอนการติดตั้ง CentOS 6.2 แบบ Minimal เพียงเท่านี้ คราวหน้าเราจะมาติดตั้ง Apache, mod_ssl และ php กันต่อ ^^

Neutron: Squid configuration directive: tproxy_uses_indirect_client

15 January, 2012 - 23:59

I have setup some Squid 3.2 proxy servers which deployed in the TPROXY (fully transparent proxy, aka IP spoofing) mode. For the normal deployment could be found here (http://www.balabit.com/downloads/files/tproxy/README.txt).

But I have some special services running inside the box whose intercepting some of clients connections from Squid (via ICAP) and done the request modification before sending it to the origin server and acts as a man-in-the-middle. In this case, my requirement is to also spoofing the outgoing source address of my special services connections. Thus, I have decided to send the requests back to Squid to done the spoofing as well.

I was searching the Internet for the solution. In the first place, I tried to setup the TPROXY destination in the "PREROUTING" chain of "mangle" table but not success as the local generated packets didn't pass this chain.

I found this page (http://www.squid-cache.org/Doc/config/tproxy_uses_indirect_client) and it's lucky that this configuration directive only available in Squid 3.2+.
Therefore, I just setup my special services to make the outgoing connections with "X-Forwarded-For" http header included through the Squid that acts as a proxy on another port, eg. 3129.

For the Squid configuration, I just add

...
http_port 3129 tproxy
...
...
follow_x_forwarded_for allow localhost
...
tproxy_uses_indirect_client on
...
...

Finally, I could done the setup for IP spoofing for all of the connections and the boxes are now truely transparent as it should be.

Note: As the "3129" listening port should not be exposed to the outside of the box, therefore, it should not be allowed to accept the connections from outside. A simple iptables rules is

# iptables -A INPUT -p tcp --dport 3129 ! -s 127.0.0.1 -j DROP

Hui

13 January, 2012 - 09:35
Post แรกหลังเปลี่ยน Template เป็นแบบใหม่ สีฟ้าเรียบๆ

bact: อยากให้ใครอยู่ในแบงก์?

6 January, 2012 - 13:26

ธนบัตร 5 ปอนด์สเตอร์ลิง ออกโดย Clydesdale Bank ในสกอตแลนด์ ด้านหน้าเป็นรูป อเล็กซานเดอร์ เฟลมมิง ผู้ค้นพบยาปฏิชีวนะ "เพนิซิลลิน"

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

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

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

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

ชุด “ชาวต่างชาติที่มาร่วมพัฒนาประเทศสยาม” — ชุดนี้อาจจะออกเป็นที่ระลึกในวาระฉลองความสัมพันธ์ของไทยกับประเทศต่าง ๆ

ชุด “หลัก 6 ประการของคณะราษฎร” — ชุดนี้อาจจะออกเป็นที่ระลึกในวาระฉลองรัฐธรรมนูญหรือวันชาติ 24 มิถุนายน หรืออาจจะเป็นในวาระวันเกิดของแต่ละคนก็ได้

ใครสนใจ ลองดูต่อได้ที่วิกิพีเดีย: รายชื่อบุคคลในธนบัตรของประเทศต่าง ๆ

(โพสต์ไปไม่ทันไร มีคนบอกว่า จะเอา “หลินปิง”!!!)


Udomsak: Setup PHP + lighttpd ( fastcgi ) on Fedora core 15 in 5Min. !!

6 January, 2012 - 12:01
Setup PHP ( 5.3.8 )  + lighttpd on Fedora core 15 with quick and dirty Jobs with  user home dir homepage ( mod_userdir )

หลังจากเช้้านี้ มีความจำเป็นต้องทำ report ส่ง แต่ติดปัญหา เนื่องจาก notebook ไม่เร็วพอ และ ขณะเดียวกันก็ติดปัญหา  ต้องรัน script PHP  เลยต้องย้ายมาเครื่อง desktop ของที่ทำงานแทน ต้องมั่งนั่ง set อีก ครึ่งชั่วโมง

ปัญหาที่เจอก็คือ เรื่องการ run script PHP +  lighttpd บน Fedora core 15 พบว่าบน Turorial ทั้งหลายแหล่ ใช้งานไม่ได้ มันก็จริงตามที่คนอื่นบอก Howto ทั้งหลายแหล่ + tutorial มักใช้งานไม่ได้จริง พักหลังๆ มาเจอกับตัว หลายเวบล่ะ ทำเองดีกว่า เข้าเรื่อง

Install basic php5 and  lighttpd  




Install php-fpm 

  • enabled  lighttpd module 
  • restart service 
  • degug log if error 

ตอนแรกจะ set เป็น CGI  ง่ายๆ เอารัน PHP ก็พอ แต่ปรากฏว่า Fedora Core 15 ไม่มี package CGI มาให้ งานเข้าล่ะ เรื่องยาวแน่มีแต่ FastCGI  เอาวะ Fast ก็ Fast


vim  /etc/lighttpd/lighttpd.conf  or replace with this configuration below 


var.log_root    = "/var/log/lighttpd"
var.server_root = "/var/www"
var.state_dir   = "/var/run"
var.home_dir    = "/var/lib/lighttpd"
var.conf_dir    = "/etc/lighttpd"
var.vhosts_dir  = server_root + "/vhosts"
var.cache_dir   = "/var/cache/lighttpd"
var.socket_dir  = home_dir + "/sockets"
include "modules.conf"
server.port = 80
server.use-ipv6 = "enable"
server.username  = "lighttpd"
server.groupname = "lighttpd"
server.document-root = server_root + "/lighttpd"
server.pid-file = state_dir + "/lighttpd.pid"
server.errorlog             = log_root + "/error.log"
include "conf.d/access_log.conf"
include "conf.d/debug.conf"
server.event-handler = "linux-sysepoll"
server.network-backend = "linux-sendfile"
server.stat-cache-engine = "simple"
server.max-connections = 1024
index-file.names += (
  "index.xhtml", "index.html", "index.htm", "default.htm", "index.php"
)
url.access-deny             = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
  server.range-requests = "disable"
}
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".scgi" , ".rb" , ".py" )
include "conf.d/mime.conf"
include "conf.d/dirlisting.conf"
server.follow-symlink = "enable"
server.upload-dirs = ( "/var/tmp" )


vim  /etc/lighttpd/module.conf  or replace with this configuration below 
# ** NOTE ** i'm enabled mod userdir


server.modules = (
  "mod_access",
  "mod_cgi",
  "mod_alias",
  "mod_auth",
  "mod_evasive",
  "mod_redirect",
  "mod_rewrite",
  "mod_setenv",
  "mod_usertrack",
  "mod_fastcgi",
)

include "conf.d/status.conf"
include "conf.d/userdir.conf"
include "conf.d/fastcgi.conf"
include "conf.d/cgi.conf"
include "conf.d/debug.conf"

vim  /etc/lighttpd/conf.d/fastcgi.conf 
server.modules += ( "mod_fastcgi" )fastcgi.server = ( ".php" =>                   ( "php-tcp" =>                     (                       "host" => "127.0.0.1",                       "port" => 9000,                       "check-local" => "disable",                       "broken-scriptfilename" => "enable",                     )                   ))
**Option if you want to debug lighttpd  set /etc/lighttpd/debug.conf 
debug.log-request-handling        = "enable"debug.log-request-header          = "enable"debug.log-request-header-on-error = "enable"debug.log-response-header         = "enable"debug.log-file-not-found          = "enable"debug.log-condition-handling      = "enable"

**Option if you want to enable  per user  homepage set  '/etc/lighttpd/conf.d/userdir.conf
server.modules += ( "mod_userdir" )#userdir.path is your  userdir homepageuserdir.path = "project"
  • restart service 
  • **NOTE** for default Fedora if you not set rule for SELinux **disable it before  otherwise you will got error and can't running  '/etc/selinux/config' 
  • log file of lighttpd  is '/var/log/lighttpd/* ' 
  • log file of php-fpm is  ' /var/log/php-fpm/* 
  • จบข่าว 








My site Article and Topic

Udomsak: Install puppet On Fedora Core 15 || yum repository

6 January, 2012 - 12:00
Setup & Install  puppet repository for puppetlab into Fedora Core 15 ( Quick and Dirty )



# yum install sudo

add  Puppetlabs repository 

cat  >  /etc/yum.repos.d/puppetlabs.repo


[Puppetlabs]
name=Puppetlabs
baseurl=http://yum.puppetlabs.com/fedora/f$releasever/products/$basearch/
failovermethod=priority
skip_if_unavailable=1
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
ggpkey=http://yum.puppetlabs.com/RPM-GPG-KEY-reductive
enabled=1
gpgcheck=1

[ press Ctrl-D ] 
# yum update 
Quick and Dirty  install  ** So this method not including with some dependencies 
# yum -y install `yum search puppet | cut -f1 -d':'`
{  So enjoy with PuppetLabs !  :) }

Documentation 

http://puppetlabs.com/misc/pdf-doc/
Git hub code repository for  Puppet configuration management

https://github.com/puppetlabsMy site Article and Topic

Thep: Thanks

30 December, 2011 - 15:19

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

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

Udomsak: Setup Mobile broadband connect Gnome 3.2 Ubuntu 11.10

29 December, 2011 - 15:16
Hello mobile

My rest room does not have internet connection and  way to connect is through  Mobile broadband. so my area  the mobile operator they support  only EDGE connection type ( position at my live ).  also does not have WI-FI connect.

Setup in Gnome on Ubuntu 11.10
  • Open Network Connection  
  • Click 'Mobile broadband' and click 'Add' 

  • Your device will shown up so my phone is  Samsung Ace ( Samsung cooper Thailand named )

  • Select  Country for my case is 'Thailand'  

 .  



  • Choose operator provider




  • If not show in list 'Choose custom provider by your self'  




  • After config pre-configuration Finnish click apply



  • Operator configuration dialog will appear  like  below.   AIS - One 2 Call  modem number is '*99#'  for other operator you can call to ask this number ( modem connect )  and APN is 'internet'  ( non-capital )  after Finnish click 'Save' 



  • After that connect and test speed :)  ( click to connect at  top right screen and select connection type that appropriate ) 






My site Article and Topic

Udomsak: Note for Ruby on Rails Fedora Core 15

28 December, 2011 - 20:57
b 4 back to my rest room so want to note something about Ruby On Rail ( ROR , rails ) on Fedora Core 15


  • yum install ruby rubygems sqlite sqlite-devel
  • gem install rails     
  • gem install uglifier
  • gem install sqlite3 
Document Online 
Book

My site Article and Topic

Thep: ThaiLaTeX wbr, Quotation and Special Characters

27 December, 2011 - 17:50

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

ข่าวร้ายคือโครงการ Babel นั้นอยู่ในสถานะ unmaintained มานานแล้ว ส่งไปตอนนี้ก็ไม่มีใครจัดการให้ แต่ข่าวดีคือ ยังพอมีหวังถ้าสามารถเข้ารวมใน TeX Live ได้ และได้รับคำแนะนำจากผู้ดูแล TeX Live ให้ปรับปรุงเรื่องการจัดโครงสร้างของแพกเกจ

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

เสร็จเรื่องจัดโครงสร้างแล้ว ก่อนจะออกรุ่นใหม่ก็กลับมาทำความสะอาดต่อ ก็ปรากฏว่าพบประเด็นอีก 2 ประเด็นที่เป็นจุดบกพร่องอยู่

1. การเว้นช่องไฟระหว่างคำ

ในคำสั่ง \wbr ปัจจุบันนั้น ได้ดัดแปลงจากแค่เป็นช่องว่างที่ไม่มีความกว้างธรรมดา ให้กลายเป็น glue ที่สามารถยืดได้ เพื่อช่วยในการจัด justified text ในคอลัมน์แคบ โดยให้มาแทรกช่องว่างระหว่างคำด้วย เนื่องจากภาษาไทยใช้อักขระเว้นวรรคน้อยกว่าภาษาอังกฤษ แต่จากการสังเกตเอกสารที่ใช้คอลัมน์แคบ ปรากฏว่าทำให้หลายจุดกลายเป็นการเว้นช่องว่างระหว่างคำเหมือนในหนังสือเรียนชั้นประถม ซึ่งดูไม่สวยงามเลย และในบรรทัดที่ตัดคำไม่ถูก เช่นบรรทัดที่มีชื่อคน ก็จะเป็นการเปิดเผยจุดตัดคำที่ผิดไปด้วย แต่ครั้นจะไม่ยืด \wbr ก็จะทำให้ช่องว่างห่างมาก และในบรรทัดที่ไม่มีช่องว่างเลย บรรทัดก็จะ rag ด้านขวา (แต่สังเกตว่าการไม่ยืดช่องไฟทำให้เส้นหมึกของตัวหนังสือสม่ำเสมอน่าอ่านกว่า)

\wbr แบบยืดได้ \wbr แบบยืดไม่ได้

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

อย่างไรก็ดี เรื่อง letter-spacing นั้นทำใน LaTeX ได้ยาก เพราะนอกจากจะถือเป็นหนึ่งใน bad practice ในเชิง typography แล้ว ยังทำให้มีปัญหากับการจัดการ ligature (ff, fi, fl, ffi, ffl) อีกด้วย ทำให้ Knuth ไม่สนใจสนับสนุนวิธีการนี้ใน TeX และหากเราจะจัดการกับภาษาไทย ก็ต้องจัดการภาษาอังกฤษด้วย เพื่อให้ช่องไฟสมดุลกัน และคงต้องไปรบรากับนัก typography อีกเยอะ

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

ก็ต้องวิจัยกันต่อไป ว่าสามารถเขียน hyphenation pattern สำหรับภาษาไทยออกมาได้หรือไม่ หรือจะใช้พจนานุกรมช่วยโดยเพิ่มความสามารถใน swath แต่เฉพาะหน้านี้ ผมได้ตัดเรื่องการยืดช่องไฟของ \wbr ออกแล้ว กลับไปใช้ช่องไฟแบบไม่มีช่องว่างเหมือนเดิม

2. อัญประกาศและเครื่องหมายพิเศษต่าง ๆ

ผมได้สังเกตเห็นมาระยะหนึ่งแล้ว ว่าอัญประกาศคู่ในเอกสาร LaTeX ภาษาไทยมันดูห่าง ๆ โดยเฉพาะฟอนต์นรสีห์จะเห็นได้ชัด พอเปิด PDF ที่ได้แล้วใช้เมาส์เลือกดู ก็พบว่ามันไม่ได้แปลง `` หรือ '' ให้เป็นอัญประกาศคู่ตัวเดียวเลย ยังคงเป็นอัญประกาศเดี่ยวสองตัวซ้อนกันอยู่เหมือนใน input แกะไปแกะมาก็พบว่าเป็นบั๊กในกฎ ligkern วิธีแก้นั้นมีหลายวิธี ได้ผลครบถ้วนไม่เท่ากัน เนื่องจากปัจจุบันสามารถใช้ UTF-8 ในเอกสารได้ ทำให้สามารถป้อนอักขระยูนิโค้ดของอัญประกาศลงไปตรง ๆ ได้เหมือนกัน แก้ไปแก้มาก็พบ trick ที่ทำให้ใช้งานได้ทุกกรณี ซึ่งแก้เพียง 3 บรรทัดเท่านั้น

การแก้ไขนี้มีผลทำให้ลำดับ ?` และ !` ซึ่ง TeX กำหนดให้แปลงเป็น ¿ และ ¡ ตามลำดับกลับมาทำงานถูกต้องด้วย และเมื่อได้ตรวจสอบลำดับอื่น ๆ ของ TeX ก็พบว่ามีหลายตัวที่ยังไม่ได้กำหนดใน encoding LTH ทำให้ TeX ต้องสำรองใช้ glyph จาก encoding OT1 หรืออื่น ๆ แทน ซึ่งรวมถึงเครื่องหมายพื้นฐานอย่าง $ ด้วย ทำให้รูปแบบตัวอักษรดูไม่กลมกลืนกันเพราะมาจากคนละฟอนต์ และเพื่อแกล้งให้มันต่างกันมากเพื่อให้สังเกตได้ง่ายระหว่างทดสอบ ก็ได้ทดลองใช้ฟอนต์ garuda ผ่านคำสั่ง \usefont ไม่ใช่ \sffamily เพื่อให้ glyph ที่สำรองนั้นไปดึงมาจาก roman shape ให้มันต่างจาก san serif ของ garuda

รูปข้างล่างนี้แสดงการเปรียบเทียบก่อนและหลังการแก้ ทั้งกรณีอัญประกาศและเครื่องหมายพิเศษ:

Garuda ก่อน Garuda หลัง

กับฟอนต์นรสีห์:

Norasi ก่อน Norasi หลัง

จะเห็นว่าไม่ได้กู้อักขระละตินกลับมาทั้งหมด เนื่องจากช่องว่างในตารางอักขระมีจำกัด จึงเลือกเอาเฉพาะที่น่าจะได้ใช้บ่อยเท่านั้น หลังจากแก้แล้ว อักขระละตินนอกช่วง ASCII ที่สามารถใช้ใน LTH ได้ ได้แก่ ?` (¿), !` (¡), \dag (†), \ddag (‡), \S (§), \P (¶), \copyright (©), \textregistered (®), \texttrademark(™), \ae (æ), \AE (Æ), \oe (œ), \OE (Œ), \ss (ß), \i (ı), \j (ȷ) ส่วนอักขระ accent ทั้งหลาย ยังคงใช้การผสม accent ของ TeX ตามปกติ (เช่น \'e = é)

แต่งานยังไม่จบครับ ปัญหาคือไม่ใช่ทุกฟอนต์ที่มี glyph เหล่านี้ครบ ยังต้องไล่เพิ่ม glyph ก่อน (เช่น ตัวอย่างของ garuda จะเห็นว่า dotless j หาย) กว่าจะเสร็จคงปีหน้า :-)

Update (2011-12-28 09:28+0700): เพิ่มโค้ด LaTeX สำหรับอักขระละตินที่ใช้เพิ่มได้ เพื่อความชัดเจน

Udomsak: First run MondoDB version 2.02 on Fedora CORE 15

27 December, 2011 - 10:47




Fedora Core 15 have MongoDB in repository version  1.8.0  but  i need newer version :) , download it from mondodb site ( http://www.mongodb.org/downloads )  , and select version that match your system by your own ( i'm download 32bit version ) 


Do step
  1. extract mongodb download file ( tar xvfz  { you mongo download file } 
  2. create db path ( i want to keep it in my path control or devel environment ) 
  3. start server with some option 
download and extract it 

cd  mongodb install directory and create directory to keep 'MondoDB data'  named data



Show binary file of mongodb  , Now we will start server with few options

  • I want browser to access service  ( option --rest ) 
  • I don't want to any authentication in dev environment :D  ( option --noauth ) 
  • specify db path to our directory create above ( --dbpath { your own data directory } ) 





Enter to start server **Note it run fore ground and output to standard output easy to read  i hate file log output  and don't need it  
Open browser  to  http://127.0.0.1:28017/  see below


My site Article and Topic
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้