<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet TLWG</title>
	<link>http://debianclub.org/planet-tlwg</link>
	<language>en</language>
	<description>Planet TLWG - http://debianclub.org/planet-tlwg</description>

<item>
	<title>Sothorn: Postfix SMTP Relay</title>
	<guid>http://linux.sothorn.org/940 at http://linux.sothorn.org</guid>
	<link>http://linux.sothorn.org/node/940</link>
	<description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;   ทำ mail Server แล้ว gmail hotmail ไม่รับ mail ดัง รายละเอียด&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;answer_heading&quot;&gt;
&lt;h2 class=&quot;answer-title&quot;&gt;'The IP you're using to send email is not authorized...'&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;article-content-div&quot; class=&quot;article_content article-content-10336&quot;&gt;
&lt;p&gt;In order to prevent spam, Gmail refuses mail when the sending IP  address does not match the sending domain. To send mail from your server  to Gmail, we suggest using the SMTP relay provided by your ISP. Please  note that we are unable to whitelist IP addresses or otherwise make  exceptions at this time.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;p&gt;เลยต้องฝากส่งด้วย Server ของ ISP โดยอ่านวิธีการจาก &lt;a href=&quot;http://www.howtoforge.com/how-to-relay-email-on-a-postfix-server&quot; target=&quot;_blank&quot;&gt;howtoforge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;แก้ไฟล์ /ect/postfix/main.cf เพิ่มบรรทัด&lt;/p&gt;
&lt;p&gt;relayhost = relay.cat.net.th&lt;/p&gt;
&lt;p&gt;เท่านี้ gmail hotmail ก็ไม่รังเกียจ mail ของเราแล้ว&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-taxonomy-vocabulary-6 field-type-taxonomy-term-reference field-label-above&quot;&gt;&lt;div class=&quot;field-label&quot;&gt;Blog: &lt;/div&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;a href=&quot;http://linux.sothorn.org/blog/%E0%B8%9A%E0%B8%B1%E0%B8%99%E0%B8%97%E0%B8%B6%E0%B8%81%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%A5%E0%B8%B7%E0%B8%A1&quot;&gt;บันทึกกันลืม&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;service-links&quot;&gt;&lt;a title=&quot;Tweet This&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/940&amp;amp;count=horizontal&amp;amp;via=LinuxDotSothorn&amp;amp;text=Postfix%20SMTP%20Relay&amp;amp;counturl=http%3A//linux.sothorn.org/node/940&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;twitter-share-button service-links-twitter-widget&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Tweet Widget&lt;/span&gt;&lt;/a&gt; &lt;a title=&quot;Share this on Twitter&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/940&amp;amp;text=Postfix%20SMTP%20Relay&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-twitter&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/twitter.png&quot; alt=&quot;Twitter&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;I Like it&quot; href=&quot;http://www.facebook.com/plugins/like.php?href=http%3A//linux.sothorn.org/node/940&amp;amp;layout=button_count&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;width=100&amp;amp;height=21&amp;amp;font=&amp;amp;locale=&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook-like&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Facebook Like&lt;/span&gt;&lt;/a&gt; &lt;a title=&quot;Share on Facebook.&quot; href=&quot;http://www.facebook.com/sharer.php?u=http%3A//linux.sothorn.org/node/940&amp;amp;t=Postfix%20SMTP%20Relay&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/facebook.png&quot; alt=&quot;Facebook&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;links inline&quot;&gt;&lt;li class=&quot;service-links-facebook first&quot;&gt;&lt;a title=&quot;Share on Facebook.&quot; href=&quot;http://www.facebook.com/sharer.php?u=http%3A//linux.sothorn.org/node/940&amp;amp;t=Postfix%20SMTP%20Relay&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/facebook.png&quot; alt=&quot;Facebook&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;service-links-twitter&quot;&gt;&lt;a title=&quot;Share this on Twitter&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/940&amp;amp;text=Postfix%20SMTP%20Relay&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-twitter&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/twitter.png&quot; alt=&quot;Twitter&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;service-links-facebook-like&quot;&gt;&lt;a title=&quot;I Like it&quot; href=&quot;http://www.facebook.com/plugins/like.php?href=http%3A//linux.sothorn.org/node/940&amp;amp;layout=button_count&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;width=100&amp;amp;height=21&amp;amp;font=&amp;amp;locale=&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook-like&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Facebook Like&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;service-links-twitter-widget last&quot;&gt;&lt;a title=&quot;Tweet This&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/940&amp;amp;count=horizontal&amp;amp;via=LinuxDotSothorn&amp;amp;text=Postfix%20SMTP%20Relay&amp;amp;counturl=http%3A//linux.sothorn.org/node/940&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;twitter-share-button service-links-twitter-widget&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Tweet Widget&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Tue, 15 May 2012 02:52:26 +0000</pubDate>
</item>
<item>
	<title>bact: แห่ศพ — ประชานิยมที่เซนต์ปีเตอร์สเบิร์ก</title>
	<guid>http://bact.cc/?p=3195</guid>
	<link>http://feedproxy.google.com/~r/bact/~3/gdWwsQQAatE/</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://bact.cc/f/2012/05/petersburg.jpg&quot; title=&quot;Church on Spilled Blood, St. Petersburg&quot; height=&quot;285&quot; width=&quot;500&quot; alt=&quot;Church on Spilled Blood, St. Petersburg&quot; class=&quot;aligncenter size-full wp-image-3197&quot; /&gt;&lt;/p&gt;
&lt;p&gt;บทความ &lt;a href=&quot;http://www.jstor.org/stable/2697643&quot;&gt;Rites of Protest: Populist Funerals in Imperial St. Petersburg, 1876-1878 ของ Tom Trice&lt;/a&gt; ตีพิมพ์ใน Slavic Review Vol. 60, No. 1, Spring, 2001 พูดถึงแง่มุมด้านสัญลักษณ์ที่เกิดขึ้นในการเดินขบวนที่นำโดยนักศึกษา ในช่วงการเคลื่อนไหวสังคมนิยมในรัสเซียสมัยซาร์.&lt;/p&gt;
&lt;p&gt;บนถนนมีขบวนของนักศึกษาและชาวเซนต์ปีเตอร์สเบิร์ก พวกเขาโห่ร้อง ตะโกนคำปฏิวัติ และแบกโลงศพของชายหนุ่ม ที่พวกเขาก็ไม่รู้จัก หรือคนที่คิดว่ารู้จักก็อาจเข้าใจผิด-จำเขาสลับกับชายอีกคนที่ตายไปก่อนหน้านี้นานแล้ว. แต่ใครจะอยู่ในโลงก็ไม่สำคัญ ที่สำคัญคือ ขบวนนั้นใหญ่เสียจนทุกคนในเมืองหลวงของรัสเซียต้องสนใจ แม้แต่ซาร์อเล็กซานเดอร์ที่สองเองด้วย.&lt;/p&gt;
&lt;p&gt;แน่นอนว่าการเดินขบวนโดยปกตินั้น จะถูกควบคุมโดยเจ้าหน้าที่ของรัฐ แต่ชายหนุ่มหญิงสาวบนท้องถนนกำลังฉวยเอาการแห่ศพ มาหลบเลี่ยงการปราบปรามและเซ็นเซอร์โดยรัฐ. แม้ในนั้นยุคระบอบซาร์จะทรงอำนาจ แต่พลังของศาสนาก็ยังคงเข้มแข็งอยู่ ผู้ไม่พอใจกับระบบซาร์ จึงใช้ศาสนาเป็นเครื่องมือท้าทายรัฐ และพิธีศพในที่สาธารณะเช่นนี้ เป็นช่องทางในการรวมตัวและประท้วง-พร้อมกับเจือความคิดทางโลก/ทางการเมืองเข้าไปด้วย. การแสดงบนท้องถนนในระหว่างพิธีกรรม นำเอาศพของเพื่อนที่ตายเพราะระบอบซาร์มาโชว์ เรียกความเห็นใจจากชาวเมือง และขยายปริมณฑสาธารณะของรัสเซียออกไป.&lt;/p&gt;
&lt;p&gt;คนที่ตายคือนักโทษการเมืองชื่อ Pavel Feoktistovich Chernyshev. เขาเคยเรียนแพทย์ที่ St. Peterburg’s Military Medicinal Academy ซึ่งหนึ่งในคนรุ่นนั้นบอกว่าเป็น “สวรรค์ของนักกิจกรรมประชานิยม.” ชีวิตและกิจกรรมของ Chernyshev นั้นไม่ได้มีอะไรหวือหวาสำคัญ แต่นักศึกษาก็สามารถนำเอาชีวิตของเขามาเฉลิมฉลอง เพื่อที่จะวิพากษ์ระบบเผด็จการ.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Chernyshev ถูกตำรวจจับเนื่องจากเข้าใจผิดว่าคือผู้ลี้ภัยชื่อ Ivan Chernyshev แต่ภายหลังที่ตำรวจพบว่าได้ทำผิดพลาด พวกเขาก็ไม่ได้ปล่อย Chernyshev. กรณีของ Chernyshev เป็นอีกตัวอย่างที่แสดงถึงความไม่ใส่ใจและละเลยหลักการกฎหมายของรัฐบาลเผด็จการ. เช่นเดียวกับเพื่อนร่วมชาติจำนวนมากของเขา ความตายของ Chernyshev นั้นมาจากโรคที่มักพบพร้อมกับความยากจนและการถูกกักขัง.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ในตอนแรกพิธีศพเป็นที่รู้กันไม่กี่ร้อยคน เฉพาะในวงญาติและผู้จัดงาน. ต่อมาชายไม่ทราบชื่อคนหนึ่งได้ติดต่อ และโน้มน้าวญาติ ๆ ของ Chernyshev ให้ “สหาย” ต่าง ๆ ของเขาเป็นผู้จัดงานให้.&lt;/p&gt;
&lt;p&gt;แม้รูปแบบของขบวนแห่จะมีลักษณะตามธรรมเนียมทั่วไป แต่การปฏิบัติต่าง ๆ ในขบวนแห่ศพของ Chernyshev นั้นไม่ธรรมดา. คนในขบวนร้องเพลง Orthodox เสียงดัง เพื่อเรียกความสนใจ เมื่อมีคนถามว่าใครตาย พวกเขาก็จะตอบว่า “เหยื่อของความอยุติธรรมและสหายที่แสนดี.” เมื่อเดินผ่านสถานกักกัน พวกเขายกโลงขึ้นลงไปในอากาศสามครั้ง ราวกับจะโชว์ให้ทุกคนเห็นศพ. เมื่อถึงตอนนี้ พระที่ร่วมขบวนมาด้วย ก็กลัวและออกไปจากขบวน.&lt;/p&gt;
&lt;p&gt;ขบวนการสังคมนิยม ประสบความสำเร็จในการรวมเอาภาพคริสเตียนของการตัดสิน ผู้ยอมพลีชีพเพื่อศาสนา (martyr) และดินแดนพันธะสัญญา มาเป็นกรอบให้ประชาชนมองการปฏิวัติ – ถึงระบอบเผด็จการจะยังมีอำนาจมากมาย แต่สักวันนึงสวรรค์ของสังคมนิยมจะต้องมาถึง. สิ่งที่ขบวนแห่ทำ คือการหยิบเอาพิธีศักดิ์สิทธิ์ซึ่งมีพลังในสังคมขณะนั้น มาใส่ความหมายทางโลกซึ่งก็คือสังคมนิยมเข้าไป เพื่อใช้รังสีบารมีของสิ่งศักดิ์สิทธิ์เสริมพลังให้กับอุดมการณ์สังคมนิยม.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“His faith is socialism, the people is god.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ขบวนแห่ให้ประสบการณ์ของพวกเขาเกี่ยวกับศาสนาและการปฏิวัติที่ผ่านมาในรัสเซีย ฉวยเอาโอกาสในช่วงเวลาและพื้นที่ “ศักดิ์สิทธิ์” ซึ่งถูกสร้างโดยการแสดงของพิธีกรรมงานศพตามประเพณี เพื่อเสนอพลเมืองร่วมชาติของเขา ถึงทางเลือกที่นอกเหนือไปจากระบอบในขณะนั้น. ด้วยรูปแบบที่ไม่ได้มีลักษณะทางการเมืองในแบบเดิม ๆ พิธีกรรมทางศาสนา โดยเฉพาะพิธีเปลี่ยนผ่าน (rites of passage) เช่น พิธีศพซึ่งเกี่ยวกับความตาย นั้นมักดึงดูดผู้ต่อต้านระบอบ ผู้ซึ่งหวังให้พลังของพิธีกรรมช่วยให้กลุ่มเป็นน้ำหนึ่งใจเดียวกันและปรับความสัมพันธ์เชิงอำนาจเสียใหม่.&lt;/p&gt;
&lt;p&gt;ด้วยการใช้ถนนสายหลักในเมืองหลวงเป็นเวทีแสดงของพวกเขา คนหนุ่มสาวในเซนต์ปีเตอร์สเบิร์กได้ใช้ท่าทางของพิธีกรรมและท่วงทำนองของศาสนาที่ผู้คนคุ้นเคย แสดงออกมาอย่างเด่นชัดถึงการอยู่ขั้วตรงข้ามของพวกเขาต่อระบอบเดิม ที่ผูกขาดอำนาจทางการเมือง ทั้งยังปฏิเสธหลักการกฎหมายสมัยใหม่ซึ่งเริ่มแพร่หลายในช่วงก่อนการปฏิรูปครั้งใหญ่. การแสดงศพเหยื่อของระบอบต่อสาธารณะ แม้เป็นเวลาสั้น ๆ แต่นั่นก็สะท้อนถึงอุดมคติทางการเมืองและทางสังคมของพวกเขา ที่พวกเขาได้ยอมสละชีวิต. ในกระบวนการนี้ พวกเขาได้แปลงเอานักโทษที่น้อยคนจะรู้จัก ให้กลายเป็นแกนสำคัญของการประท้วง.&lt;/p&gt;
&lt;p&gt;แทบจะทันทีหลังจากการเดินขบวนแห่ศพของ Chernyshev หนังสือพิมพ์ Vpered! ก็ใส่ชื่อของ Chernyshev ไว้ใน “Martyology of the New Era”, หนังสือพิมพ์ดังกล่าวมอบพื้นที่ให้กับบทความสองสามชิ้นเกี่ยวกับการเดินขบวน. ในเวลาต่อมา Vpered! ก็ได้อ้างว่า การเดินขบวนดังกล่าวได้กลายเป็นตำนานไปแล้ว ในฐานะที่มันเป็นการเดินขบวนอุดมการณ์สังคมนิยมครั้งแรกในนประวัติศาสตร์เซนต์ปีเตอร์สเบิร์ก.&lt;/p&gt;
&lt;p&gt;ตัวชี้วัดที่ดีที่สุดในมุมมองของผู้เขียน ถึงอิทธิพลของพิธีศพของ Chernyshev ก็คือเมื่อเวลาหนึ่งปีครึ่งถัดมา ที่หนุ่มสาวในเซนต์ปีเตอร์สเบิร์กได้ใช้พิธีศพสาธารณะของนักโทษการเมือง Anton Padlewski เพื่อประกาศความไม่พอใจของพวกเขาต่อระบอบซาร์.&lt;/p&gt;
&lt;p&gt;สิ่งที่ผู้คนที่เดินไปสู่สุสานกับ Chernyshev และ Padlewski ได้ทำ ได้สร้างแรงบันดาลใจให้กับหนุ่มสาวในขบวนปฏิวัติให้ทำสิ่งดังกล่าวต่อไปอีก. เหมือน ๆ กับที่เพื่อน ๆ ของเขาในยุโรปตะวันตกทำ เหล่าผู้วิพากษ์วิจารณ์ระบอบซาร์หนุ่มสาวเหล่านี้ ได้ปรับเอาพิธีศักดิ์สิทธิ์ของศาสนา ผสมความหมายทางโลกเข้าไปในองค์ประกอบการปฏิบัติต่าง ๆ ของพิธี เพื่อถ่ายโอนเอาความศักดิ์สิทธิ์และประวัติศาสตร์ที่เดิมถูกใช้แต่เฉพาะกับความเชื่อของทางการ ให้มาเสริมความเชื่อของพวกเขา. พวกเขาได้ใช้ประโยชน์จากการให้เกียรติยกย่องและให้ความเคารพต่อพิธีศพเพื่อที่จะแสดงความเคารพต่อศพ ในการแสดงให้สาธารณะเห็นถึงอาชญากรรมที่เกิดขึ้น และได้ทำให้ผู้ที่ต้องการจะโต้เถียงนั้น ไม่สามารถที่จะโต้ได้ เนื่องจากจะเป็นการไม่ให้เกียรติกับผู้ตาย. พร้อม ๆ กับโฆษกของหนังสือพิมพ์ใต้ดินและของตำรวจ หนุ่มสาวเหล่านี้ได้ใช้ศิลปะโน้มน้าวให้ผู้คนที่ยังมีชีวิตอยู่และที่ตายไปแล้ว ได้มีคุณสมบัติของการโค่นล้มระบอบและการเป็นผู้ยอมสละชีพ และได้แปลงพวกเขาให้กลายเป็นสัญลักษณ์ของคนที่ต้องการจะโค่นล้มระบอบและผู้คนที่ต้องการจะหยุดมัน.&lt;/p&gt;
&lt;p&gt;สิ่งที่สำคัญที่สุดก็คือ ผู้คนที่ได้ทำให้นักโทษการเมืองที่น้อยคนจะรู้จักสองคนให้กลายเป็นผู้ยอมสละชีพนั้น ได้ใช้ทักษะเป็นอย่างดีในการต่อรองกับขีดจำกัดที่ระบอบซาร์ได้เซ็นเซอร์และจำกัดการสนทนาสาธารณะด้วยตำรวจการเมือง, สิ่งนี้แสดงให้เห็นว่า ด้วยจินตนาการและการกล้าตัดสินใจ แม้แต่พิธีศาสนาที่ศักดิ์สิทธิ์ที่สุด ที่ดูเหมือนจะไม่มีช่องให้ปรับเปลี่ยนแก้ไขอะไรได้อีก ก็ยังสามารถถูกใช้เพื่อเปิดพื้นทั้งทางกายภาพและทางสัญลักษณ์ ในการอ้างและปกป้องสิทธิได้.&lt;/p&gt;
&lt;p&gt;—-&lt;/p&gt;
&lt;p&gt;ภาพประกอบดัดแปลงจากรูปถ่าย Church on Spilled Blood โดย &lt;a href=&quot;https://secure.flickr.com/photos/onthegotours/5220732058/&quot;&gt;On The Go Tours&lt;/a&gt; (ซึ่งสร้างหลังอเล็กซานเดอร์ที่สองตายนะ)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/EGFhipHlo6raS-niEWBR6wMne5E/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/EGFhipHlo6raS-niEWBR6wMne5E/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/EGFhipHlo6raS-niEWBR6wMne5E/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/EGFhipHlo6raS-niEWBR6wMne5E/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/bact/~4/gdWwsQQAatE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 10 May 2012 07:06:41 +0000</pubDate>
</item>
<item>
	<title>Chatsiri: ในความเก่าที่ยังไม่ลืม</title>
	<guid>http://www.chatsiri.com/636 at http://www.chatsiri.com</guid>
	<link>http://www.chatsiri.com/?q=node/636</link>
	<description>&lt;p&gt;ชีวิตผกผันเป็นเรื่องเกิดขึ้นจริงๆ เหมือนหลายๆคนที่รู้จักก็เคยเกิดเรื่องของชีวิตที่ผักผัน มันเปลี่ยนหน้าตาตัวเองหรือแนวคิดตัวเองจากหน้ามือเป็นหลังมือ การย้ำเตือนตัวเองว่าสักวันหนึ่งมันจะเกิดขึ้นกับตัวเองให้ตัวเองพึ่งระวังเอาไว้กับสิ่งที่จะเกิดขึ้นไม่ช้าก็เร็ว. เมื่อถึงจุดหนึ่งของชีวิตที่หลายอย่างไม่เป็นอย่างที่คาดหวัง มันก็เหมือนความรู้สึกและเหตุผลที่อยากให้มันเกิดขึ้น จมหายไปต่อหน้าต่อตา แม้จะเก็บความรู้สึกไว้มากสักเท่าไร สายธารของคาดหวังที่มันพังไปต่อหน้า ก็กระดังเข้ามา ความเจ็บปวดที่กัดกร่อนทำหน้าที่ของมันตามความคาดหวังอย่างที่เคยคิด และอยากจะให้เป็น การมองโลกในแง่ดีเพื่อให้ตัวเองออกจากสิ่งที่จมนั้นเหมือนกับการกล่อมตัวเองให้รอดพ้นจากแรงสายธารของความคาดหวัง มันเป็นอย่างนี้ซ้ำแล้วซ้ำอีก การมองโลกในแง่ดีแล้วไม่เป็นอย่างที่คาดหวังเราจะเจ็บปวด มันก็ไม่ได้เลวร้ายไปเสียทีเดียว มองโลกในแง่ร้ายก็ไม่ช่วยอะไรให้ดีขึ้นมาเมื่ออดีตมันผ่านพ้นไปแล้ว&lt;br /&gt;
