29 July 2005

AJAX: Simple sample

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

  1. index.html ซึ่งเป็นส่วนติดต่อกับผู้ใช้
  2. ajax.js ซึ่งเป็น Javascript เพื่อติดต่อกับ server
  3. ajax.php เป็น php ส่วนติดต่อกับ database โดยส่วนนี้จะติดต่อกับ ajax.js เพื่อส่งผลลัพท์ไปแสดงผลใน index.html

ส่วนแรก index.html ก็เหมือนกับ html/php ทั่วๆไป คือเป็น form รับข้อมูลจากผู้ใช้

<html>
<head>
<title>Test Ajax</title>
<script language="javascript" src="ajax.js"></script>
</head>
<body>
<form action="search.php" method="post">
<strong>Book name:</strong> 
<input type="text" name="bkname" autocomplete="off" 
id="bkname" onKeyUp="preSearch()" />
<br />
</form>
<div id="filling">&nbsp;</div>
<div id="result">&nbsp;</div>
</body>
</html>

ส่วนที่สองคือ ajax.js ซึ่งทำหน้าที่ติดต่อกับ ajax.php เพื่อแสดงผลการค้นหา โดยจะถูกเรียกมาทำงานตามฟังก์ชัน preSearch() ซึ่งกำหนดไว้ที่ onKeyUp ซึ่งเป็น event ที่จะเกิดขึ้นทุกครั้งที่ผู้ใช้กรอกข้อมูลเข้าไปหนึ่งตัวอักษร เพราะต้องการให้เว็บแสดงผลลัพธ์ทันทีในขณะที่กำลังกรอกข้อมูล

var xmlhttp = false;