เมื่อไรก็ตามที่ความคาดหวังพังลงนั้นเกิดขึ้นอีก ผมก็กลับมามองตัวเองถึงสิ่งที่ทำผิดพลาดไปแล้วขอร้องให้สิ่งเหล่านั้นไหลย้อนกลับมา ทั้งที่ความจริงแล้วมีโอกาสเพียงครั้งเดียว.&lt;br /&gt;
อะไรหลายอย่างไม่ได้เป็นอย่างที่คาดหวังมันจะพังไปตรงหน้า เราจะมองโลกด้านเดียว มันเป็นไปไม่ได้ หากหันหน้าคุยกันแล้วเส้นทางที่ตกลงกันนั้นทำให้อีกฝ่ายต้องเสียใจ มันก็เจ็บใจด้วยกันทั้งนั้น. คนเรามีทางต้องเดินต่อไปข้างหน้า ความทรงจำที่โกธรแค้นไม่ได้ช่วยให้เราก้าวไปได้อย่างมีความสุข เพราะความเจ็บปวดมันเกิดขึ้นทุกครั้งที่โกธรแค้น อย่าให้ชีวิตเราต้องติดกับสิ่งนี้ แม้จะต้องเดินไปข้างหน้า แต่อย่าลืมเงาแห่งอดีต มันต้องเข้าใจวา่อะไรเกิดขึ้น สิ่งที่เกิดขึ้นคืออะไร การอยู่อย่างเข้าใจทำให้มองเห็นอะไรในอีกมุมมองหนึ่ง ถึงมันจะแย่ แต่อย่างน้อยเราก็เข้าใจเพียงแต่มันแก้ไขไม่ได้ เพราะตัวแปรเหล่านั้นไม่ใชตัวแปรที่เราควบคุมได้ หากเป็นอนาคตที่คาดหวังมันก็เป็นตัวแปรที่ยากจะควบคุม.&lt;br /&gt;
ถ้าวันไหนที่หัวใจตัวเองล้มเหลวลงไป ก็กล่อมใจตัวเองว่าอดีตคือสิ่งที่สอน การก้าวต่อไปคือสิ่งที่ขอให้เกิดขึ้น &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
หากถามว่าอะไรคือสิ่งสุดท้ายที่จะขอให้เหลืออยู่ แม้จะมีตำหนิในสิ่งนั้น ก็ขอให้ก้าวต่อไป.
&lt;/p&gt;&lt;/blockquote&gt;</description>
	<pubDate>Mon, 07 May 2012 16:45:46 +0000</pubDate>
</item>
<item>
	<title>bact: อย่าโทษคนนำสาร Don’t shoot the messenger</title>
	<guid>http://bact.cc/?p=3191</guid>
	<link>http://feedproxy.google.com/~r/bact/~3/13iBuFNxOnk/</link>
	<description>&lt;p&gt;&lt;a href=&quot;https://thainetizen.org/2012/04/roundup-jiew-case/&quot;&gt;&lt;img src=&quot;http://bact.cc/f/2012/04/dont-shoot-messenger-little-mailman-of-bayberry-lane-300x300.jpg&quot; title=&quot;อย่าโทษคนนำสาร&quot; height=&quot;300&quot; width=&quot;300&quot; alt=&quot;Don't shoot the messenger&quot; class=&quot;aligncenter size-medium wp-image-3192&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Follows &lt;a href=&quot;http://twitter.com/#!/search/%23freejiew&quot;&gt;#freejiew&lt;/a&gt; for updates on &lt;a href=&quot;https://thainetizen.org/2012/04/factsheet-on-thai-internet-liability-case-prachatai-web-director-2/&quot;&gt;Prachatai’s director verdict&lt;/a&gt;. Case details at &lt;a href=&quot;http://freedom.ilaw.or.th/case/112&quot;&gt;freedom.ilaw.or.th&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/WdxURu4avcb8xmI7hU5QAbmYmU8/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/WdxURu4avcb8xmI7hU5QAbmYmU8/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/WdxURu4avcb8xmI7hU5QAbmYmU8/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/WdxURu4avcb8xmI7hU5QAbmYmU8/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/bact/~4/13iBuFNxOnk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 29 Apr 2012 19:44:27 +0000</pubDate>
</item>
<item>
	<title>Sothorn: สิ่งที่ควรทำหลังติดตั้ง Ubuntu 12.04</title>
	<guid>http://linux.sothorn.org/939 at http://linux.sothorn.org</guid>
	<link>http://linux.sothorn.org/node/939</link>
	<description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://www.ubuntuvibes.com/2012/04/things-to-do-after-installing-ubuntu.html&quot; target=&quot;_blank&quot;&gt;http://www.ubuntuvibes.com/2012/04/things-to-do-after-installing-ubuntu.html&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;service-links&quot;&gt;&lt;a title=&quot;Tweet This&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/939&amp;amp;count=horizontal&amp;amp;via=LinuxDotSothorn&amp;amp;text=%E0%B8%AA%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%20Ubuntu%2012.04&amp;amp;counturl=http%3A//linux.sothorn.org/node/939&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;twitter-share-button service-links-twitter-widget&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Tweet Widget&lt;/span&gt;&lt;/a&gt; &lt;a title=&quot;Share this on Twitter&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/939&amp;amp;text=%E0%B8%AA%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%20Ubuntu%2012.04&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-twitter&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/twitter.png&quot; alt=&quot;Twitter&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;I Like it&quot; href=&quot;http://www.facebook.com/plugins/like.php?href=http%3A//linux.sothorn.org/node/939&amp;amp;layout=button_count&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;width=100&amp;amp;height=21&amp;amp;font=&amp;amp;locale=&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook-like&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Facebook Like&lt;/span&gt;&lt;/a&gt; &lt;a title=&quot;Share on Facebook.&quot; href=&quot;http://www.facebook.com/sharer.php?u=http%3A//linux.sothorn.org/node/939&amp;amp;t=%E0%B8%AA%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%20Ubuntu%2012.04&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/facebook.png&quot; alt=&quot;Facebook&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul class=&quot;links inline&quot;&gt;&lt;li class=&quot;service-links-facebook first&quot;&gt;&lt;a title=&quot;Share on Facebook.&quot; href=&quot;http://www.facebook.com/sharer.php?u=http%3A//linux.sothorn.org/node/939&amp;amp;t=%E0%B8%AA%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%20Ubuntu%2012.04&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/facebook.png&quot; alt=&quot;Facebook&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;service-links-twitter&quot;&gt;&lt;a title=&quot;Share this on Twitter&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/939&amp;amp;text=%E0%B8%AA%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%20Ubuntu%2012.04&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-twitter&quot;&gt;&lt;img src=&quot;http://linux.sothorn.org/sites/all/modules/service_links/images/twitter.png&quot; alt=&quot;Twitter&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;service-links-facebook-like&quot;&gt;&lt;a title=&quot;I Like it&quot; href=&quot;http://www.facebook.com/plugins/like.php?href=http%3A//linux.sothorn.org/node/939&amp;amp;layout=button_count&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;width=100&amp;amp;height=21&amp;amp;font=&amp;amp;locale=&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;service-links-facebook-like&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Facebook Like&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;service-links-twitter-widget last&quot;&gt;&lt;a title=&quot;Tweet This&quot; href=&quot;http://twitter.com/share?url=http%3A//linux.sothorn.org/node/939&amp;amp;count=horizontal&amp;amp;via=LinuxDotSothorn&amp;amp;text=%E0%B8%AA%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%97%E0%B8%B3%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%20Ubuntu%2012.04&amp;amp;counturl=http%3A//linux.sothorn.org/node/939&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;twitter-share-button service-links-twitter-widget&quot;&gt;&lt;span class=&quot;element-invisible&quot;&gt;Tweet Widget&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Fri, 27 Apr 2012 11:02:50 +0000</pubDate>
</item>
<item>
	<title>Udomsak: Fix yii framework lighttpd +  php-fpm  date_default_timezone_set()</title>
	<guid>tag:blogger.com,1999:blog-11937176.post-8234251167836011166</guid>
	<link>http://udomsak.blogspot.com/2012/04/fix-yii-framework-lighttpd-php-fpm.html</link>
	<description>php-fpm  error yii framework  date_timezone_function&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Problem  &lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;i use lighttpd with &lt;a href=&quot;http://php-fpm.org/&quot; target=&quot;_blank&quot;&gt;php-fpm&lt;/a&gt; ( FastCGI Process Manager )  ( php-fpm )  and install yii framework.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Chive is mysql management web-ui tool  after install it's error with  ..&lt;br /&gt;&lt;br /&gt;&quot;&lt;br /&gt;&lt;br /&gt;&lt;h1 style=&quot;color: red; font-family: Verdana; font-size: 18pt; font-weight: normal;&quot;&gt;  Internal Server Error&lt;/h1&gt;&lt;h2 style=&quot;color: maroon; font-family: Verdana; font-size: 14pt; font-weight: normal;&quot;&gt;  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function... &quot; &lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://1.bp.blogspot.com/-gaOHlVsfPvI/T4-JNRYso9I/AAAAAAAABnM/82tNRmbc4B0/s1600/$d_126.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/-gaOHlVsfPvI/T4-JNRYso9I/AAAAAAAABnM/82tNRmbc4B0/s640/$d_126.png&quot; height=&quot;96&quot; border=&quot;0&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Solve.&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#edit  /etc/php.ini&lt;br /&gt;&lt;br /&gt;edit  date.timezone = 'Asia/Bangkok'  ; this my case&lt;br /&gt;&lt;br /&gt;restart php-fpm&lt;br /&gt;&lt;br /&gt;fixed. :)&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://3.bp.blogspot.com/-ReyBMXjDOkk/T4-JkwlZLPI/AAAAAAAABnU/-sz5EZWI4LM/s1600/$d_125.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/-ReyBMXjDOkk/T4-JkwlZLPI/AAAAAAAABnU/-sz5EZWI4LM/s640/$d_125.png&quot; height=&quot;433&quot; border=&quot;0&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;My site Article and Topic&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/11937176-8234251167836011166?l=udomsak.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 19 Apr 2012 03:44:29 +0000</pubDate>
	<author>noreply@blogger.com (udomsakc)</author>