if (window.XMLHttpRequest) {
 xmlhttp = new XMLHttpRequest();
 xmlhttp.overrideMimeType('text/xml');
}
else if (window.ActiveXObject) {
 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

function preSearch() {
 var bkName = document.getElementById('bkname').value;
 if (bkName != "") {
   document.getElementById('filling').innerHTML = "Searching... ";
   var url = 'ajax.php?q='+bkName;
   xmlhttp.open('GET',url,true);
   xmlhttp.onreadystatechange = function() {
     if (xmlhttp.readystate == 4 && xmlhttp.status == 200) {
       document.getElementById('result').innerHTML = xmlhttp.responseText;
       document.getElementById('filling').innerHTML = "&nbsp;";
     }
     else {
       document.getElementById('result').innerHTML = "Error....";
       document.getElementById('filling').innerHTML = "&nbsp;";
     }
   };    
   xmlhttp.send(null);
 }
}

จากโปรแกรมข้างบน จะมีการเรียกใช้ XMLHttpRequest ซึ่งเป็น object จึงต้อง initialize ก่อน แต่ Internet Explorer กับ Gecko-based browser มีวิธีการเรียกใช้ XMLHttpRequest ไม่เหมือนกัน จึงต้องใช้วิธีข้างต้น ในการกำหนดค่าเริ่มต้น จากนั้น preSearch() จะเรียกข้อมูลที่ผู้ใช้กรอกไว้ โดยใช้ document.getElementById() ซึ่งฟังก์ชันนี้จัดว่าเป็นฟังก์ชันสำคัญฟังก์ชันหนึ่ง เพราะทำให้สามารถเข้าไปแก้ไขโครงสร้างส่วนต่างๆ ของเว็บได้ จากนั้นจะใช้ XMLHttpRequest เพื่อติดต่อไปยัง ajax.php และส่งข้อมูลที่ต้องการค้นหาไปให้ แล้วก็รอผลลัพธ์จาก ajax.php เพื่อนำมาแสดงผลใน id ที่ชื่อว่า result

ส่วนสุดท้ายคือ ajax.php ก็เป็นสคริปต์ php ทั่วๆ ไป ซึ่งจะรับ request แล้วก็จะไปค้นหาข้อมูลในฐานข้อมูล จัดรูปแบบให้เรียบร้อย เพื่อใช้เป็นผลลัพธ์

<?php 
 if (empty($_GET['q'])) {
       echo ' ';
   }
   else {
       $search = trim($_GET['q']);
       $link = mysql_connect('localhost', 'user', 'password')
           or die('Could not connect: '.mysql_error());
      mysql_select_db('bookstore') 
           or die('Could not select database:'.mysql_error());

      $query = "SELECT bkname,bkauthor FROM book WHERE bkname LIKE
'$search%'";
      $result = mysql_query($query) 
           or die('Query failed:'.mysql_error());
?>
       <table border="1"><tr><th>Title</th><th>Author</th></tr>
       <?php
       while($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
           echo('<tr>');
           foreach($line as $col) {
               echo("<td>$col</td>");
           }
           echo('</tr>');
       }
       ?>
       </table>
<?php
       mysql_free_result($result);
       mysql_close($link);
   }
?>

สรุป จะเห็นว่าส่วนที่เพิ่มเติมของเทคนิค AJAX ก็คือ การใช้ XMLHttpRequest เพื่อร้องขอข้อมูลเพิ่มเติม และการเข้าถึง DOM โดยใช้ document.getElementById เพื่อให้สามารถแก้ไข หรือเพิ่มเติมโครงสร้างของเว็บได้ ช่วยให้เว็บมีการตอบสนองผู้ใช้ได้ดียิ่งขึ้น จากเดิมที่ต้องแสดงผลใหม่ทั้งหน้า เป็นแสดงผลเฉพาะส่วน ตัวอย่างนี้แค่แสดงลักษณะง่ายๆ ของ AJAX แต่การนำไปใช้งานจริง คงจะมีสิ่งที่ต้องคำนึงถึงมากกว่านี้ ทั้งในเรื่องการจัดการส่วนการแสดงผลให้เหมาะสม

AJAX

AJAX ย่อมาจาก Asynchronous Javascript And XML เป็นเทคนิคการพัฒนาเว็บแบบใหม่ ซึ่งสามารถตอบสนองผู้ใช้ได้ดีขึ้น ใกล้เคียงกับโปรแกรมประยุกต์อื่นๆ โดยใช้ Javascript และ XML มาช่วย กล่าวคือ เดิมการพัฒนาโปรแกรมบนเว็บนั้น จะต้องโหลดเว็บใหม่ทั้งหน้าเมื่อมีการเลือก หรือกำหนดค่าข้อมูลเข้า (inputs) อะไรบางอย่างที่จะให้โปรแกรมตอบสนอง ซึ่งทำให้ลักษณะการตอบสนองต่อผู้ใช้ ไม่ดีเท่ากับโปรแกรมประยุกต์ทั่วๆ ไป ซึ่งเมื่อเลือกหรือกำหนดค่าแล้ว โปรแกรมจะแสดงผลทำให้เกิดการเปลี่ยนแปลงเฉพาะส่วนที่ต้องการ AJAX จึงเป็นเทคนิค และแนวทางที่เข้ามาเสริมจุดอ่อนของเว็บในด้านการตอบสนองผู้ใช้ โดยใช้ลักษณะการจัดการข้อมูลการแสดงผล ซึ่งอยู่ในรูปของ Document Object Model ที่เข้าถึงเพื่อเปลี่ยนแปลงแก้ไขการแสดงผลได้ด้วย Javascript และใช้ XMLHTTPRequest มาช่วยดึงข้อมูลเพิ่มเติมจาก server ทำให้สามารถเปลี่ยนแปลง หรือแสดงผลข้อมูลได้ โดยไม่จำเป็นต้องไปโหลดเว็บมาใหม่ทั้งหน้า ช่วยลดเวลาที่ผู้ใช้ต้องรอ นอกจากนี้ยังใช้เทคโนโลยี XML, XSLT รวมทั้ง CSS มาช่วยจัดรูปข้อมูล ให้แสดงผลได้มีประสิทธิภาพมากขึ้น

ตัวอย่างของเว็บที่ใช้เทคนิค AJAX ในการพัฒนาก็คือ เว็บต่างๆ ของบริษัท Google ตั้งแต่ GMail ที่ทำงานได้ราบรื่น จนดูเหมือนเป็นโปรแกรมเมลที่ทำงานบนเครื่องเราเอง หรือ Google Maps ซึ่งสามารถจัดการ Zoom in/out และเลื่อนแผนที่ไปมาได้ง่ายมากๆ เคยได้ยินเรื่อง AJAX มาซักพักนึงแล้ว แต่ตอนนี้เพิ่งมาศึกษารายละเอียด เพราะกำลังตัดสินใจว่าจะเอาไปสอนเป็นส่วนหนึ่งของวิชาเกี่ยวกับระบบสารสนเทศที่กำลังสอนดีหรือไม่ เพราะกลัวว่าเวลาอาจจะไม่พอ แต่ถ้าเป็นวิชาเกี่ยวกับเทคโนโลยีอินเตอร์เน็ตคิดว่าคงไม่พลาดอยู่แล้ว

อ้างอิง:

Gnome-volume-manager

เจอปัญหามาพักใหญ่แล้ว ว่าทำไม Gentoo Linux ที่ใช้อยู่ไม่ยอม mount removable devices เช่น CD, handy drive ให้อัตโนมัติ ทั้งๆ ที่ติดตั้ง hal, dbus และ gnome-volume-manager ไว้แล้ว แต่จะว่าไปก็ไม่เห็นมีปัญหาอะไรกับระบบ เพียงแต่สังเกตว่า หลังจากเสียบ handy drive เข้าไปแล้ว ก็ต้องไปเรียก gnome-volume-properties หรือโปรแกรมสำหรับกำหนดค่าเกี่ยวกับ removable devices ต่างๆ ก่อน ระบบจึงจะ mount ให้โดยอัตโนมัติ

ด้วยความสงสัยเลยลองหาใน Forums ของ Gentoo ดู ปรากฎว่ามีคนเจอปัญหาคล้ายๆ กัน และสาเหตุของปัญหาก็คือ hald ไม่ได้ไปเรียก gnome-volume-manager มาทำงาน ทำให้ไม่เกิดการ mount สุดท้ายบอกวิธีแก้ไว้ด้วยว่า อาจจะเกิดจากการที่มีการสร้างไดเรคทอรี /media ไว้เองก่อน (หรือมีปัญหาอะไรก็แล้วแต่ ที่ทำให้ /media เหลือค้างอยู่) ทำให้ hald ไม่ยอมจัดการ mount ให้ วิธีแก้ก็ง่ายๆ เพียงแค่ลบ /media ทิ้ง ก็เป็นอันเสร็จสิ้น

27 July 2005

ปฏิทินคลาดเคลื่อน ?

วันนี้ดูรายการถึงลูกถึงคนด้วยความหงุดหงิดกับบรรดาโหรทั้งหลาย เลยต้องมานั่งเขียนบลอค หลังจากที่ไม่ได้เขียนมาซะนาน ว่าบรรดาโหรทั้งหลาย จะอะไรกันนักหนา ที่ว่ากำหนดวันต่างไปจะเป็นเรื่องใหญ่โต จะทำให้อะไรผิดเพี้ยนไป เพราะวันเหล่านั้นมนุษย์ก็เป็นคนกำหนดขึ้นเอง โดยมีจุดหมายเพียงเพื่อคำนวณวันเวลาต่างๆ ให้ตรงกับปรากฏการณ์ธรรมชาติมากที่สุด ส่วนเรื่องวิธีการคำนวณปฏิทินไทยนั้น จะทำยังไงก็ได้ไม่เห็นแปลก เพราะจุดที่แตกต่างก็คือวิธีการทดวัน เพื่อให้วันตามระบบจันทรคติสอดคล้องกับระบบสุริยคติ แถมเมื่อดูตามข้อมูลการคำนวณขององค์การนาซ่าที่น่าเชื่อถือกว่าข้อมูลของบรรดาโหรทั้งหลายที่กำหนดว่าคาบของดวงจันทร์มีค่าคงที่เท่ากับ 29.5 วัน ก็ยิ่งเห็นได้ชัดเลยว่าปฏิทินหลวงถูกต้องกว่า เพราะกำหนดวันได้ใกล้เคียงกับลักษณะของดวงจันทร์มากกว่า อย่างวันอาสาฬหบูชาที่ผ่านมา ก็ตรงตามที่นาซ่าคำนวณไว้ว่า ดวงจันทร์เต็มดวง ณ เวลา 11:00 ของวันที่ 21 กรกฎาคม ตามเวลา GMT หรือ 18:00 ตามเวลาประเทศไทย ตอนนี้ก็คงได้แต่รอสำนักพระราชวังออกมาชี้แจงเรื่องนี้ แต่อยากให้ชี้แจงเร็วๆ จัง โหรคนนั้น (ที่ยกตัวเองว่าเป็นปราชญ์) จะได้เลิกกร่างซะที

อย่างไรก็ดี สุดท้ายแล้วก็มีความเห็นตามอ.ประเสริฐ ณ นคร ว่า จะวันไหนก็เหมือนกัน ไม่เห็นจะเป็นเรื่องที่ต้องมาใส่ใจนัก โดยเฉพาะเราซึ่งไม่เคยถือฤกษ์ยามใด ไม่เคยนับถือบรรดากระพี้ทั้งหลาย ที่พยายามปิดบังแก่นของพุทธศาสนา ใครจะว่าโหราศาสตร์เป็นเรื่องของสถิติ แต่สถิติที่ไม่ได้มีการจดบันทึก หรือมีหลักฐานที่แน่นอน ก็ไม่ต่างจากการเดาหรอก

07 July 2005

Leap Second

วันนี้เจอข่าวจาก /.jp ว่ามีการประกาศให้เพิ่มเวลา 1 วินาที เข้าไปตอนสิ้นปีนี้ เพื่อให้เวลามาตรฐาน หรือ UTC ใกล้เคียงกับเวลาหมุนรอบดวงอาทิตย์ของโลกที่สุด เขาทำกันมาหลายครั้งแล้ว แต่เพิ่งเคยได้ยินครั้งแรก เลยไปนั่งอ่าน Wikipedia เรื่อง Leap second มาหน่อย ได้ความว่าตามระบบเวลามาตรฐาน เรากำหนดให้ 1 ปี มี 84,600 วินาที แต่เวลาการหมุนรอบดวงอาทิตย์ของโลกจริง (UT1) อาจจะไม่ตรงตามนั้น เลยต้องมีการปรับเวลา UTC เพื่อให้ใกล้เคียงกับเวลา UT1 ที่สุด คือไม่เกิน +/- 0.9 วินาที อย่างเช่นปลายปีนี้ ก็เลยมีการประกาศให้เพิ่มเวลา 1 วินาที ดังนั้นสิ้นปีนี้เราจะมี

 31 ธันวาคม 2548,   23.59.59น.
 31 ธันวาคม 2548,   23.59.60น.
  1 มกราคม 2549,   00.00.00น.

06 July 2005

ภารกิจเลือด

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

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

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

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

ชื่อคู่สมรสในบัตรประชาชน

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

ความบังเอิญ ???

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

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

01 July 2005

สุริยคราส 3.1

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

AMD64

อาทิตยที่แล้วไปถอย Athlon64 3000+, แรม 1GB มาใช้งาน เนื่องจากมีทั้งงานราษฎร์ และงานหลวง ซื้อแต่ตัวเครื่องอย่างเดียว รวมราคาแล้วก็ไม่แพงเกินไปนัก หลังจากได้มา ก็ได้ฤกษ์ลง Linux ใหม่ โดยเริ่มจาก Ubuntu ก่อน เนื่องจากติดตั้งได้รวดเร็วกว่า (ถ้ามีซีดีพร้อม ก็ประมาณ 1 ชม.เองมั้ง) แต่เนื่องจากไม่มีซีดีแบบ amd64 ก็เลยเสียเวลาโหลดอยู่เกือบสองวันได้ (ตอนรอนี่คิดถึงมหาลัยญี่ปุ่นจริงๆ ตอนก่อนโหลดซีดีแผ่นหนึ่ง ใช้เวลาประมาณ 5 นาทีเองน่ะ) เมื่อติดตั้ง Ubuntu เสร็จใช้งานได้เรียบร้อย ก็เริ่มโหยหา Gentoo เพราะรู้สึกว่าชินกับ Gentoo มากกว่า ก็เลยแบ่งพาร์ติชันเพิ่มเพื่อติดตั้ง ซึ่งก็ใช้เวลาไปอีกสองวันได้ จนวันนี้หันมาใช้ Gentoo เต็มตัวแล้ว

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

# emerge --digest mozilla-firefox

ซึ่งจะสร้าง digest หรือ md5sum ให้ใหม่ก่อนที่จะคอมไพล์ ebuild สงสัยตัวนี้เป็นฟังก์ชันใหม่แน่เลย เพราะหาอ่านใน man แล้วใน emerge --help ก็ไม่มีบอกไว้เลย

ป.ล. วันนี้เพิ่งสังเกตว่า blogger เพิ่มปุ่มสำหรับ upload รูปให้แล้วล่ะ ไม่ต้องต้องใช้บริการจาก Picasa หรือ Flickr แล้ว