</item>
<item>
	<title>Udomsak: อากาศร้อนๆ ของบ่ายวันที่ 14 เมษายน 2555 15.58</title>
	<guid>tag:blogger.com,1999:blog-11937176.post-6583571499979902313</guid>
	<link>http://udomsak.blogspot.com/2012/04/14-2555-1558.html</link>
	<description>&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ยังไม่ถึงกับประกาศเป็นทางการนักในการเลิกบุหรี่  จากที่ซื้อเกือบทุกวัน ซองละ 140 รวมค่ารถถ่อไปซื้อ  คงลด ละ เลิก ตาม step ไป  บุหร่ที่สูบคือ Marlboro CRIP MINT ( ซองสีเงิน ) เพราะกลิ่นมันเบา สลายตัวง่าย ถ้าดูด มากๆ คนอยู่ใกล้ จะไม่เหมนเขียว หรือ ได้กลิ่นมากนัก&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;ว่าจะ up &amp;amp; setup Zimbra server version 7  ยังไม่ได้ทำ คงนั่งทำคืนนี้แหละ  ( อากาศมันร้อน  คือ ข้ออ้าง )&lt;br /&gt;&lt;/li&gt;&lt;li&gt;อะไร หลายๆ อย่าง ที่ได้ข้อคิด จาการนั่งอาน blog ชาวบ้าน&lt;br /&gt;&lt;/li&gt;&lt;li&gt;คงต้องปรับ mode การ focus กับ เรื่องบางเรื่อง หรือ หลาย เรื่องๆ  เพื่อให้ความต่อเนื่องมันเกิด  หรือ แจ้งเตือนสำหรับบางเรื่อง เพื่อจะได้มี สมาธิในการทำงาน&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ที่ไม่ post ใน facebook เพราะแม่ตามอ่าน งานจะเข้าได้ &lt;br /&gt; &lt;/li&gt;&lt;li&gt;โต๊ะทำงาน ต้อง cleaning มันซะที เพราะรู้ว่าัมันรก จนหาที่ติไม่ได้&lt;br /&gt;&lt;/li&gt;&lt;li&gt;เรื่อง task เวลาต้องทำให้มันดีกว่านี้  จริงที่บางคนบอกว่า การแบ่งเวลาถือเป็นความอัจฉริยะภาพอย่างนึ และ เราขาดไป &lt;br /&gt;&lt;/li&gt;&lt;li&gt;ไม่อยากจะทะเลาะกับคนที่เรารัก &lt;strike&gt; และ ไม่ถึงกับยอมทุกอย่างไป&lt;/strike&gt; แต่ตั้งใจเอาไว้ ไม่อยากทะเลาะกันเลย &lt;strike&gt; ไม่ว่าจะเรื่องอะไร&lt;/strike&gt;  อันนี้สำคัญ &lt;strike&gt; เพราะมันฉุดกำลังด้าน อื่นๆ หมด ไ่ม่ได้โทษคนอื่นนะ แต่ โทษตัวเราเองนี่แหละ  &lt;/strike&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ซือ้หนังสือ พี่ตน มาอ่าน 1 เล่ม ( คุณตันมาอ่าน เมื่อวาน เพื่อรอดูหนัง Battle ship คนเดียวอีกตามเคย )&lt;br /&gt;&lt;/li&gt;&lt;li&gt;จะ่อ่าน blog นี้ได้ คงต้อง google อย่างเดียว &lt;br /&gt; &lt;/li&gt;&lt;li&gt;กาแฟสด ว่าจะเลิกกิน หันมาบริหาร การพักผ่อนของร่างกาย แทน ว่าจะมีทางไหนชดเชยได้บ้าง  กาแฟกระป๋อง ที่บอกว่า เอาอยู่ กัน สำหรับผมปริมาณมันไม่พอ สำหรับต้านการนอนหลับได้  คงต้องฝึกวิธีที่เขาใช้กันมากว่า หลายพันปีแล้ว ดูขลัง แต่ทำยากนะ  ปกติผมกินกาแฟ สด 2 - 5 shot ต่อวัน &lt;br /&gt;  &lt;/li&gt;&lt;li&gt;พบว่า การกินแป้ง หรือ น้ำตาลมากเกินไปทำให้ง่วงนอนได้   ฉะนั้นการกินกาแฟกระป๋องที่ผสมน้ำตาลมาก และ คาเฟอีนต่ำ ทำให้ง่วงนอนได้อีกเหมือนกัน&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ผมนอนดึกเป็นประจำไม่งานคอมฯ ก็เรื่องอ่าน feed ขาว สังเกตุได้ว่า พออยู่กับงานมากเกินไป สมองมักคิดไม่ออก ต้องหาอะไรที่มันไร้สาระบ้าง มันจะอ่านหรือจำได้ดีกว่า&lt;br /&gt;&lt;/li&gt;&lt;li&gt;อันนี้สำคัญไม่เคยโทษใครเป็นต้นเหตุให้นอนดึก หรือ เสียสุขภาพ หรือ อะไรต่างๆ นาๆ&lt;br /&gt;&lt;/li&gt;&lt;li&gt;วันที่ 17 เมษายน 2555  ประชุมกันอีกรอบ หลายฝ่ายอยากได้ตัว demo ทดลองใช้ของ Zimbra ในสภาพใกล้เคียงกับของจริง&lt;br /&gt;&lt;/li&gt;&lt;li&gt;คอมฯ เพื่อชุมชน อยากจะทำหัลังจากขายฝันมานานล่ะ   Software Service  for Disaster อยากลงมือนั่งทำจริงๆ เสียที&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alfresco คงเป็นโปรเจ็กต์งาน ขนานกันไป เพื่อให้ทัน ในเดือน กันยายายนนี้ ดันเขียนใส่ IADP อีก ทั้งๆ ที่  resouce project ไม่พอ ผลคือ ก็ต้องอยู่ ดึกนอนดึก สมองเครียด อีกตามเคย&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;My site Article and Topic&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/11937176-6583571499979902313?l=udomsak.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 15 Apr 2012 09:20:00 +0000</pubDate>
	<author>noreply@blogger.com (udomsakc)</author>
</item>
<item>
	<title>Chatsiri: Final classroom, Algorithm Design &amp; Analysis</title>
	<guid>http://www.chatsiri.com/634 at http://www.chatsiri.com</guid>
	<link>http://www.chatsiri.com/?q=node/634</link>
	<description>&lt;blockquote&gt;&lt;p&gt;
&lt;a href=&quot;http://www.flickr.com/photos/chatsiristreams/6933482060/&quot; title=&quot;Algorithm design by Chatsiri.rat, on Flickr&quot;&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7092/6933482060_46ed6b4807.jpg&quot; alt=&quot;Algorithm design&quot; height=&quot;281&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
After sending final exam paper.15/04/2012&lt;br /&gt;
&amp;lt;/blockqoute&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;a href=&quot;http://www.cs.uiuc.edu/~jeffe/teaching/algorithms/&quot;&gt;Jeff Erickson's,Algorithms Course&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.cpe.ku.ac.th/~paruj/204512/204512.html&quot;&gt;Lecture By Aj.Paruj&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
	<pubDate>Tue, 10 Apr 2012 16:57:42 +0000</pubDate>
</item>
<item>
	<title>Thep: ThaiLaTeX Hyphenation Fine-tuning</title>
	<guid>tag:blogger.com,1999:blog-6815053.post-2509138306812037138</guid>
	<link>http://thep.blogspot.com/2012/03/thailatex-hyphenation-fine-tuning.html</link>
	<description>&lt;p&gt;ที่ผมเล่าใน &lt;a href=&quot;http://thep.blogspot.com/2012/03/thailatex-hyphenation.html&quot;&gt;blog ที่แล้ว&lt;/a&gt; ถึงการทำ hyphenation pattern สำหรับ TeX โดยใช้ &lt;a href=&quot;http://www.tug.org/docs/liang/&quot;&gt;patgen&lt;/a&gt; และใช้ค่าพารามิเตอร์จาก &lt;a href=&quot;http://www.fi.muni.cz/~xantos/patlib/thesis/thesis-p.pdf&quot;&gt;วิทยานิพนธ์ของ David Antoš&lt;/a&gt; นั้น เป็นการทดลองแบบ black box โดยที่ยังไม่เข้าใจโครงสร้างภายในของ patgen แต่เป็น proof-of-concept อีกขั้นหนึ่งเท่านั้น&lt;/p&gt;

&lt;p&gt;หลังจากนั้น ผมก็ได้ศึกษาหลักการของ patgen โดยอ่าน &lt;a href=&quot;http://www.tug.org/docs/liang/&quot;&gt;วิทยานิพนธ์ของ Franklin Mark Liang&lt;/a&gt; จนพอเข้าใจหลักการ จึงสามารถนำมาปรับวิธีสร้าง pattern ของเราได้&lt;/p&gt;

&lt;p&gt;Liang ได้เล่าถึงอัลกอริทึมต่าง ๆ สำหรับทำ hyphenation ที่มีอยู่ ซึ่งส่วนใหญ่จะเป็นการใช้กฎของภาษาอังกฤษ แต่งานของเขามุ่งจะสร้าง matching pattern โดยอัตโนมัติจากตัวอย่างข้อมูลที่มีอยู่ ซึ่งจะเป็นวิธีที่ไม่ขึ้นกับภาษา สามารถนำไปใช้กับภาษาใด ๆ ก็ได้&lt;/p&gt;

&lt;p&gt;pattern ที่สร้างจะอยู่ในรูป n-gram ของอักขระ พร้อมระบุจุดที่สามารถแทรกยัติภังค์ได้ โดย n-gram ที่ว่านี้จะมีความยาวเท่าไรก็ได้ ขึ้นอยู่กับความเฉพาะเจาะจงของตัว pattern&lt;/p&gt;

&lt;p&gt;ตัว pattern จะนำไปสร้างเป็น trie ทำให้ match กับข้อความได้อย่างรวดเร็ว และได้จุดที่สามารถแทรก hyphen ได้ออกมา&lt;/p&gt;

&lt;p&gt;Liang พยายามจะให้ pattern ที่ได้สามารถรับประกันได้ว่าจะแทรกยัติภังค์ได้ถูกต้องทั้งหมดสำหรับคำที่อยู่ในพจนานุกรม (ยกเว้นกรณีกำกวมอย่าง re-cord กับ rec-ord ซึ่งภาษาไทยน่าจะไม่มี) ส่วนคำที่ไม่อยู่ในพจนานุกรมก็ปล่อยให้เป็นเรื่องของการอนุมานเอาจากกฎ&lt;/p&gt;

&lt;p&gt;วิธีหนึ่งที่เป็นไปได้คือเก็บทุกคำในพจนานุกรมลงใน trie เลย แต่นั่นจะทำให้ฐานข้อมูลใหญ่โดยใช่เหตุ แต่วิธีที่ Liang เสนอคือ ให้แยกกฎเป็นสองกลุ่ม คือกฎสำหรับระบุจุดแทรก กับกฎที่เป็นข้อยกเว้นซึ่งห้ามแทรก ด้วยวิธีนี้ทำให้กฎชุดแรกสามารถอยู่ในรูปอย่างง่ายโดยไม่จำเป็นต้องถูกต้องสมบูรณ์ก็ได้ แล้วกฎชุดถัดมาจะตัดส่วนที่ผิดพลาดออกไป&lt;/p&gt;

&lt;p&gt;ทีนี้ ก็สามารถมองต่อไปได้อีก ว่ากฎชุดที่สองนี้ ก็สามารถแบ่งเป็นกฎที่ห้ามแทรก กับกฎที่เป็นข้อยกเว้นให้แทรกได้ ทำให้กฎชุดที่สองสามารถอยู่ในรูปอย่างง่ายได้อีกเช่นกัน โดยข้อยกเว้นจะช่วยเพิ่มความถูกต้องให้อีกที&lt;/p&gt;

&lt;p&gt;แล้วก็มองอย่างนี้สลับกันไปเรื่อย ๆ ก็จะได้ว่า กฎชุดที่ 1 แทรกยัติภังค์ก่อน, กฎชุดที่ 2 ลบยัติภังค์ออกจากชุดที่ 1, กฎชุดที่ 3 แทรกยัติภังค์เพิ่มจากชุดที่ 2, กฎชุดที่ 4 ลบยัติภังค์ออกจากชุดที่ 3 ฯลฯ กล่าวคือ กฎในลำดับขั้นคี่จะเป็นกฎแทรกยัติภังค์ กฎลำดับขั้นคู่จะเป็นกฎห้ามแทรกยัติภังค์ โดยกฎจะเพิ่มความละเอียดขึ้นเรื่อย ๆ จนถึงขั้นสุดท้ายที่จะได้ผลลัพธ์ที่ถูกต้อง 100% สำหรับคำที่อยู่ในพจนานุกรม ซึ่งปรากฏว่าการจัดชุดกฎแบบนี้ช่วยลดจำนวน pattern ที่ต้องใช้ลงได้มาก โดยยังคงความถูกต้องสมบูรณ์อยู่เหมือนเดิม&lt;/p&gt;

&lt;p&gt;ในการสร้างกฎแต่ละขั้น patgen จะสแกนพจนานุกรมที่เป็นตัวอย่างการแทรกยัติภังค์ เก็บ pattern ที่มีความยาวในช่วงที่กำหนด แล้วประเมิน pattern ว่าสามารถทำได้ถูกต้องกี่กรณี (คือค่า good) ผิดกี่กรณี (คือค่า bad) แล้วเอามาคูณกับ weight ที่กำหนดให้ (คือ &lt;tt&gt;good_weight&lt;/tt&gt; และ &lt;tt&gt;bad_weight&lt;/tt&gt;) หักลบส่วนที่ถูกด้วยส่วนที่ผิดแล้วเลือกเอาเฉพาะ pattern ที่เกิน threshold ที่กำหนด&lt;/p&gt;

&lt;p&gt;กล่าวคือในการสร้าง pattern แต่ละขั้น patgen จะถามค่าต่อไปนี้:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt; &lt;tt&gt;pat_start&lt;/tt&gt;, &lt;tt&gt;pat_finish&lt;/tt&gt; คือช่วงความยาว pattern ที่จะสร้าง &lt;/li&gt;
  &lt;li&gt; &lt;tt&gt;good weight&lt;/tt&gt;, &lt;tt&gt;bad weight&lt;/tt&gt;, &lt;tt&gt;threshold&lt;/tt&gt; คือน้ำหนักของความถูกต้องของกฎที่จะกรองมาใช้ &lt;tt&gt;good weight&lt;/tt&gt; คือน้ำหนักด้านการพบจุดแทรกที่ถูกต้อง (ถ้ามาก คือต้องการให้ครอบคลุมจุดที่แทรกได้ให้มากที่สุดไว้ก่อน ผิดไม่เป็นไร), &lt;tt&gt;bad weight&lt;/tt&gt; คือน้ำหนักด้านการพบจุดแทรกที่ไม่ใช่ (ถ้ามาก คือต้องการเฉพาะกฎที่ถูกต้องไว้ก่อน ไม่เน้นการครอบคลุมจุดที่แทรกได้), &lt;tt&gt;threshold&lt;/tt&gt; คือขีดต่ำสุดของคะแนนประเมินที่จะเลือกเอา pattern ไว้ &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เพื่อช่วยในการออกแบบ pattern ชั้นต่าง ๆ patgen ก็จะประเมินในขั้นสุดท้ายให้ด้วย ว่ากฎเท่าที่สร้างมา เมื่อนำกลับไปใช้กับพจนานุกรม สามารถครอบคลุมจุดแทรก (good) ไปแล้วกี่เปอร์เซนต์, มีจุดแทรกผิด (Liang เรียกว่า bad แต่เพื่อไม่ให้สับสนกับ bad weight ในที่นี้ขอเรียกว่า error) กี่เปอร์เซ็นต์ และยังมีจุดแทรกที่ยังไม่ได้แทรก (missed) กี่เปอร์เซ็นต์ (missed = 100% - good)&lt;/p&gt;

&lt;p&gt;จากการทดลองหลาย ๆ แบบ Liang เสนอว่าควรแบ่งกฎเป็น 5 ชั้น โดยมีหลักการดังนี้:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt; ชั้นสุดท้าย ให้เป็นชั้นแทรก (เลขคี่) เก็บรายละเอียดที่เหลือทั้งหมด โดยก่อนมาถึงขั้นนี้ error ควรจะเหลือศูนย์ มีแต่จะเน้นแทรกจุดที่ยังไม่ครอบคลุมเท่านั้น กฎในขั้นนี้ควรมี bad weight เป็นอนันต์ (ในทางปฏิบัติคือให้เป็นค่าสูงมาก ๆ) เพื่อให้แทรกเฉพาะจุดที่ถูกต้องโดยไม่เกิด error อีก &lt;/li&gt;
  &lt;li&gt; ชั้นรองสุดท้าย ให้เป็นชั้นกำจัดจุดแทรกผิด (เลขคู่) โดยเน้นกำจัดแหลก เพื่อให้ error เหลือศูนย์ตามที่ว่าไป ดังนั้นในขั้นนี้ควรมี threshold เป็น 1 (คือเป็นค่าน้อยที่สุด) เพื่อให้ทุกกฎได้ทำงาน และตัวกฎไม่จำเป็นต้องเน้นความถูกต้องมากนัก กล่าวคือ สามารถยอมให้กำจัดจุดที่ถูกอยู่แล้วได้ เพราะถึงอย่างไรชั้นสุดท้ายก็จะครอบคลุมที่เหลือให้ทั้งหมดอยู่แล้ว &lt;/li&gt;
  &lt;li&gt; ชั้นก่อนสองชั้นนี้ หากมีแค่ชั้นเดียวก็จะเป็นการกดดันมากเกินไป จะกลายเป็นว่าต้องการกฎละเอียดจำนวนมาก แต่ถ้าแบ่งเป็น 3 ชั้น ค่อย ๆ เพิ่มความละเอียดมากขึ้น ก็จะทำให้ได้จำนวนกฎน้อยลง &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ด้วยโครงร่างแบบนี้ จึงออกแบบกฎเป็นชั้น ๆ ดังนี้:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt; ชั้นที่ 1 กฎสั้น, เน้น bad weight เล็กน้อย, threshold สูง เพื่อคุมจำนวนกฎ &lt;/li&gt;
  &lt;li&gt; ชั้นที่ 2 กฎยาวขึ้น, เน้น good weight เล็กน้อย เพื่อเน้นลดจำนวน error ถึงแม้จะมีการกำจัด hyphen ที่ถูกออกบ้างก็ไม่เป็นไร ยังมีชั้นที่ 3 ช่วยเติมให้, threshold ลดหลั่นลงจากชั้นที่ 1 เพราะกรณีเหลือน้อยลง สามารถปล่อยกฎผ่านได้มากขึ้น &lt;/li&gt;
  &lt;li&gt; ชั้นที่ 3 กฎยาวขึ้นอีก, เน้น bad weight กว่าชั้นที่ 1 ตามระดับความละเอียดของเนื้องาน, threshold ลดหลั่นลงจากชั้นที่ 2 &lt;/li&gt;
  &lt;li&gt; ชั้นที่ 4 (รองสุดท้าย) กฎยาวขึ้นอีก, good/bad weight สูสีกัน (แต่ good weight ควรมากกว่า bad weight คล้ายชั้นที่ 2), threshold ควรเป็น 1 (ค่าที่น้อยที่สุด) ตามที่อธิบายไปข้างต้น &lt;/li&gt;
  &lt;li&gt; ชั้นที่ 5 (ชั้นสุดท้าย) กฎยาวขึ้นอีก, bad weight เป็นอนันต์ (ค่าสูง ๆ), threshold เป็น 1 เพื่อให้ทุกกฎทำงาน &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Liang บอกว่าไม่มีทฤษฎีอะไรมากกว่านี้อีกแล้ว ที่เหลือต้องทดลอง ทดลอง และทดลอง เพื่อหาพารามิเตอร์ที่ดีที่สุดของข้อมูล ซึ่งผมก็ต้องทดลองปรับค่าต่าง ๆ ทีละนิด หนักเอาการอยู่ จนกระทั่งได้ค่าที่คิดว่าเหมาะที่สุดเท่าที่เจอมาสำหรับข้อมูลพจนานุกรม libthai ที่ใช้แล้ว คือ:&lt;/p&gt;

&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
  &lt;th&gt;level&lt;/th&gt;
  &lt;th&gt;good wt.&lt;/th&gt;
  &lt;th&gt;bad wt.&lt;/th&gt;
  &lt;th&gt;thres.&lt;/th&gt;
  &lt;th&gt;pats added&lt;/th&gt;
  &lt;th&gt;% good&lt;/th&gt;
  &lt;th&gt;% errors&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;1&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;6&lt;/td&gt; &lt;td&gt;375&lt;/td&gt; &lt;td&gt;90.30&lt;/td&gt; &lt;td&gt;10.61&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;4&lt;/td&gt; &lt;td&gt;250&lt;/td&gt; &lt;td&gt;88.88&lt;/td&gt; &lt;td&gt;1.61&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;3&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;524&lt;/td&gt; &lt;td&gt;96.21&lt;/td&gt; &lt;td&gt;1.66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;4&lt;/td&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;295&lt;/td&gt; &lt;td&gt;95.98&lt;/td&gt; &lt;td&gt;0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;5&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;5&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;726&lt;/td&gt; &lt;td&gt;100.00&lt;/td&gt; &lt;td&gt;0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;th colspan=&quot;4&quot;&gt;Total patterns&lt;/th&gt; &lt;td&gt;2170&lt;/td&gt; &lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;เทียบกับพารามิเตอร์เดิมที่ใช้ ได้จำนวน pattern ทั้งหมด 3029 ก็ลดจำนวน pattern ลงมาได้ราว 28%&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://linux.thai.net/websvn/wsvn/software.thailatex?op=comp&amp;amp;compare[]=%2Ftrunk@374&amp;amp;compare[]=%2Ftrunk@375&quot;&gt;commit เข้า SVN&lt;/a&gt; ไปแล้วครับ คิดว่าอีกไม่นานคง release มาให้ทดลองใช้กัน&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/6815053-2509138306812037138?l=thep.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 28 Mar 2012 11:00:00 +0000</pubDate>
	<author>noreply@blogger.com (Thep)</author>
</item>
<item>
	<title>Thep: ThaiLaTeX Hyphenation</title>
	<guid>tag:blogger.com,1999:blog-6815053.post-1238464071044195548</guid>
	<link>http://thep.blogspot.com/2012/03/thailatex-hyphenation.html</link>
	<description>&lt;p&gt;จากที่ได้ &lt;a href=&quot;http://thep.blogspot.com/2012/02/butterfly-in-thailatex.html&quot;&gt;blog ครั้งล่าสุด&lt;/a&gt; เกี่ยวกับ ThaiLaTeX ผมก็ได้ออกรุ่นซอฟต์แวร์ทั้งหมดที่เกี่ยวข้องไปแล้วตั้งแต่กลางเดือนกุมภา คือ &lt;a href=&quot;http://linux.thai.net/node/252&quot;&gt;Fonts-TLWG 0.5.0&lt;/a&gt; และ &lt;a href=&quot;http://linux.thai.net/node/253&quot;&gt;Fonts-SIPA-Arundina 0.2.0&lt;/a&gt; ซึ่งได้เปลี่ยนชื่อโครงการด้วย แล้วก็ตามด้วย &lt;a href=&quot;http://linux.thai.net/node/254&quot;&gt;ThaiLaTeX 0.4.7&lt;/a&gt; ในคราวเดียวกัน เผอิญว่าติดธุระส่วนตัวมากจนไม่สามารถหาเวลานั่งเขียน blog ได้&lt;/p&gt;

&lt;p&gt;เกี่ยวกับการเปลี่ยนชื่อโครงการฟอนต์ทั้งสองนี้ ก็ด้วยเหตุว่ามีการเปลี่ยนชื่อที่ปลายน้ำหลายจุดไปในทางเดียวกัน ไม่ว่าจะเป็นที่ Debian หรือ CTAN โดยสำหรับ Debian นั้น &lt;a href=&quot;https://alioth.debian.org/projects/pkg-fonts&quot;&gt;กลุ่มผู้ดูแลแพกเกจฟอนต์ของ Debian&lt;/a&gt; ได้กำหนดวิธีการตั้งชื่อแพกเกจฟอนต์ใหม่ ซึ่งก็ได้รับแรงบันดาลใจมาจาก Fedora อีกต่อหนึ่ง ส่วนที่ CTAN นั้น เขาต้องการชื่อแพกเกจที่สอดคล้องกันกับชื่อ style file ที่ติดตั้ง และไดเรกทอรีที่ติดตั้ง ควรมีเอกภาพเป็นชื่อเดียว ซึ่งก็ได้เลือกชื่อ &lt;q&gt;fonts-tlwg&lt;/q&gt; สำหรับโครงการ ThaiFonts-Scalable อีกอย่าง ตอนนี้ linux.thai.net ก็ได้โฮสต์โครงการฟอนต์หลายโครงการ การตั้งชื่อที่กว้างเกินไปอย่าง &lt;q&gt;ThaiFonts-Scalable&lt;/q&gt; ย่อมไม่เหมาะสมอีกต่อไป จึงได้เปลี่ยนชื่อเป็น &lt;q&gt;Fonts-TLWG&lt;/q&gt; และฟอนต์ชุด Arundina ก็เปลี่ยนเป็น &lt;q&gt;Fonts-SIPA-Arundina&lt;/q&gt; ในทำนองเดียวกัน&lt;/p&gt;

&lt;p&gt;หลังจากที่เสร็จงานชุดนั้นไป ผมก็ได้นำประเด็นเรื่อง hyphenation ที่ได้ &lt;a href=&quot;http://thep.blogspot.com/2011/12/thailatex-wbr-quotation-and-special.html&quot;&gt;คิดไว้&lt;/a&gt; ขึ้นมาพิจารณา โดยหารือร่วมกับนักพัฒนาในการประชุมระดมสมองโอเพนซอร์สภาษาไทยที่พัทยา เมื่อกลับมาแล้วก็ตกลงใจว่าจะเริ่มเดินหน้าต่อเลย&lt;/p&gt;

&lt;p&gt;แนวทางที่คุยกันไว้นั้น เป็นไปได้หลายวิธี:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt; ทำ hyphenation pattern สำหรับ TeX โดยใช้ &lt;a href=&quot;http://www.tug.org/docs/liang/&quot;&gt;patgen&lt;/a&gt; &lt;/li&gt;
  &lt;li&gt; ปรับ &lt;a href=&quot;http://linux.thai.net/projects/swath&quot;&gt;swath&lt;/a&gt; ให้แทรก soft hyphen (&lt;q&gt;&lt;tt&gt;\-&lt;/tt&gt;&lt;/q&gt; สำหรับ TeX) ด้วย &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับทางเลือกแรกที่ทำ pattern สำหรับ TeX นั้น หากทำสำเร็จจะสามารถใช้กับโครงการอื่น เช่น &lt;a href=&quot;https://xmlgraphics.apache.org/fop/&quot;&gt;FOP&lt;/a&gt; ของ Apache รวมถึง LibreOffice ด้วย&lt;/p&gt;

&lt;p&gt;ผมเริ่มจากทางแรกก่อน โดยอาศัย word list ของ libthai มาแทรกยัติภังค์ที่จุดที่เป็นไปได้ แล้วป้อนเข้า patgen สร้างเป็น hyphenation pattern ออกมา แล้วติดตั้งลงใน TeX ปรากฏว่าผลที่ได้เป็นที่น่าพอใจพอสมควร ดังตัวอย่างเปรียบเทียบการจัดย่อหน้าโดยใช้และไม่ใช้ยัติภังค์:&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://linux.thai.net/~thep/shots/20120307-latex-hyphen-comp.png&quot; alt=&quot;เปรียบเทียบผลจาก hyphenation&quot; title=&quot;เปรียบเทียบผลจาก hyphenation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;จะเห็นว่าช่องไฟที่โบ๋ ๆ ลดน้อยลง และทำให้ย่อหน้ากระชับเข้ามาอีก เมื่อสังเกตจุดตัดบรรทัดก็จะพบว่า TeX คำนวณจุดแบ่งบรรทัดโดยมองภาพรวมทั้งย่อหน้า ไม่ใช่คำนวณทีละบรรทัด&lt;/p&gt;

&lt;p&gt;นี่เป็นผลในขั้นแรก ซึ่งได้ commit เข้าใน trunk ของ SVN ของ &lt;a href=&quot;http://linux.thai.net/projects/thailatex&quot;&gt;thailatex&lt;/a&gt; แล้ว โดยที่ผมยืมค่าพารามิเตอร์สำหรับ patgen มาจาก &lt;a href=&quot;http://www.fi.muni.cz/~xantos/patlib/thesis/thesis-p.pdf&quot;&gt;วิทยานิพนธ์ชิ้นหนึ่ง&lt;/a&gt; โดยยังไม่ได้ปรับละเอียดเองตามข้อมูลที่มี ซึ่งตรงนี้คงหาเวลาทำในโอกาสต่อไป&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/6815053-1238464071044195548?l=thep.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 08 Mar 2012 13:11:00 +0000</pubDate>
	<author>noreply@blogger.com (Thep)</author>
</item>
<item>
	<title>Prach: My GPG key transition</title>
	<guid>tag:blogger.com,1999:blog-7775277.post-5044132523867466545</guid>
	<link>http://prach-public.blogspot.com/2012/02/my-gpg-key-transition.html</link>
	<description>&lt;pre&gt;&lt;center&gt;&lt;br /&gt;&lt;textarea style=&quot;height: 391px; width: 664px;&quot; rows=&quot;20&quot; cols=&quot;80&quot;&gt;-----BEGIN PGP SIGNED MESSAGE-----&amp;lt;br /&amp;gt;Hash: SHA1,SHA256&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;I am transitioning GPG keys from an old 1024-bit DSA key to a new&amp;lt;br /&amp;gt;4096-bit RSA key.  The old key will continue to be valid for some time,&amp;lt;br /&amp;gt;but I prefer all new correspondance to be encrypted in the new key, and&amp;lt;br /&amp;gt;will be making all signatures going forward with the new key.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;This transition document is signed with both keys to validate the&amp;lt;br /&amp;gt;transition.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;If you have signed my old key, I would appreciate signatures on my new&amp;lt;br /&amp;gt;key as well, provided that your signing policy permits that without&amp;lt;br /&amp;gt;reauthenticating me.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The old key, which I am transitional away from, is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;pub   1024D/434FC0E1 2006-10-05&amp;lt;br /&amp;gt;      Key fingerprint = 8265 4029 F8D3 E5DA 78A8  EBE7 EBFB 1CA7 434F C0E1&amp;lt;br /&amp;gt;uid                  Prach Pongpanich &amp;lt;prachpub@gmail.com&amp;gt;&amp;lt;br /&amp;gt;sub   2048g/06D96D8C 2006-10-05&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The new key, to which I am transitioning, is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;pub   4096R/23CE1C09 2012-02-26&amp;lt;br /&amp;gt;      Key fingerprint = 0CA7 5D98 7B8E CF6E A944  3AD8 3909 1E81 23CE 1C09&amp;lt;br /&amp;gt;uid                  Prach Pongpanich &amp;lt;prachpub@gmail.com&amp;gt;&amp;lt;br /&amp;gt;sub   4096R/0264D936 2012-02-26&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;To fetch the full new key from a public key server using GnuPG, run:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  gpg --keyserver pgp.mit.edu --recv-key 23CE1C09&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;If you have already validated my old key, you can then validate that the&amp;lt;br /&amp;gt;new key is signed by my old key:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  gpg --check-sigs 23CE1C09&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Regard,&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Prach Pongpanich&amp;lt;br /&amp;gt;26 Feb 2012&amp;lt;br /&amp;gt;-----BEGIN PGP SIGNATURE-----&amp;lt;br /&amp;gt;Version: GnuPG v1.4.11 (GNU/Linux)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;iEYEARECAAYFAk9KL+YACgkQ6/scp0NPwOH+HwCfYkvxSg0MIEFi7DskjKUXeztA&amp;lt;br /&amp;gt;ZYMAoLw8xqGpgq4rPk1rYUjOV3Zq027qiQIcBAEBCAAGBQJPSi/mAAoJEDkJHoEj&amp;lt;br /&amp;gt;zhwJf2kQALX1xybcBAzo7nJ0jCI4QOAFOvuJXIVu0oAfea6Px6nrZjzbC2hgVj/4&amp;lt;br /&amp;gt;CKFDZT/8eItTcIBPgyNQ83wLZt/JNf3ZpcbYcMImEu9DroD6pBbHDV7S5+EZsduJ&amp;lt;br /&amp;gt;fMzI04RBERncR5iLnyDr9G+pMBcUGpedJSidRjgTV1yPheNIBM+hMVWqyZLUJthf&amp;lt;br /&amp;gt;984SYJuFwq4uHPOnPwyX2ZITI1axvhVop8CRvZ9sHLmgiZ9Y0V1H8HKGMQxRjM1J&amp;lt;br /&amp;gt;08BV8XBHC21oR6JrGUv2vTklZUyA7e1E5j+ueAwZ5tqoN9WdJ1xkFfPoe3Pf1Ypq&amp;lt;br /&amp;gt;ONCDHUqTeFiIJGkfNpw1C4yMQ3zwZma6Ixc1wJiHAFH1dbiVWAugpnmVl/d8jKYa&amp;lt;br /&amp;gt;7Vk2VLJL7b3oltMNt1uMJ5u7/hRDOvSYJiqYElMPuvqq/9ElxCKN2yz43vTrOZ4h&amp;lt;br /&amp;gt;aPDdYWgmRv1wPzxR/2NNQU3Dcd3YXGvi1YXgaqVbDvg1Sx9X0aVH6wKLl0CYTsm5&amp;lt;br /&amp;gt;8o+2CWCeWloPZhHzTKTjAaWapQGueXQC1sMO5ZvnPaIeoOaSshsHnYwcugqfiLy/&amp;lt;br /&amp;gt;NRycYfuO9hCOoOBWN2/bZQ3+WFpxaURe5HUjuuTw6F5Oe9O3Pxovc/cfPY//cu9N&amp;lt;br /&amp;gt;2hB+PLT+vvQAhDUK2WTwiIH/OkiMmKofVKmDROdOfE3xSVTxoocE&amp;lt;br /&amp;gt;=Sdls&amp;lt;br /&amp;gt;-----END PGP SIGNATURE-----&amp;lt;br /&amp;gt;&lt;/textarea&gt;&lt;/center&gt; &lt;/pre&gt;&lt;pre&gt;&lt;a href=&quot;http://linux.sut.ac.th/prach/gpg-transition-prach.txt.asc&quot;&gt;http://linux.sut.ac.th/prach/gpg-transition-prach.txt.asc&lt;/a&gt;  &amp;lt;- Signed with both keys&lt;/pre&gt;&lt;pre&gt;&lt;a href=&quot;http://debianclub.org/node/539&quot;&gt;http://debianclub.org/node/539&lt;/a&gt; &amp;lt;- Key-Singing&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/7775277-5044132523867466545?l=prach-public.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 27 Feb 2012 07:14:59 +0000</pubDate>
	<author>noreply@blogger.com (Prach Pongpanich)</author>
</item>
<item>
	<title>Kitt: งานมหกรรมหนังสือระดับชาติ ครั้งที่ 16 ณ ศูนย์การประชุมแห่งชาติสิริกิติ์</title>
	<guid>http://kitty.in.th/index.php/2011/10/26/10135/</guid>
	<link>http://kitty.in.th/index.php/2011/10/26/bookfair-16/</link>
	<description>&lt;p&gt;จริงๆ แล้วไม่ได้ไป แต่สั่งออนไลน์ของ บลิสพับฯ เอา ได้ราคาเดียวกันกับในงาน&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://kitty.in.th/wp-content/uploads/2011/10/20111026-093450.jpg&quot; alt=&quot;20111026-093450.jpg&quot; height=&quot;360&quot; class=&quot;alignnone size-full&quot; width=&quot;482&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;คินดะอิจิยอดนักสืบ ตอนที่ 24 ขาวกับดำ – ปก 260 สมาชิก 196&lt;/li&gt;
&lt;li&gt;คินดะอิจิยอดนักสืบ ตอนที่ 25 คริสต์มาสซาตาน – ปก 185 สมาชิก 130&lt;/li&gt;
&lt;li&gt;UNFAIR ฆาตกรรม (ไม่)อำพราง 2 – ปก 175 สมาชิก 123&lt;/li&gt;
&lt;li&gt;UNFAIR ฆาตกรรม (ไม่)อำพราง 3 – ปก 180 สมาชิก 126&lt;/li&gt;
&lt;li&gt;มิเกะเนะโกะ โฮล์มส์ แมวสามสียอดนักสืบ ตอนที่ 19 โรงแรมสนธยา – 175 สมาชิก 123&lt;/li&gt;
&lt;li&gt;ซายากะ สาวน้อยนักสืบ 14 ตอน เพลงกล่องสีเทาเหลือบเขียว – 175 สมาชิก 123&lt;/li&gt;
&lt;li&gt;ยาคุโมะ นักสืบวิญญาณ ตอนที่ 5 สายใยแห่งโชคชะตา – 225 สมาชิก 158&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ช่วงน้ำท่วมไปรษณีย์ก็ยังส่งของได้ตามปกติไม่มีล่าช้า :D&lt;/p&gt;
&lt;p&gt;วันนี้ – 4 พ.ย. มีงานหนังสือ KKU Book Fair ที่ Complex มข. นะครับ :)&lt;/p&gt;</description>
	<pubDate>Sun, 26 Feb 2012 14:31:18 +0000</pubDate>
</item>
<item>
	<title>Neutron: I'm now a Debian Maintainer</title>
	<guid>http://www.neutron.in.th/25 at http://www.neutron.in.th</guid>
	<link>http://www.neutron.in.th/content/im-now-debian-maintainer</link>
	<description>&lt;p&gt;For a few years that I have involved in Debian as a new maintainer. I have maintained some packages, &quot;xiterm+thai&quot;, &quot;flvmeta&quot; and also the new ITP &quot;ipset&quot;, which I have learned to package as well.&lt;/p&gt;
&lt;p&gt;Many comments from several Debian Developers, especially &lt;a href=&quot;http://linux.thai.net/~thep&quot;&gt;Theppitak Karoonboonyanan&lt;/a&gt; and also &lt;a href=&quot;http://wiki.debian.org/PaulWise&quot;&gt;Paul Wise&lt;/a&gt;, 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 &quot;Debian Developers&quot; is a kind of expertise and It's not easy if you do not try harder.&lt;/p&gt;
&lt;p&gt;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 &quot;sid&quot; aka. &quot;unstable&quot; 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.&lt;/p&gt;
&lt;p&gt;I know Paul as he is a first Debian Developer I have met (at that time Theppitak was being in the NM process).&lt;br /&gt;
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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Therefore, I have read the &lt;a href=&quot;http://wiki.debian.org/DebianMaintainer&quot;&gt;Debian Maintainer wiki page&lt;/a&gt; and applied the DM application (&lt;a href=&quot;http://lists.debian.org/debian-newmaint/2012/01/msg00092.html&quot;&gt;http://lists.debian.org/debian-newmaint/2012/01/msg00092.html&lt;/a&gt;) and thanks to both DDs that I mention above for their advocations.&lt;/p&gt;
&lt;p&gt;Last, I have finished the last step 4 for account creation and my GPG key has been accepted to the active Debian Maintainer keyring (&lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657331&quot;&gt;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657331&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, I'm now a Debian Maintainer.&lt;/p&gt;</description>
	<pubDate>Wed, 01 Feb 2012 07:51:32 +0000</pubDate>
</item>
<item>
	<title>LookHin: การทำ Virtual Host บน Apache Web Server</title>
	<guid>http://www.unzeen.com/?p=1887</guid>
	<link>http://www.unzeen.com/article/1887/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%b3-virtual-host-%e0%b8%9a%e0%b8%99-apache-web-server</link>
	<description>&lt;p&gt;โดยปกติแล้ว Web Server เครื่องๆ หนึ่งจะใช้สำหรับเว็บไซต์หลายเว็บ ซึ่งสามารถทำได้โดยการทำ Virtual Host โดยบน Apache สามารถทำได้ 2 แบบ คือ&lt;/p&gt;
&lt;p&gt;1. IP Based Virtual Host คือการทำ Virtual Host โดยใช้ IP Address เป็นตัวแบ่ง ซึ่งวิธีนี้เราจะต้องมี IP สำหรับทุกๆ เว็บไซต์ที่จะทำ&lt;/p&gt;
&lt;p&gt;2. Name Based Virtual Host วิธีนี้จะใช้ชื่อ domain name เป็นตัวแบ่ง โดยทุกๆ เว็บไซต์จะใช้ IP เดียวกันหมด ซึ่ง Hosting ส่วนใหญ่นิยมใช้แบบนี้ และวันนี้เราก็จะมาลองทำแบบนี้กัน ^^&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-1887&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ตัวอย่างที่เราจะทดสอบกันต่อไปนี้ Client เราจะใช้ Windows ส่วน Apache Web Server เราจะใช้ Linux CentOS ที่เราได้ทำการติดตั้งกันไปแล้วจากบทความก่อนๆ ส่วน DNS Server เราจะพูดถึงอีกทีในบทความต่อๆ ไป&lt;/p&gt;
&lt;p&gt;เข้าเรื่องกันเลย อย่างแรกที่เราต้องทำก่อนก็คือกำหนดให้ 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 โดยให้เพิ่มบรรทัดต่อไปนี้&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;text&quot;&gt;192.168.10.10 vhost1.unzeen.com
192.168.10.10 vhost2.unzeen.com&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;เมื่อเพิ่มข้อมูลลงไปแล้ว ให้ทดสอบทำการ ping vhost1.unzeen.com ว่าได้ IP กลับมาถูกต้องหรือไม่ ถ้าได้แล้วก็ไปขั้นตอนถัดไปได้เลย&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/02/apache-virtual-host-01.png&quot; alt=&quot;apache-virtual-host&quot; title=&quot;apache-virtual-host&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ขั้นตอนถัดไปให้เข้าไปที่ Linux Server และทำการสร้างโฟลเดอร์ /var/www/vhost1/ และ /var/www/vhost2/ เพื่อเอาไว้เก็บไฟล์ของเว็บไซต์&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# mkdir /var/www/vhost1/&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# mkdir /var/www/vhost2/&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/02/apache-virtual-host-02.png&quot; alt=&quot;apache-virtual-host&quot; title=&quot;apache-virtual-host&quot; /&gt;&lt;/p&gt;
&lt;p&gt;จากนั้นทำการสร้างไฟล์ index.html ไว้ที่ /var/www/vhost1/ และ /var/www/vhost2/&lt;/p&gt;
&lt;p&gt;# index.html ใน vhost1&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;html&quot;&gt;&amp;lt;HTML&amp;gt;
 &amp;lt;HEAD&amp;gt;
  &amp;lt;TITLE&amp;gt;VHOST1&amp;lt;/TITLE&amp;gt;
 &amp;lt;/HEAD&amp;gt;
 &amp;lt;BODY&amp;gt;
  VHOST1
 &amp;lt;/BODY&amp;gt;
&amp;lt;/HTML&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;# index.html ใน vhost2&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;html&quot;&gt;&amp;lt;HTML&amp;gt;
 &amp;lt;HEAD&amp;gt;
  &amp;lt;TITLE&amp;gt;VHOST2&amp;lt;/TITLE&amp;gt;
 &amp;lt;/HEAD&amp;gt;
 &amp;lt;BODY&amp;gt;
  VHOST2
 &amp;lt;/BODY&amp;gt;
&amp;lt;/HTML&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

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

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# chmod -R 755 /var/www/vhost1/&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# chmod -R 755 /var/www/vhost2/&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/02/apache-virtual-host-03.png&quot; alt=&quot;apache-virtual-host&quot; title=&quot;apache-virtual-host&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ต่อไปทำการแก้ไขไฟล์ /etc/httpd/conf/httpd.conf โดยให้เอา # หน้า NameVirtualHost ออก และเพิ่มบรรทัดในส่วนของ VirtualHost ลงไปตามตัวอย่าง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;text&quot;&gt;NameVirtualHost *:80
 
&amp;lt;VirtualHost *:80&amp;gt;
    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
&amp;lt;/VirtualHost&amp;gt;
 
&amp;lt;VirtualHost *:80&amp;gt;
    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
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/02/apache-virtual-host-04.png&quot; alt=&quot;apache-virtual-host&quot; title=&quot;apache-virtual-host&quot; /&gt;&lt;/p&gt;
&lt;p&gt;จากนั้นสั่ง restart service ของ apache ด้วยคำสั่ง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# service httpd restart&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/02/apache-virtual-host-05.png&quot; alt=&quot;apache-virtual-host&quot; title=&quot;apache-virtual-host&quot; /&gt;&lt;/p&gt;
&lt;p&gt;เท่านี้ก็เป็นอันว่าเราทำการสร้าง VirtualHost เป็นที่เรียบร้อย ทดสอบเปิดจาก Web Browser ดูได้&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/02/apache-virtual-host-06.png&quot; alt=&quot;apache-virtual-host&quot; title=&quot;apache-virtual-host&quot; /&gt;&lt;/p&gt;
&lt;p&gt;วันนี้เท่านี้ก่อน รอบหน้าเราจะมาต่อกันที่เรื่อง SSL กันจริงๆ หละ&lt;/p&gt;</description>
	<pubDate>Tue, 31 Jan 2012 18:48:04 +0000</pubDate>
</item>
<item>
	<title>LookHin: ขั้นตอนการติดตั้ง  Apache Web Server และ PHP บน CentOS</title>
	<guid>http://www.unzeen.com/?p=1860</guid>
	<link>http://www.unzeen.com/article/1860/%e0%b8%82%e0%b8%b1%e0%b9%89%e0%b8%99%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%95%e0%b8%b4%e0%b8%94%e0%b8%95%e0%b8%b1%e0%b9%89%e0%b8%87-apache-web-server-%e0%b9%81%e0%b8%a5%e0%b8%b0-php-%e0%b8%9a%e0%b8%99-centos</link>
	<description>&lt;p&gt;หลังจากได้เรียนรู้วิธีการติดตั้งโปรแกรมในแบบต่างๆ ไปแล้ว วันนี้เรามาต่อกันที่การติดตั้ง Web Server โดยเราจะทำการติดตั้ง apache ให้ทำหน้าที่เป็น Web Server (http) และติดตั้ง mod_ssl เพื่อเอาไว้ใช้ทำ Secure Web Server (https) จากนั้นจะทำการติดตั้ง php และ php extension ต่างๆ เพื่อเอาไว้ใช้กับโปรแกรมที่เขียนด้วย php ซึ่งในบทความนี้ จะไม่ได้พูดถึงการใช้งานภาษา Perl, Python หรือโปรแกรมภาษาอื่นๆ หากผู้อ่านสนใจ ก็ตามไปศึกษาจากแหล่งข้อมูลอื่นๆ กันตามสะดวก และถ้าหากมีโอกาสในคราวหน้าก็อยากจะลองใช้ nginx ซึ่งเป็น Web Server ที่กำลังมาแรงตัวหนึ่งเหมือนกัน ^^&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-1860&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;เริ่มจากติดตั้ง httpd และ mod_ssl โดยใช้คำสั่ง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# yum install httpd mod_ssl&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-01.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ระบบจะแสดงข้อมูลและแพกเก็จต่างๆที่ต้องติดตั้ง ให้กด y เพื่อทำการติดตั้งต่อไป&lt;br /&gt;
&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-02.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;เปิดไฟล์ /etc/httpd/conf/httpd.conf และเพิ่มหรือแก้ไขบรรทัด ServerName ลงไป โดยให้ใส่เป็นชื่อของเซอเวอร์ของเราลงไป&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# nano /etc/httpd/conf/httpd.conf&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-03.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;จากนั้นทำการ start service httpd ด้วยคำสั่ง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# service httpd start&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-04.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ทดสอบเปิดเว็บไซต์ดูได้เลย&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;text&quot;&gt;http://192.168.10.10/&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-05.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;เมื่อติดตั้ง apache เรียบร้อยแล้วเราก็มาติดตั้ง php และ php extension ต่างๆกันต่อ อย่างแรกใช้คำสั่ง yum list php* เพื่อดูว่ามี php extension อะไรบ้างที่น่าสนใจ ให้จดหรือจำชื่อของ extension ต่างๆที่ต้องการเอาไว้&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# yum list php*&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-06.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ทำการติดตั้ง php และ php extension ต่างๆ ที่ต้องการ&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# yum install php-common php-cli php-devel php-mysql php-gd php-imap php-mbstring php-mhash php-pear php-xml php-xmlrpc&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-07.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ต่อไปทำการสร้างไฟล์ info.php ในโพลเดอร์ /var/www/html/ ด้วยคำสั่ง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# nano /var/www/html/info.php&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;และพิมพ์ Source Code ของ PHP ลงไปดังนี้&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;php&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;
 
&lt;span style=&quot;color: #990000;&quot;&gt;phpinfo&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-08.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;สั่ง restart service httpd สักหนึ่งรอบ ด้วยคำสั่ง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# service httpd restart&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-9.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;เมื่อทุกอย่างเรียบร้อย ให้ทดสอบเปิด info.php ผ่าน web browser ดูนะครับ ^^&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;text&quot;&gt;http://192.168.10.10/info.php&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-10.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ก่อนจบเราต้องเพิ่มให้ service httpd ทำงานทุกครั้งที่เปิดเครื่องด้วยคำสั่ง&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# chkconfig httpd on&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://www.unzeen.com/wp-content/uploads/2012/01/yum-install-apache-php-11.png&quot; title=&quot;yum-install-apache-php&quot; /&gt;&lt;/p&gt;
&lt;p&gt;รอบหน้าเราจะต่อกันด้วยการทำ https ให้กับ web server ของเรากันต่อ&lt;/p&gt;</description>
	<pubDate>Sun, 22 Jan 2012 10:58:05 +0000</pubDate>
</item>
<item>
	<title>Vee: ได้ข่าวว่ามีอะไรใหม่</title>
	<guid>http://veer.exteen.com/20120120/entry</guid>
	<link>http://veer.exteen.com/20120120/entry</link>
	<description>&lt;div&gt;ได้ข่าวว่ามีอะไรใหม่ ใน Exteen.com อะไรก็ไม่รู้ ก็เลยมาลองโพสสักหน่อย อิๆ&lt;/div&gt;</description>
	<pubDate>Fri, 20 Jan 2012 04:21:49 +0000</pubDate>
</item>
<item>
	<title>Neutron: Squid configuration directive: tproxy_uses_indirect_client</title>
	<guid>http://www.neutron.in.th/24 at http://www.neutron.in.th</guid>
	<link>http://www.neutron.in.th/content/squid-configuration-directive-tproxyusesindirectclient</link>
	<description>&lt;p&gt;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 (&lt;a href=&quot;http://www.balabit.com/downloads/files/tproxy/README.txt&quot; title=&quot;http://www.balabit.com/downloads/files/tproxy/README.txt&quot;&gt;http://www.balabit.com/downloads/files/tproxy/README.txt&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I was searching the Internet for the solution. In the first place, I tried to setup the TPROXY destination in the &quot;PREROUTING&quot; chain of &quot;mangle&quot; table but not success as the local generated packets didn't pass this chain.&lt;/p&gt;
&lt;p&gt;I found this page (&lt;a href=&quot;http://www.squid-cache.org/Doc/config/tproxy_uses_indirect_client&quot; title=&quot;http://www.squid-cache.org/Doc/config/tproxy_uses_indirect_client&quot;&gt;http://www.squid-cache.org/Doc/config/tproxy_uses_indirect_client&lt;/a&gt;) and it's lucky that this configuration directive only available in Squid 3.2+.&lt;br /&gt;
Therefore, I just setup my special services to make the outgoing connections with &quot;X-Forwarded-For&quot; http header included through the Squid that acts as a proxy on another port, eg. 3129.&lt;/p&gt;
&lt;p&gt;For the Squid configuration, I just add&lt;/p&gt;
&lt;pre&gt;...
&lt;strong&gt;http_port 3129 tproxy&lt;/strong&gt;
...
...
&lt;strong&gt;follow_x_forwarded_for allow localhost&lt;/strong&gt;
...
&lt;strong&gt;tproxy_uses_indirect_client on&lt;/strong&gt;
...
...
&lt;/pre&gt;&lt;p&gt;
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.&lt;/p&gt;
&lt;p&gt;Note: As the &quot;3129&quot; 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&lt;/p&gt;
&lt;pre&gt;# iptables -A INPUT -p tcp --dport 3129 ! -s 127.0.0.1 -j DROP
&lt;/pre&gt;</description>
	<pubDate>Sun, 15 Jan 2012 16:59:47 +0000</pubDate>
</item>
<item>
	<title>Hui</title>
	<guid>tag:blogger.com,1999:blog-6847934.post-9221067170117474963</guid>
	<link>http://vuthi.blogspot.com/2012/01/post-template.html</link>
	<description>Post แรกหลังเปลี่ยน Template เป็นแบบใหม่ สีฟ้าเรียบๆ</description>
	<pubDate>Fri, 13 Jan 2012 02:35:00 +0000</pubDate>
	<author>noreply@blogger.com (Hui/ฮุ้ย)</author>
</item>
<item>
	<title>Kitt: Leap Second</title>
	<guid>http://kitty.in.th/?p=10156</guid>
	<link>http://kitty.in.th/index.php/2011/10/31/leap-second-2/</link>
	<description>&lt;p&gt;ไม่ได้เช็คเสียนาน วันนี้เข้าไปดู &lt;a href=&quot;http://data.iers.org/products/16/14844/orig/bulletinc-042.txt&quot;&gt;ข้อมูลล่าสุด&lt;/a&gt; ที่ &lt;a href=&quot;http://www.iers.org/&quot;&gt;International Earth Rotation and Reference System Service&lt;/a&gt; สรุปว่า&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;NO positive leap second will be introduced at the end of December 2011.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;สรุปปลายปีนี้ Time Server  ก็ไม่ต้องทดวินาที&lt;/p&gt;
&lt;p&gt;.. ครั้งสุดท้ายที่มีการทดวินาที คือ &lt;a href=&quot;http://kitty.in.th/index.php/2009/01/01/leap-second/&quot; title=&quot;Leap Second&quot;&gt;31 ธ.ค. 2008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Leap Second (อธิกวินาที) มันคืออะไร ? ทำไมต้องทด อ่านที่ &lt;a href=&quot;http://en.wikipedia.org/wiki/Leap_second&quot;&gt;http://en.wikipedia.org/wiki/Leap_second&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 31 Oct 2011 11:19:30 +0000</pubDate>
</item>
<item>
	<title>q0022: Disable The Overlay Scrollbars</title>
	<guid>tag:blogger.com,1999:blog-19410439.post-6852211334162685930</guid>
	<link>http://q0022.blogspot.com/2011/10/disable-overlay-scrollbars.html</link>
	<description>สิ่งหนึ่งที่เป็นเรื่องน่ารำคาญสำหรับผมคือ Overlay Scrollbars ใน ubuntu โอเค ถ้าในหน้าจอเล็กๆ อย่าง netbook ก็ว่าไปอย่างแต่ใน notebook แล้วมันทำให้การทำงานยากขึ้น ซะอย่างนั้นแล้วเอา Feature นี้ออกดีกว่าโดยการคำสั่งนี้ใน Terminal&lt;br /&gt;
&lt;br /&gt;
sudo su &lt;br /&gt;
echo &quot;export LIBOVERLAY_SCROLLBAR=0&quot; &amp;gt; /etc/X11/Xsession.d/80overlayscrollbars&lt;br /&gt;
&lt;br /&gt;
แล้วทำการ Reboot หนึ่งครั้ง &lt;br /&gt;
ถ้าไม่ได้ผลให้ทำการ remove ออกดังนี้&lt;br /&gt;
&lt;br /&gt;
sudo apt-get remove overlay-scrollbar liboverlay-scrollbar-0.1-0&lt;br /&gt;
&lt;br /&gt;
แล้ว Reboot อีกที &lt;br /&gt;
และแล้ว Scrollbar อันเก่าที่เราคุ้นเคยก็กลับ อิอิ&lt;br /&gt;
&lt;br /&gt;
ที่มา...  &lt;a href=&quot;http://www.webupd8.org/2011/04/how-to-disable-overlay-scrollbars-in.html&quot;&gt;http://www.webupd8.org/2011/04/how-to-disable-overlay-scrollbars-in.html&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/19410439-6852211334162685930?l=q0022.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 25 Oct 2011 09:59:00 +0000</pubDate>
	<author>noreply@blogger.com (q0022)</author>
</item>
<item>
	<title>Thep: Myanmar Visit</title>
	<guid>http://theppitak.livejournal.com/1941.html</guid>
	<link>http://theppitak.livejournal.com/1941.html</link>
	<description>&lt;p&gt;Quite a belated English blog (after the &lt;a href=&quot;http://thep.blogspot.com/2011/09/yangon-visit.html&quot; rel=&quot;nofollow&quot;&gt;Thai version&lt;/a&gt;), due to busy personal life lately.&lt;/p&gt;

&lt;p&gt;I had visited Yangon during 4-11 Sep. to give some talks and tutorials on Debian packaging and mirroring. And I've &lt;a href=&quot;http://lists.debian.org/debian-i18n/2011/09/msg00014.html&quot; rel=&quot;nofollow&quot;&gt;shared&lt;/a&gt; some information with community.&lt;/p&gt;

&lt;p&gt;The visit was initiated by Ngwe Tun and the Myanmar L10N team. I found later that &lt;a href=&quot;https://www.facebook.com/notes/myanmar-nlp/comparison-between-myanmar-and-thai-localization-workshop/213448515376398&quot; rel=&quot;nofollow&quot;&gt;a Facebook event&lt;/a&gt; had been created for this.&lt;/p&gt;

&lt;h5&gt;Localization&lt;/h5&gt;

&lt;p&gt;The first day was a comparison between Myanmar and Thai supports in GNU/Linux, in which I &lt;a href=&quot;http://linux.thai.net/~thep/presents/Myanmar-visit-2011/thai-l10n/thai-l10n.pdf&quot; rel=&quot;nofollow&quot;&gt;briefed&lt;/a&gt; the status on Thai side, and Thura Hlaing on Myanmar side. It was nice that we had the Myanmar Computer Federation (MCF) director presiding the meeting til the end. That means GNU/Linux support has been awared at executive level.&lt;/p&gt;

&lt;p&gt;According to Thura, Burmese has gained support in GNU/Linux quite well. On the rendering side, all the reordering for the logical order is normally done with pure GSUB in the fonts, without special processing on the rendering engine. This is suboptimal in principle, but it's the most effective way, as Windows redering engine itself does not yet support Myanmar, either.&lt;/p&gt;

&lt;p&gt;For input method, Myanmar XKB map has been available in xkb-data for a long time, but to serve users' familarity with visual order typing, some reordering input methods have been developed, based on &lt;a href=&quot;https://code.google.com/p/keymagic/&quot; rel=&quot;nofollow&quot;&gt;keymagic&lt;/a&gt; and &lt;a href=&quot;https://code.google.com/p/ibus/&quot; rel=&quot;nofollow&quot;&gt;ibus&lt;/a&gt;. But all are not context-sensitive like what's done for Thai in other frameworks. Fortunately, with the surrounding text API &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=435880&quot; rel=&quot;nofollow&quot;&gt;recently added to ibus&lt;/a&gt;, this has become possible.&lt;/p&gt;

&lt;p&gt;One unusual requirement for Myanmar script editing is the caret movements. It needs to move &lt;em&gt;syllable-wise&lt;/em&gt;, not character-wise nor cluster-wise. So, I suggested them to have a look on &lt;a href=&quot;http://unicode.org/reports/tr29/&quot; rel=&quot;nofollow&quot;&gt;UAX #29&lt;/a&gt; to see how it should be amended.&lt;/p&gt;

&lt;p&gt;Myanmar locales are already done, both for GNU C library and CLDR. And even a GNOME applet for Myanmar lunar calendar is also available. This latter thing is what Thai can learn from.&lt;/p&gt;

&lt;p&gt;Burmese word segmentation is not supported in general. But R&amp;amp;D works have been done for this in its NLP lab.&lt;/p&gt;

&lt;p&gt;A serious issue left to solve is the existing abuses of Unicode. In Myanmar, there exist at least 14 variations of font hacks, abusing some free slots in Unicode charts as pre-composed clusters for &lt;em&gt;information interchange&lt;/em&gt; (not for font internals), making plain text interchange impossible without the proper font for rendering.&lt;/p&gt;

&lt;p&gt;For program translation, the new Myanmar L10N team is trying to request for a mass submission to &lt;a href=&quot;http://l10n.gnome.org/teams/my/&quot; rel=&quot;nofollow&quot;&gt;the current GNOME team&lt;/a&gt;. And for Debian, Thura Hlaing and Ngwe Tun has already started the translation process with Christian's help.&lt;/p&gt;

&lt;p&gt;Along my stay, I could see the team actively discussing on the IT glossary, trying to settle down the translated terms. This looked very fun.&lt;/p&gt;

&lt;h5&gt;Debian&lt;/h5&gt;

&lt;p&gt;Then, the next three days were a workshop on Debian packaging, where I have &lt;a href=&quot;http://linux.thai.net/~thep/docs/debian/packaging/deb-packaging.pdf&quot; rel=&quot;nofollow&quot;&gt;presented&lt;/a&gt; the basics of Debian package building, uploading, quality-controlling, modifying, creating and delivering. This aimed toward the development of a local distribution based on Debian.&lt;/p&gt;

&lt;p&gt;Each day in the afternoon was the time for setting up a Debian mirror, not only for convenient local distro developement, but also for general users. This is important because internet penetration is still low in Myanmar. The main media for software distribution is CD/DVD, which means only stable version of Debian can be spread, which is not good for desktop users. Having a mirror should improve the situation somehow. It should make dist-upgrading to testing/unstable easier. And it should make CD snapshotting using local distributions easier, too.&lt;/p&gt;

&lt;p&gt;For this, I also presented &lt;a href=&quot;http://linux.thai.net/~thep/docs/debian/mirror/deb-mirror.pdf&quot; rel=&quot;nofollow&quot;&gt;another quick slide&lt;/a&gt; on Debian mirroring &amp;amp; caching.&lt;/p&gt;

&lt;p&gt;In the last day, I was introduced to the staffs of Myanmar NLP Lab and their projects, which include Myanmar OCR (based on &lt;a href=&quot;https://code.google.com/p/tesseract-ocr/&quot; rel=&quot;nofollow&quot;&gt;tesseract&lt;/a&gt;), information retrieval, machine translation, and other lingustic resources like dictionary, lexicon and text corpus.&lt;/p&gt;

&lt;p&gt;Furthermore, I was also offerred technical helps on developing a &lt;a href=&quot;http://khottabun.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Lao/Esaan Tham font&lt;/a&gt; for a Lao and North Eastern Thailand variation of &lt;a href=&quot;http://www.unicode.org/charts/PDF/U1A20.pdf&quot; rel=&quot;nofollow&quot;&gt;Tham script&lt;/a&gt;, which is Mon-based and is closely related to Myanmar script. (See some &lt;a href=&quot;http://linux.thai.net/~thep/esaan-scripts/trans-tham/botsutkhwan.html&quot; rel=&quot;nofollow&quot;&gt;sample transliterations&lt;/a&gt; if you are curious how it looks like. It was part of my hacking during DebConf11 travelling.) Currently, its OpenType support is quite sufficient, but it still renders poorly on Mac OSX. To cope with this, I was given a Mac Mini as a present from Myanmar for its development, as well as some explanations on AAT features from a Myanmar font developer. And I am very grateful for that.&lt;/p&gt;</description>
	<pubDate>Sun, 02 Oct 2011 08:31:54 +0000</pubDate>
</item>
<item>
	<title>q0022: dev server กับ production server</title>
	<guid>tag:blogger.com,1999:blog-19410439.post-6980022486999328025</guid>
	<link>http://q0022.blogspot.com/2011/09/dev-server-production-server.html</link>
	<description>ออกมาตราการบริหารงานโค็ดใหม่ โดยตั้งเป็น dev server กับ production server เพราะโปรแกรมเมอร์เริ่มเยอะ แต่มันเหนื่อยเหมือนกันแฮะกับการมาไล่ดูว่าจะอะไรจะ up หรือไม่ up เข้า production server แต่ก็คุม bug ไปได้ส่วนหนึ่ง แต่ต้องใช้เวลากับแรงเยอะเหมือนกันนะ&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/19410439-6980022486999328025?l=q0022.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 22 Sep 2011 06:47:00 +0000</pubDate>
	<author>noreply@blogger.com (q0022)</author>
</item>
<item>
	<title>Kamthorn: MySQL Query Optimization 2 : เครื่องมือช่วย</title>
	<guid>tag:blogger.com,1999:blog-6885844.post-6716932972597496899</guid>
	<link>http://feedproxy.google.com/~r/MyLifeAskamthorn/~3/lcn6ldp64I0/mysql-query-optimization-2.html</link>
	<description>เป็นแบบนี้ไหมครับ รู้ว่าปัญหาอยู่ที่ MySQL นี่แหละ แต่เป็นตรงไหนล่ะ เรามาดูเครื่องมือช่วยกันดีกว่า&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;mysqltuner&lt;/b&gt;&lt;br /&gt;
ตัวนี้สำหรับ admin โดยมันจะวิเคราะห์ข้อมูลต่างๆ ของ MySQL server ในขณะนั้นแล้วแนะนำว่าควรปรับค่าอะไร อย่างไร อันเนื่องมาจากว่าไม่มีสูตรตายตัวว่าควรปรับแต่งอย่างไร ซึ่งขึ้นอยู่กับข้อมูล และการใช้งานจริงด้วย&lt;br /&gt;
&lt;br /&gt;
การติดตั้ง&lt;br /&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# wget &lt;a href=&quot;http://mysqltuner.pl/&quot;&gt;mysqltuner.pl&lt;/a&gt; -O mysqltuner.pl&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
เป็นการติดตั้งที่เท่มาก คือตัวนี้เป็น perl script ซึ่งปกติมันจะใช้ extension เป็น .pl เค้าเลยไปจดชื่อ domain เป็น mysqltuner.pl ไว้ คำสั่งนี้จึงหมายถึง ดาวน์โหลดหน้าเว็บหลักของ &lt;a href=&quot;http://mysqltuner.pl/&quot;&gt;http://mysqltuner.pl/&lt;/a&gt; ซึ่งมันจะให้ข้อมูลเป็น script รุ่นล่าสุดเสมอ เอามาบันทึกไว้ในชื่อ mysqltuner.pl&lt;br /&gt;
&lt;br /&gt;
จากนั้นกำหนดให้ execute ได้&lt;br /&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# chmod +x mysqltuner.pl&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
การใช้ สั่ง ./mysqltuner.pl แล้วใส่ชื่อแอดมินของ MySQL ปกติคือ root และรหัสผ่าน ก็จะได้ผลลัพธ์คล้ายๆ แบบนี้&lt;br /&gt;
&lt;span style=&quot;font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;# ./mysqltuner.pl&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt; &amp;gt;&amp;gt;  MySQLTuner 1.2.0 - Major Hayden &amp;lt;major@mhtx.net&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt; &amp;gt;&amp;gt;  Bug reports, feature requests, and downloads at http://mysqltuner.com/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt; &amp;gt;&amp;gt;  Run with '--help' for additional options and output filtering&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;Please enter your MySQL administrative login: &lt;b&gt;root&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;Please enter your MySQL administrative password: &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;-------- General Statistics --------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Skipped version check for MySQLTuner script&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Currently running supported MySQL version 5.1.58-1~dotdeb.1-log&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Operating on 64-bit architecture&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;-------- Storage Engine Statistics -------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Status: +Archive -BDB -Federated -InnoDB -ISAM -NDBCluster &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Data in MyISAM tables: 30G (Tables: 670)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Data in MEMORY tables: 45M (Tables: 8)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[!!] Total fragmented tables: 130&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;-------- Security Recommendations  -------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] All database users have passwords assigned&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;-------- Performance Metrics -------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Up for: 3d 7h 10m 37s (43M q [153.856 qps], 1M conn, TX: 20B, RX: 8B)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Reads / Writes: 49% / 51%&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[--] Total buffers: 1.6G global + 8.4M per thread (500 max threads)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Maximum possible memory usage: 5.7G (73% of installed RAM)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Slow queries: 3% (1M/43M)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Highest usage of available connections: 36% (180/500)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Key buffer size / total MyISAM indexes: 1000.0M/19.4G&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Key buffer hit rate: 99.9% (2B cached / 4M reads)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[!!] Query cache efficiency: 19.2% (3M cached / 17M selects)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Query cache prunes per day: 0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Sorts requiring temporary tables: 0% (162 temp sorts / 1M sorts)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Temporary tables created on disk: 0% (52 on disk / 734K total)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Thread cache hit rate: 64% (686K created / 1M connections)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[!!] Table cache hit rate: 19% (1K open / 9K opened)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Open file limit used: 55% (16K/30K)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;[OK] Table locks acquired immediately: 97% (224M immediate / 231M locks)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;-------- Recommendations -----------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;General recommendations:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;    Run OPTIMIZE TABLE to defragment tables for better performance&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;    Increase table_cache gradually to avoid file descriptor limits&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;Variables to adjust:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;    query_cache_limit (&amp;gt; 16M, or use smaller result sets)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;    table_cache (&amp;gt; 1800)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ผลลัพธ์ก็อธิบายในตัวเองค่อนข้างชัดเจน บรรทัดที่นำหน้าด้วย [OK] ก็คือดีแล้ว ไม่มีปัญหาอะไร นำหน้าด้วย [--] คือเป็นข้อมูลแจ้งให้ทราบ ส่วน [!!] อันนี้ไม่ดีละ มีบางอย่างควรต้องพิจารณา ซึ่งจะมีสรุปด้านล่างว่าควรทำอะไร หรือปรับค่าตัวแปรอะไร เพื่อให้ประสิทธิภาพดีขึ้น แต่ไม่ต้องเชื่อมันทุกอย่างก็ได้ ฟังไว้เป็นข้อมูลประกอบก็พอ&lt;br /&gt;
&lt;br /&gt;
ดูเพิ่มเติม &lt;a href=&quot;http://mysqltuner.com/&quot;&gt;http://mysqltuner.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;mysql_slow_log_parser&lt;/b&gt;&lt;br /&gt;
ตัวนี้เหมาะสำหรับ developer ไว้วิเคราะห์ว่า query ใดเป็นตัวปัญหา โดยปกติเราสามารถกำหนดให้ MySQL บันทึก log ของ slow query ที่เกิดขึ้น แต่ปัญหาคือมันเยอะมากจนไม่รู้จะเริ่มดูตรงไหนก่อน ตัวนี้จะช่วยเอา slow log ทั้งหมดมารวบรวม จัดหมวดหมู่คำสั่งที่คล้ายกัน นำจำนวน รวมเวลาที่ใช้ทั้งหมด เวลาน้อยสุด เวลามากสุด เวลาเฉลี่ย แล้วเรียงลำดับตามเวลา query ทั้งหมดที่ใช้ไปจากมากไปน้อย&lt;br /&gt;
&lt;br /&gt;
การติดตั้ง&lt;br /&gt;
ก่อนอื่นให้ตั้งค่าของ MySQL server ให้เก็บ slow log query ก่อน โดยแก้ไฟล์ /etc/mysql/my.cnf แล้ว uncomment และแก้บรรทัด 2 บรรทัดนี้&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;log_slow_queries        = /var/log/mysql/mysql-slow.log&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;long_query_time = 0&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
สังเกตว่าเราจะกำหนด long_query_time เป็น 0 นั่นคือให้เก็บ log ทุก query ไว้หมด เพื่อนำมาวิเคราะห์ จากนั้น restart mysql ด้วยคำสั่ง&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# /etc/init.d/mysql restart&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ดาวน์โหลด script mysql_slow_log_parser&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# wget &lt;a href=&quot;http://www.mysqlperformanceblog.com/files/utils/mysql_slow_log_parser&quot;&gt;http://www.mysqlperformanceblog.com/files/utils/mysql_slow_log_parser&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# chmod +x mysql_slow_log_parser&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
การใช้งาน&lt;/div&gt;
&lt;div&gt;
ถ้าเป็นล็อกที่เกิดในวันนี้ คือหลังจากที่ logrotate ทำงาน ให้สั่ง&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# ./mysql_slow_log_parser /var/log/mysql/mysql-slow.log &amp;gt; mysql-slow-info.txt&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ดูผลที่เก็บในไฟล์&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# less mysql-slow-info.txt&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ถ้าเป็นล็อกที่เกิดขึ้นในวันก่อนๆ ซึ่งถูก rotate และ compress ไปแล้ว&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# zcat /var/log/mysql/mysql-slow.log.1.gz | ./mysql_slow_log_parser &amp;gt; mysql-slow-info.1.txt&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ดูผลที่เก็บในไฟล์&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #0c343d; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;# less mysql-slow-info.1.txt&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ตัวอย่างไฟล์ mysql-slow.log&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;# User@Host: xxx[xxx] @ localhost [127.0.0.1]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;# Query_time: 0.004879  Lock_time: 0.000031 Rows_sent: 1  Rows_examined: 2313&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SET timestamp=1315178855;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT COUNT(*) AS numRows FROM group_topics WHERE group_id=167 AND status='NORMAL';&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;# Time: 110905  6:27:37&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;# User@Host: xxx[xxx] @ localhost [127.0.0.1]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;# Query_time: 0.182972  Lock_time: 0.000036 Rows_sent: 1  Rows_examined: 104030&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SET timestamp=1315178857;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT member_id  FROM member  WHERE LOWER(user_id)='xxxxx'    AND is_active='1'  LIMIT 1;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ตัวอย่างผลลัพธ์ หลังจากผ่าน parser&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt; Starting... &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### 53018 Queries &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### Total time: 204742.585691, Average time: 3.86175611473462&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### Taking 0.000740  to 81.100860  seconds to complete&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### Rows analyzed 100 - 1467&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SET timestamp=XXX;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT COUNT(*) AS total  FROM chat_msgs  WHERE owner_id=XXX AND is_unread='XXX';&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SET timestamp=1315178847;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT COUNT(*) AS total  FROM chat_msgs  WHERE owner_id=104170 AND is_unread='1';&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### 29081 Queries &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### Total time: 90838.2220840001, Average time: 3.12362786988068&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### Taking 0.000353  to 82.103217  seconds to complete&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;### Rows analyzed 100 - 4387&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SET timestamp=XXX;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT friend_id  FROM relation  WHERE member_id=XXX AND status='XXX';&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SET timestamp=1315178835;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: x-small;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT friend_id  FROM relation  WHERE member_id=235929 AND status='ACCEPT';&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
สังเกตว่ามันจะแปลงส่วน value ทั้ง string และตัวเลข ให้เป็น XXX ก่อน แล้วนำมาแยกนับ วิเคราะห์คำสั่งที่เหมือนกัน ก็จะทำให้ทราบว่าคำสั่งใดถูกใช้บ่อยแค่ไหน (กี่ query) ใช้เวลารวมทั้งหมดเท่าไหร่ (Total time:) ใช้เวลาเฉลี่ยต่อ query เท่าไหร่ (Average time:) ใช้เวลาน้อยสุดถึงมากสุดเท่าไหร่ (Taking ... to ... seconds to complete) จำนวน rows ของผลลัพธ์ โดยมันจะแสดง query ที่ใช้เวลารวมมากที่สุดก่อน ซึ่งถ้า optimize ได้ก็จะมีผลมากที่สุด&lt;/div&gt;
&lt;br /&gt;
อ่อ ที่เห็นผลลัพธ์อันนี้ดูแย่ๆ คือ average สูง และช่วงเวลาที่ใช้ต่ำสุด - สูงสุดกว้างขนาดนี้ เพราะมีปัญหาเรื่อง capacity ของเครื่องไม่พอน่ะครับ จึงเร็วบ้าง ช้าบ้าง ไม่แน่ไม่นอน&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/6885844-6716932972597496899?l=blog.kamthorn.org&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MyLifeAskamthorn/~4/lcn6ldp64I0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 13 Sep 2011 05:18:01 +0000</pubDate>
	<author>noreply@blogger.com (Kamthorn Krairaksa)</author>
</item>
<item>
	<title>Kamthorn: MySQL Query Optimization 1</title>
	<guid>tag:blogger.com,1999:blog-6885844.post-1823190628123537465</guid>
	<link>http://feedproxy.google.com/~r/MyLifeAskamthorn/~3/8IHuVDMWJQc/mysql-query-optimization-1.html</link>
	<description>&lt;span style=&quot;background-color: white; line-height: 16px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
มีเหตุให้ต้องได้ช่วยฝ่ายอื่นแก้ปัญหาเรื่องประสิทธิภาพของเซิร์ฟเวอร์ลินุกซ์เลยขอบันทึกไว้หน่อยว่าเจออะไรบ้าง&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
เซิร์ฟเวอร์ให้บริการเว็บ ใช้ apache + php5 + mysql ตามปกติ อาการแรกที่เห็นคือเซิร์ฟเวอร์ไม่ตอบสนอง ถึงขนาด ssh เข้าไปยังต้องรอนานมาก และ timeout ไปหลายรอบกว่าจะเข้าได้ อาการนี้มักเกิดจากหน่วยความจำเต็ม จนต้อง swap หน่วยความจำบางส่วนลงดิสก์ ซึ่งบังเอิญหน่วยความจำที่มัน active อยู่ มันเกินหน่วยความจำจริง เลยเกิดการ swap ตลอดเวลา จน process ต่างๆ แทบจะทำงานอะไรไม่ได้ เพราะต้องรอหน่วยความจำจากดิสก์ก่อน&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ทำไมหน่วยความจำจึงไม่พอ&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
เซิร์ฟเวอร์ตัวนี้ มีหน่วยความจำ 3GB ไม่ได้มากนัก แต่ก็ไม่น้อยเกินไป สาเหตุที่หน่วยความจำเต็มเกิดจาก apache httpd เกิดการแบ่งตัวเพื่อรับภาระงานจนเกินขนาดของหน่วยความจำ ซึ่งปกติเวลามี connection เข้ามา 1 อัน ต้องใช้ httpd 1 process ในการรับงาน แต่ละ process มีขนาดประมาณ 9-12MB กำหนดไว้สูงสุด 250 client ซึ่งเช็คแล้วพบว่าเต็ม 250 เลย จับคูณกันแล้วก็ราวๆ 3GB พอดี ยังไม่รวม mysql  และอื่นๆ&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
การเพิ่มหน่วยความจำไม่ใช่ทางออกที่ถูกต้อง จริงๆ หน่วยความจำเยอะๆ ดี แต่มันจะไม่ช่วยในกรณีนี้ เพราะเทียบได้กับการให้บริการอะไรสักอย่างของหน่วยงานหนึ่ง แล้วพบว่าที่นั่งรอไม่พอ เลยขยายห้องรอเป็นสองเท่า เพื่อให้คนเข้ามารอได้เป็นสองเท่า จริงๆ ต้องไปแก้ที่ต้นเหตุคือทำไมการให้บริการของหน่วยงานนั้นๆ ถึงได้ช้า&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ทำไม apache httpd ถึงช้าจนเกิด connection ค้างมากถึง 250 อัน&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ส่วนใหญ่ (รวมทั้งกรณีนี้ด้วย) คือเกิดสภาวะรอ mysql ตอบ query ที่เรียกไป&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
แล้วทำไม mysql มันช้านัก&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ในหลายกรณี (รวมทั้งกรณีนี้ด้วย) คือการเรียกใช้ query ไม่ได้ถูก optimize ให้ทำงานได้ดีที่สุด&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
การตรวจสอบว่า query ใดทำให้ mysql ช้า&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ให้เปิดใช้ฟีเจอร์เก็บล็อกของ query ที่ช้าโดยเพิ่ม&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;log_slow_queries = /var/log/mysql-slow.log&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;long_query_time = 5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; line-height: 1.5em;&quot;&gt;
เข้าไปใน section [mysqld] ในไฟล์ my.cnf ซึ่งน่าจะอยู่ใน /etc/mysql หรือ /etc&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
แล้ว restart mysql แล้วตามเฝ้าดูในไฟล์ /var/log/mysql-slow.log&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
หลักการ optimize query&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
อันแรกสุดคือลดการเกิด full table scan ให้มากที่สุด full table scan คือการที่จะหาคำตอบของ query จำเป็นต้อง scan อ่านทั้งตาราง ซึ่งจะช้ามาก และช้าขึ้นเรื่อยๆ เมื่อตารางใหญ่ขึ้น การลดอาการนี้อันแรกคือ ให้ทำ index ที่จำเป็นต้องใช้บ่อยๆ เสมอ โดยให้ดูที่ ORDER BY กับ WHERE ว่ามีการอ้างถึง column ใดบ้าง อีกอันที่เจอคือบางคนใช้ WHERE sss LIKE '%xxxx%' ในการเปรียบเทียบ string ทั้งๆ ที่ xxxx นั่นคือทั้งหมดที่อยู่ใน column นั้นๆ อยู่แล้ว การใช้ %xxxx% ทำให้เกิดการค้นหาตลอดตารางเพื่อหาทุกแถวที่เป็นไปได้ ที่จริงแล้วในกรณีนี้ใช้แค่ WHERE sss = 'xxxx' ก็ได้&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
อีกอันคือให้หลีกเลี่ยงการ JOIN ให้มากที่สุด อาจจะลองเลี่ยงไปใช้ sub query ก็ช่วยได้พอสมควร&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ตัวอย่างการ optimize query&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ของเดิม&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT topic.ID, topic.Title, topic.Description, topic.Publisher_Name, topic.Upload_Date&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;FROM topic&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  LEFT JOIN topic_category ON ( topic.ID = topic_category.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  LEFT JOIN topic_media ON (topic.ID = topic_media.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;WHERE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic_media.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic.Approve_State = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic_media.Type like '%image%'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;GROUP BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.ID&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;ORDER BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.ID DESC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;LIMIT 65625, 25;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ใช้เวลา 13.20 วินาที&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
เปลี่ยน like '%...%' เป็น = '...'&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT topic.ID, topic.Title, topic.Description, topic.Publisher_Name, topic.Upload_Date&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;FROM topic&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  LEFT JOIN topic_category ON ( topic.ID = topic_category.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  LEFT JOIN topic_media ON (topic.ID = topic_media.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;WHERE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic_media.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic.Approve_State = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND  topic_media.Type = 'image'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;GROUP BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.ID&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;ORDER BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.ID DESC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;LIMIT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  65625, 25;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ใช้เวลา 12.79 วินาที&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
สังเกตว่าใช้ GROUP BY แต่ไม่มีการใช้ aggregate function เช่น sum() หรือ count() แสดงว่าแค่ตั้งใจให้แสดงแถวแบบไม่ซ้ำ ลองเปลี่ยนเป็น DISTINCT&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT DISTINCT topic.ID, topic.Title, topic.Description, topic.Publisher_Name, topic.Upload_Date&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;FROM topic&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  LEFT JOIN topic_category ON ( topic.ID = topic_category.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  LEFT JOIN topic_media ON (topic.ID = topic_media.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;WHERE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic_media.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic.Approve_State = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND  topic_media.Type = 'image'&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;ORDER BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.ID DESC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;LIMIT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  65625, 25 ;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ใช้เวลา 10.65 วินาที&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
สังเกตพบว่ามีการ LEFT JOIN ตาราง topic_category แต่ไม่ได้เอามาใช้ทำอะไร งั้นตัดทิ้งไป&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT DISTINCT topic.ID, topic.Title, topic.Description, topic.Publisher_Name, topic.Upload_Date&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;FROM topic LEFT JOIN topic_media ON (topic.ID = topic_media.Topic_ID)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;WHERE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic_media.Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND topic.Approve_State = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND  topic_media.Type = 'image'  &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;ORDER BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  topic.ID DESC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;LIMIT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;   65625, 25 ;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ใช้เวลา 8.98 วินาที&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
เปลี่ยนจากการทำ LEFT JOIN เป็น sub query select&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT DISTINCT ID, Title, Description, Publisher_Name, Upload_Date&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;FROM topic&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;WHERE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  ID IN (SELECT Topic_ID FROM topic_media WHERE Status = 1 AND Type = 'image')&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND Status = 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND Approve_State = 1  &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;ORDER BY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  ID DESC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;LIMIT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  65625, 25 ;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
เหลือ 3.43 วินาที&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ลองใช้ EXPLAIN SELECT เพื่อวิเคราะห์ว่ามีอะไรไม่เป็นไปตามที่ต้องการหรือไม่&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;EXPLAIN SELECT sql_no_cache DISTINCT ID, Title, Description, Publisher_Name, Upload_Date FROM topic WHERE ID IN (SELECT Topic_ID FROM topic_media WHERE Status = 1 AND Type = 'image') AND Status = 1 AND Approve_State = 1   ORDER BY ID DESC LIMIT 65625, 25  ;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;+----+--------------------+-------------+----------------+----------------------+---------------+---------+-------+-------+-----------------------------+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;| id | select_type        | table       | type           | possible_keys        | key           | key_len | ref   | rows  | Extra                       |&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;+----+--------------------+-------------+----------------+----------------------+---------------+---------+-------+-------+-----------------------------+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;|  1 | PRIMARY            | topic       | ref            | Approve_State,Status | Approve_State | 1       | const | 75581 | Using where; Using filesort |&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;|  2 | DEPENDENT SUBQUERY | topic_media | index_subquery | Topic_ID,Type,Status | Topic_ID      | 8       | func  |     2 | Using where                 |&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;+----+--------------------+-------------+----------------+----------------------+---------------+---------+-------+-------+-----------------------------+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
พบว่า มี Using filesort เพราะตอน query นั้น mysql ให้ความสำคัญกับการ look up (WHERE) ก่อน จึงใช้ index Approve_State หรือ Status ส่วน PRIMARY ที่จำเป็นต้องใช้ตอนเรียงลำดับ (ORDER BY) ไม่ได้ใช้ (ขณะ query สามารถเลือก index ได้อันเดียว) ทำให้ต้องเสียเวลาไปเรียงข้อมูลใหม่ก่อน ในกรณีนี้อาจจะลองบังคับให้ใช้ index ที่ต้องการ โดยเพิ่ม FORCE INDEX (keyname) หลังชื่อตาราง เช่น&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;EXPLAIN SELECT sql_no_cache DISTINCT ID, Title, Description, Publisher_Name, Upload_Date FROM topic FORCE INDEX (PRIMARY) WHERE ID IN (SELECT Topic_ID FROM topic_media WHERE Status = 1 AND Type = 'image') AND Status = 1 AND Approve_State = 1   ORDER BY ID DESC LIMIT 65625, 25  ;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;+----+--------------------+-------------+----------------+----------------------+----------+---------+------+-------+-------------+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;| id | select_type        | table       | type           | possible_keys        | key      | key_len | ref  | rows  | Extra       |&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;+----+--------------------+-------------+----------------+----------------------+----------+---------+------+-------+-------------+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;|  1 | PRIMARY            | topic       | index          | NULL                 | PRIMARY  | 8       | NULL | 65650 | Using where |&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;|  2 | DEPENDENT SUBQUERY | topic_media | index_subquery | Topic_ID,Type,Status | Topic_ID | 8       | func |     2 | Using where |&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace; font-size: xx-small;&quot; class=&quot;Apple-style-span&quot;&gt;+----+--------------------+-------------+----------------+----------------------+----------+---------+------+-------+-------------+&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
เมื่อเอา EXPLAIN ออก รันด้วยคำสั่งจริง &lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;SELECT sql_no_cache DISTINCT ID, Title, Description, Publisher_Name, Upload_Date &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;FROM topic FORCE INDEX (PRIMARY) &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;WHERE &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  ID IN (SELECT Topic_ID FROM topic_media WHERE Status = 1 AND Type = 'image') &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND Status = 1 &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  AND Approve_State = 1   &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;ORDER BY &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;  ID DESC &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt;LIMIT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;color: #274e13; font-family: 'Courier New', Courier, monospace;&quot; class=&quot;Apple-style-span&quot;&gt; 65625, 25  ;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ใช้เวลา 2.22 วินาที&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; font-family: inherit; line-height: 1.5em;&quot;&gt;
ทั้งหมดนี้คือได้ผลลัพธ์เหมือนเดิมเป๊ะ&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/6885844-1823190628123537465?l=blog.kamthorn.org&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MyLifeAskamthorn/~4/8IHuVDMWJQc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 04 Sep 2011 11:59:00 +0000</pubDate>
	<author>noreply@blogger.com (Kamthorn Krairaksa)</author>
</item>
<item>
	<title>Eakasak: จะ Flash Rom Android ใหม่ทั้งทีต้อง Backup อะไรบ้าง</title>
	<guid>tag:blogger.com,1999:blog-7145547.post-9039109316470732494</guid>
	<link>http://zenac.blogspot.com/2011/08/flash-rom-android-backup.html</link>
	<description>Flash Rom เจ้า Android คู่ใจทั้งสองเครื่องทุกครั้งก็ต้องมานั่งนึก เลยเขียนเก็บไว้ดีกว่า&lt;div&gt;&lt;ol&gt;&lt;li&gt;SMS by &lt;a href=&quot;http://www.appbrain.com/app/sms-backup-restore/com.riteshsahu.SMSBackupRestore&quot;&gt;SMS Backup &amp;amp; Restore&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Call logs by &lt;a href=&quot;http://www.appbrain.com/app/call-logs-backup-restore/com.riteshsahu.CallLogBackupRestore&quot;&gt;Call Logs Backup &amp;amp; Restore&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Application list by AppBrain Sync&lt;/li&gt;&lt;li&gt;WiFi Setting รอเขียนเป็นวิธีทำ&lt;/li&gt;&lt;li&gt;มีเพิ่มเดี๋ยวมา update&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/7145547-9039109316470732494?l=zenac.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 31 Jul 2011 21:49:00 +0000</pubDate>
	<author>noreply@blogger.com (Zena)</author>
</item>
<item>
	<title>Vee: AS Red Blue</title>
	<guid>http://veer.exteen.com/20110719/as-red-blue</guid>
	<link>http://veer.exteen.com/20110719/as-red-blue</link>
	<description>&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AS Red&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AS Blue&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;นักร้องนำ:&lt;/td&gt;
&lt;td&gt;จองอา&lt;/td&gt;
&lt;td&gt;เรนะ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เน้นหน้าตา:&lt;/td&gt;
&lt;td&gt;ยูอี+นานา&lt;/td&gt;
&lt;td&gt;จูยอน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ตลก:&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;ลิชี่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เต้น/rap/ร้องก็ดีแต่ไม่ค่อยเด่น:&lt;/td&gt;
&lt;td&gt;กาฮี&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เล่นเครื่องดนตรีได้หลายอย่าง แต่ไม่ได้เล่นหรือเปล่า?:&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;อียอง&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
	<pubDate>Tue, 19 Jul 2011 07:07:14 +0000</pubDate>
</item>
<item>
	<title>Eakasak: Transformers: Dark of the Moon</title>
	<guid>tag:blogger.com,1999:blog-7145547.post-6541716594920776590</guid>
	<link>http://zenac.blogspot.com/2011/07/transformers-dark-of-moon.html</link>
	<description>วันนี้มีโอกาศไปดู Transformers: Dark of the Moon มาครับ&lt;div&gt;หาโอกาสไปดูมานานละกว่าจะมีเวลาว่างก้ต้องรอหยุดยาวอย่างช่วงนี้แหละ&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ก่อนเข้าโรงผมก็เหมือนหลายๆ คนแหละที่สงสัยว่าถ้าไม่มี Megan Fox หนังเรื่องนี้จะเป็นยังไง&lt;/div&gt;&lt;div&gt;พบว่าหนังเปิดตัวนางเอกใหม่เร็วมาก และแม้จะไม่ถึงกับทำให้ลืม Megan Fox ได้&lt;/div&gt;&lt;div&gt;แต่ก็ทำให้ผมหลงได้เหมือนกัน (ยังแอบคิดถึง Fox อยู่ผมว่าเธอมีสเน่ห์เฉพาะตัวนะ)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;พี่เบย์ไม่ทำให้ผิดหวังเหมือนเดิม ระเบิดภูเขา เผากระท่อม ตามสไตล์เค้าละ&lt;/div&gt;&lt;div&gt;และหุ่นก็ดึงความสนใจทุกอย่างของผมไปจนหมดสิ้น&lt;/div&gt;&lt;div&gt;CG โคตรจะอลังการงานสร้าง จัดหนัก จัดเต็มกันไปไม่เสียชื่อพี่เบย์เค้า&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ภาคนี้ก็มีซีนเท่ๆ ของทางผู้พันเช่นเดิม จังหวะลุยเข้าไปทางอากาศเท่มาก&lt;/div&gt;&lt;div&gt;ไอเดียโคตรเจ๋ง เอามาเป็นยุทธวิธีการรบจริงในเมืองได้เลย&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;หนังเรื่องนี้ผมหวังมาดูสามอย่าง&lt;/div&gt;&lt;div&gt;1. หุ่น แน่นอนอยู่แล้วภาคนี้จัดเต็มคุ้มตั้งแต่ผ่านมาครึ่งเรื่องแล้วครับ&lt;/div&gt;&lt;div&gt;2. ไอเดียของบทเท่ผู้พัน ภาคแรกเท่มาก แว้นมอเตอร์ไซค์ แล้วสไลด์ไปกับพื้น เก็บ Decepticon โคตรเท่ ภาคนี้ก็ไม่แพ้กันแถมให้มาอีกหลายซีนสมใจกันเลยทีเดียว&lt;/div&gt;&lt;div&gt;3. Megan Fox สิครัฟ &amp;gt;.&amp;lt; แต่เดี๋ยวก่อน ภาคนี้เปลี่ยนนางเอกนี่นา แล้วก็ทดแทนกันได้ในระดับสูสีทีเดียว เพียงแต่หนังยิ่งเดินไปคุณเธอยิ่งมิดชิดขึ้น ไม่เป็นไรให้อภัยได้ เพราะความ Sexy ของคุณเธอไม่ธรรมดาทีเดียว&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ส่วนเรื่องบทนะเหรอครับ ผมรับได้นะ ไม่ได้อ่อนอะไรขนาดนั้น ลองเคยดู The Expandables ก่อนเหอะแล้วเรื่องนี้แทบจะบทเทพขึ้นมาเลยล่ะ ลายละเอียดเล็กน้อยของแต่ล่ะฉากก็เก็บงานเจ๋งดีฮะ&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ที่สำคัญถ้าไม่ได้ดู Autobot แปลงร่างบนจอใหญ่ๆ บิ๊กบึ้มมันจะได้อารมณ์ตรงไหนกัน&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/7145547-6541716594920776590?l=zenac.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 17 Jul 2011 20:36:00 +0000</pubDate>
	<author>noreply@blogger.com (Zena)</author>
</item>
<item>
	<title>MrChoke: บางสิ่งในใจ...</title>
	<guid>http://www.mrchoke.org/255 at http://www.mrchoke.org</guid>
	<link>http://www.mrchoke.org/node/255</link>
	<description>&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span class=&quot;messageBody&quot;&gt;&quot;คืนคอนเอนกายซึมซับไอดิน คืนถิ่นถวิลหาอาทร &lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;
&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span class=&quot;messageBody&quot;&gt;คืนบ้านที่เสมอสมรสบ่รอน คืนคอนเถิดหนาบินหลาดง&quot; &lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;
&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span class=&quot;messageBody&quot;&gt;14/07/54 02:00 &lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;
&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h6&gt;
&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span class=&quot;messageBody&quot;&gt;&quot;ณ ที่นี่แดนนี้บ่มีฉัน ตลกครันฉันฝืนยืนเฝ้าหา &lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;
&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span class=&quot;messageBody&quot;&gt;ปรุงแต่งแข่งขันนั้นมายา อนิจจาฉันตื่นยืนเดียวดาย...&quot; &lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;
&lt;h6 class=&quot;uiStreamMessage&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span class=&quot;messageBody&quot;&gt;14/07/54 02:15&lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;</description>
	<pubDate>Wed, 13 Jul 2011 19:20:39 +0000</pubDate>
</item>
<item>
	<title>MrChoke: เรื่องน่าคิดกับ Google Ads</title>
	<guid>http://www.mrchoke.org/254 at http://www.mrchoke.org</guid>
	<link>http://www.mrchoke.org/node/254</link>
	<description>&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;ก่อน&lt;br /&gt;
อื่นก็ต้องขอออกตัวตามธรรมเนียมก่อนว่า ผมไม่ได้มีอคติกับ Google&lt;br /&gt;
แต่อย่างใด ในทางกลับกันผมยังเป็น Fan Google คนหนึ่ง เพราะหลายๆ&lt;br /&gt;
อย่างผมยังคงได้รับประโยชน์จากบริการของ Google อยู่ แต่เพราะความเป็น Fan&lt;br /&gt;
นี่แหละผมอยากเห็น Google เดินบนเส้นทางที่ดีกว่าบริษัทอื่นๆ&lt;br /&gt;
ที่เมื่อโตขึ้นแล้วชอบทำตัวไม่ดี อย่างที่เราเห็นๆ กัน เรื่องมันมีอยู่ว่า&lt;br /&gt;
ช่วงก่อนที่ Firefox จะปล่อย Firefox 4 ออกมานั้นผมลองค้นหาพวกนี้ดู&lt;br /&gt;
ก็มีอะไรผิดสังเกตุเกิดขึ้นกับ Google Search นั้นคือ Google Ads&lt;br /&gt;
ตอนแรกเลยที่ผมเจอคือผมพิมพ์คำว่า getfirefox ลงไป ก็มี Google Ads&lt;br /&gt;
ขึ้นมาโดยมี Title ว่า Download Mozilla ถ้าดูเผินๆ ก็ไม่มีอะไรผิดปกตินะ&lt;br /&gt;
แต่ที่สะดุดตาและทำให้ผมแทบไม่เชื่อสายตาตัวเองนั้นคือ link ของ Ad&lt;br /&gt;
ตัวนี้มัน link ไปที่ &lt;a href=&quot;http://www.google.co.th/Chrome&quot; title=&quot;www.google.co.th/Chrome&quot;&gt;www.google.co.th/Chrome&lt;/a&gt; เฮ้ย..... เกิดอะไรขึ้น&lt;br /&gt;
เกิดอะไรขึ้น คำถามในใจผม สงสัยจะมีข้อผิดพลาดนะ ด้วยความอยากรู้อยากเห็น&lt;br /&gt;
ผมก็ลองใช้ keywords ต่างๆ ทดสอบ พบว่า Google Ads ของ Chrome นั้นขึ้นแบบ&lt;br /&gt;
Random และที่สำคัญคือ จะขึ้นกับ Keywords ที่เกี่ยวข้องกับ Web Browser&lt;br /&gt;
เช่น มีคำว่า Download นำหน้า แล้วตามด้วย Firefox , Internet Explorer และ&lt;br /&gt;
 Opera นอกจากนี้ยังมี Keywords ที่น่าเกลียดสุดๆ อย่าง Free music Google&lt;br /&gt;
Ads ก็ขึ้นมาด้วย ไอ้ตัวหลังนี้เจอโดยบังเอิญตอนที่ผมกำลังพิมพ์ Firefox&lt;br /&gt;
โดยเริ่มพิมพ์ตัว F มันก็ขึ้นมาอันแรกเลย Free Music &lt;br /&gt;
ไม่รู้จะเป็นเรื่องน่าขำหรือเป็นเรื่องเศร้าดี ยักษ์ใหญ่อย่าง Google&lt;br /&gt;
มีปัญญาขาย Google Chrom ด้วยการยัดเยียด แบบแหกตาชาวบ้านแบบนี้ เศร้าจริงๆ&lt;br /&gt;
 ครับ &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&amp;lt;object class=&quot;video-filter video-youtube vf-kduwvwsoifk&quot; data=&quot;http://www.youtube.com/v/kDuwvWsOifk&amp;amp;amp;fs=1&quot; height=&quot;225&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;400&quot;&amp;gt;
  &amp;lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/kDuwvWsOifk&amp;amp;amp;fs=1&quot;/&amp;gt;
  &amp;lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;/&amp;gt;
  &amp;lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&amp;gt;
&amp;lt;/object&amp;gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;ภาพเคลื่อนไหวที่จับไว้ได้&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;แต่&lt;br /&gt;
ที่น่าแปลกอีกเรื่องคือเรื่องนี้พวกบรรดา Geek&lt;br /&gt;
เมืองไทยไม่ค่อยให้ความสนใจเท่าไหร่ แต่กลับไปสนใจเรื่อง iPhone&lt;br /&gt;
ถ่ายภาพแล้วติดเหลืองอะไรพวกนั้น ฮ่าๆ ก็ไม่รู้นะผมยากให้ Google ทำตัวดีๆ&lt;br /&gt;
อย่าเหมือนเจ้าอื่นเลย......&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;ด้านล่างเป็นภาพตัวอย่างที่จับไว้&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/000.jpg&quot; /&gt; &lt;br /&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/002.jpg&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/003.jpg&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/004.jpg&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/005.jpg&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/006.jpg&quot; /&gt; &lt;br /&gt;
ข้อมูลเพิ่มเติมจากพี่สัมพันธ์ แห่ง OSDEV ผู้ที่ค้นพบปัญหานี้ก่อนผม พอดีผมก็เพิ่งทราบว่าพี่แกเจอมาก่อน พี่สัมพันธ์ทดสอบแล้วพบว่าปัญหานี้เกิดขึ้นเฉพาะ ip ที่อยู่ในประเทศไทยเท่านั้น ภาพด้านล่างคือภาพที่ใช้ผ่าน proxy พบว่า ads ถูกต้องไม่มีการหลอกกันครับ&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://share.mrchoke.org/blog/ads/007.png&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mrchoke.org/node/254&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 24 Mar 2011 07:02:21 +0000</pubDate>
</item>
<item>
	<title>Ott: อ่าว กรรม</title>
	<guid>tag:blogger.com,1999:blog-6821097.post-7600645202578868815</guid>
	<link>http://callmeott.blogspot.com/2010/06/blog-post.html</link>
	<description>จะเข้าไปค้นศัพท์บัญญํติสักหน่อย
&lt;a href=&quot;http://4.bp.blogspot.com/_TtqTrOjlciI/TBzOvnlv0dI/AAAAAAAAAXw/yxTTN6YUgn0/s1600/20100619-royin-coinage-malware.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_TtqTrOjlciI/TBzOvnlv0dI/AAAAAAAAAXw/yxTTN6YUgn0/s400/20100619-royin-coinage-malware.png&quot; style=&quot;TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 302px; CURSOR: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5484485763706900946&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/6821097-7600645202578868815?l=callmeott.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 19 Jun 2010 14:03:00 +0000</pubDate>
	<author>noreply@blogger.com (Ott)</author>
</item>

</channel>
</rss>

