<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Natty's blog</title>
	<atom:link href="http://nattyait.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nattyait.wordpress.com</link>
	<description>Stay hungry. Stay foolish. -- Steve Jobs</description>
	<lastBuildDate>Tue, 09 Jun 2009 18:49:29 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='nattyait.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/34cd372466ad9d5684fd7f486f9f094b?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Natty's blog</title>
		<link>http://nattyait.wordpress.com</link>
	</image>
			<item>
		<title>[PHP] การเพิ่ม Performance ให้กับ PHP+MySQL ด้วย xDebug,APC,memcache</title>
		<link>http://nattyait.wordpress.com/2009/06/10/php-mysql-performance/</link>
		<comments>http://nattyait.wordpress.com/2009/06/10/php-mysql-performance/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 18:07:09 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=145</guid>
		<description><![CDATA[เขียนโปรแกรมเล็กๆ ไม่ค่อยมีปัญหาอะไร แต่เมื่อไหร่ก็ตาม ที่งานของเรา ต้องทำงานกับข้อมูลเยอะๆ และ Application ขนาดใหญ่ มีหลาย module โดยเฉพาะ หากใช้ object-oriented ด้วยแล้ว แม้จะมีประโยชน์ในด้านของการออกแบบก็จริง แต่ด้านของ performance ก็มีผลกระทบในแง่ร้ายเช่นกัน ดังนั้น จึงควรที่จะเรียนรู้เกี่ยวกับการ config ค่าต่าง ๆ ทั้งในส่วนของ PHP และ MySQL ค่ะ
blog นี้จะไม่กล่าวถึงการ install ในขั้นต้นนะคะ โดยเป็น Apache Server บน linux ค่ะ
MySQL
เริ่มกันก่อนในส่วน MySQL
ปกติ หากเราลง MySQL แบบ default เราจะใช้ my.ini แบบที่กำหนดมาเป็น default แต่หากเราต้องการจะ modify ให้ใช้งานและรองรับข้อมูลจำนวนมาก ให้เราลองสังเกตใน folder MySQL ของเรา จะมีไฟล์ config [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=145&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>เขียนโปรแกรมเล็กๆ ไม่ค่อยมีปัญหาอะไร แต่เมื่อไหร่ก็ตาม ที่งานของเรา ต้องทำงานกับข้อมูลเยอะๆ และ Application ขนาดใหญ่ มีหลาย module โดยเฉพาะ หากใช้ object-oriented ด้วยแล้ว แม้จะมีประโยชน์ในด้านของการออกแบบก็จริง แต่ด้านของ performance ก็มีผลกระทบในแง่ร้ายเช่นกัน ดังนั้น จึงควรที่จะเรียนรู้เกี่ยวกับการ config ค่าต่าง ๆ ทั้งในส่วนของ PHP และ MySQL ค่ะ</p>
<p>blog นี้จะไม่กล่าวถึงการ install ในขั้นต้นนะคะ โดยเป็น Apache Server บน linux ค่ะ</p>
<p><strong>MySQL</strong></p>
<p>เริ่มกันก่อนในส่วน MySQL</p>
<p>ปกติ หากเราลง MySQL แบบ default เราจะใช้ my.ini แบบที่กำหนดมาเป็น default แต่หากเราต้องการจะ modify ให้ใช้งานและรองรับข้อมูลจำนวนมาก ให้เราลองสังเกตใน folder MySQL ของเรา จะมีไฟล์ config อีกมากมายเลย เช่น my-huge.ini, my-innodb-heavy-4G.ini, my-large.ini, my-medium.ini, my-small.ini, my-template.ini ซึ่งใน file พิเศษๆ เหล่านี้ จะมีการ set ค่าเหล่านี้ ยกตัวอย่างจาก my-huge.ini</p>
<p>key_buffer = 384M<br />
max_allowed_packet = 1M<br />
table_cache = 512<br />
sort_buffer_size = 2M<br />
read_buffer_size = 2M<br />
read_rnd_buffer_size = 8M<br />
myisam_sort_buffer_size = 64M<br />
thread_cache_size = 8<br />
query_cache_size = 32M</p>
<p>ซึ่งแต่ละ File ก็จะมีการตั้งค่าแตกต่างกันไป วิธีการเอาไปใช้งาน ก็แค่เปลี่ยนชื่อไฟล์ที่เหมาะกับเราเป็นชื่อ my.ini (back up อันเดิมไว้ด้วยก็ดีค่ะ เผื่อมีอะไรผิดพลาด)</p>
<p><strong>xDebug</strong></p>
<p><em>xDebug</em> คือ PHP profiler และช่วยจัด format PHP ให้อ่านง่ายๆ ได้ด้วย</p>
<p><img src="http://www.mikebernat.com/images/xdebug/var_dump_full.jpg" alt="" /></p>
<p>ในส่วนของ profiler จะมีการเก็บ log ของ server เกี่ยวกับเวลาในการรันของแต่ละ class แต่ละ method กันเลยทีเดียว แต่ไฟล์ที่ได้ออกมาจะเป็น text file โง่ๆ ที่อ่านยากมากๆ ต้องลงพวก GUI เป็น WinCacheGrind สำหรับ Windows และ <span>KCacheGrind สำหรับ Linux </span></p>
<p><span>ก่อนอื่น ต้องลง xDebug ไว้ที่ server ก่อน</span></p>
<p><span>#yum install php-pear<br />
#pecl install xdebug<br />
#</span>vim /etc/php.ini   &lt;&#8211; เพิ่มบรรทัด extension = xdebug.so ลงไป และบรรทัดต่อไปนี้</p>
<p>[xdebug]<br />
xdebug.remote_enable=On<br />
xdebug.remote_autostart=On<br />
xdebug.remote_handler=dbgp<br />
xdebug.remote_host=zero.haadthip.com<br />
xdebug.remote_port=9000<br />
xdebug.remote_mode=req<br />
xdebug.profiler_enable=1<br />
xdebug.profiler_output_dir=&#8221;/tmp/&#8221; &lt;&#8211; log เก็บที่นี่<br />
xdebug.profiler_append=On<br />
xdebug.profiler_enable_trigger=On<br />
xdebug.profiler_output_name=%s</p>
<p>ตรวจสอบให้แน่ใจว่ามี file xdebug.so อยู่ใน /usr/lib/php/modules</p>
<p>และ restart mysql + Apache ด้วยค่ะ ลอง echo phpinfo หากสำเร็จแล้วจะได้ผลดังนี้<br />
<img src="http://tech-blog.box.net/wp-content/uploads/2007/06/xdebug-in-phpinfo.jpg" alt="" /></p>
<p>จากนั้น ก็ลง <a href="http://sourceforge.net/projects/wincachegrind/">WinCacheGrind</a> ซึ่งเอา log file ได้จาก path ที่เสร็จไว้ใน php.ini (xdebug.profiler_output_dir) โหลดไฟล์เข้าไป ก็จะเอาไปแสดงในโปรแกรม ดังรูป<br />
<img src="http://www.pseudocoder.com/wp-content/uploads/2007/04/wincachegrind3.jpg" alt="" /></p>
<p>คราวนี้เราก็วัด performance ก่อน และ หลัง ได้แล้วค่ะ</p>
<p><strong>APC</strong></p>
<p>คือ Alternative PHP cache เอาไว้ cache code โดยจะ cache มันไว้ ณ compile state ทำให้ overhead ลดลง เอาเป็นว่าไม่เกี่ยวข้องกับ database นะคะ</p>
<p>ดูกระบวนการทำงานของ APC กันสักหน่อย<br />
<img src="http://www.ez.no/var/ezno/storage/images/images/community/articles/alternative_php_cache/883778-1-eng-GB/alternative_php_cache.png" alt="" /></p>
<p>ขั้นตอนการ install</p>
<p>#yum install httpd-devel</p>
<p>(php-devel ลงเพราะมันต้องการ apxs หากเราไม่มี apxs ก่อนนจะลง APC มันจะ error ว่า</p>
<p>Sorry, I was not able to successfully run APXS.  Possible reasons:</p>
<p>1.  Perl is not installed;<br />
2.  Apache was not compiled with DSO support (&#8211;enable-module=so);<br />
3.  &#8216;apxs&#8217; is not in your path.  Try to use &#8211;with-apxs=/path/to/apxs<br />
The output of apxs follows<br />
/tmp/tmpe1LwOh/APC-3.0.19/configure: line 3232: apxs: command not found<br />
configure: error: Aborting<br />
ERROR: `/tmp/tmpe1LwOh/APC-3.0.19/configure &#8211;with-apxs&#8217; failed</p>
<p>)<br />
#yum install apc<br />
#pecl install apc<br />
vim /etc/php.ini  เพิ่ม extension=apc.so และเพิ่มบรรทัดต่อไปนี้</p>
<p>[APC]<br />
apc.enabled = 1<br />
apc.shm_segments = 1<br />
apc.shm_size = 64<br />
apc.max_file_size = 10M<br />
apc.stat=1</p>
<p>ทำการ restart Apache และลองดู phpinfo.php</p>
<p><img src="http://www.howtoforge.com/images/apc_php5_lighttpd_debian_etch/3.png" alt="" /></p>
<p>และควรจะ <a href="http://pecl.php.net/apc">download package</a> ของ APC มาด้วย เพราะจะได้ดูทางหน้าเว็บได้ โดยแตกตัว folder เอาไปวางใน root directory นะคะ จะได้หน้าตาเว็บแบบนี้เอาไว้ดู resource เกี่ยวกับ APC ของ server</p>
<p><img src="http://www.rawseo.com/articles/apc_cache/apc_screen.png" alt="" /></p>
<p><strong>Memcache</strong></p>
<p>หลังจากที่มีการ cache หน้า page กันแล้ว ตรงส่วน database ก็มีความสำคัญเช่นกัน เพราะ connection database เป็นอะไรอีกอย่างที่ทำให้เกิดความช้า หากเรา query บ่อย ๆ ประกอบกับมี query ที่ซับซ้อนและมีจำนวนข้อมูลที่เป็นผลลัพธ์มาก ใช้ memcache นี่แหละค่ะ เป็นตัวช่วย</p>
<p>วิธีการติดตั้ง</p>
<p>#wget http://monkey.org/~provos/libevent-1.3e.tar.gz<br />
#tar zxpfv libevent*<br />
#cd libevent*<br />
#./configure<br />
#make install</p>
<p>#wget http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz<br />
#tar zxpfv memcached*<br />
#cd memcached*<br />
#./configure<br />
#make install</p>
<p>#adduser memcached</p>
<p>หากเกิดปัญหาเกี่ยวกับการหา file libevent ไม่เจอ แก้ไขดังนี้</p>
<p>ค่อยมาเขียน</p>
<p>จากนั้น ต้องลง php-memcache ด้วย</p>
<p>#yum install php-pecl-memcache.i386<br />
#vi /etc/php.ini เพิ่มบรรทัดดังต่อไปนี้</p>
<p>[memcache]<br />
memcache.allow_failover=1<br />
memcache.max_failover_attempts=20<br />
memcache.chunk_size=8192<br />
memcache.default_port=11211</p>
<p>ทำการ restart server แล้วตรวจสอบ phpinfo<br />
<img src="http://centoshacker.com/wp-content/uploads/2008/11/memcache_phpinfo.jpg" alt="" /></p>
<p>การใช้งาน memcache ต้อง run ให้มันทำงานอยู่ด้วย เหมือนกับ run server นั่นแหละ โดยใช้คำสั่ง<br />
memcached -vv -u memcached</p>
<p>ถ้าได้ผลแบบนี้แสดงว่า memcache server ได้ run ขึ้นมาแล้ว พร้อมใช้งานค่ะ<br />
<img src="http://4.bp.blogspot.com/_YB14YH_zSmM/SQdKmC5yZmI/AAAAAAAAAEc/3Tu_h54kWn0/s320/memcached-verbose.png" alt="" /></p>
<p>ลองทดสอบว่าสามารถ cache ได้แล้วจริงหรือไม่ โดย copy code ต่อไปนี้ รอไปรันดู</p>
<div>
<div><code><span style="color:#000000;"> <span style="color:#0000bb;">&lt;?php$memcache</p>
<p></span><span style="color:#007700;">= new </span><span style="color:#0000bb;">Memcache</span><span style="color:#007700;">;<br />
</span><span style="color:#0000bb;">$memcache</span><span style="color:#007700;">-&gt;</span><span style="color:#0000bb;">connect</span><span style="color:#007700;">(</span><span style="color:#dd0000;">'localhost'</span><span style="color:#007700;">, </span><span style="color:#0000bb;">11211</span><span style="color:#007700;">) or die (</span><span style="color:#dd0000;">"Could not connect"</span><span style="color:#007700;">); </span><span style="color:#0000bb;">$version </span><span style="color:#007700;">= </span><span style="color:#0000bb;">$memcache</span><span style="color:#007700;">-&gt;</span><span style="color:#0000bb;">getVersion</span><span style="color:#007700;">();<br />
echo </span><span style="color:#dd0000;">"Server's version: "</span><span style="color:#007700;">.</span><span style="color:#0000bb;">$version</span><span style="color:#007700;">.</span><span style="color:#dd0000;">"&lt;br/&gt;\n"</span><span style="color:#007700;">; </span><span style="color:#0000bb;">$tmp_object </span><span style="color:#007700;">= new </span><span style="color:#0000bb;">stdClass</span><span style="color:#007700;">;<br />
</span><span style="color:#0000bb;">$tmp_object</span><span style="color:#007700;">-&gt;</span><span style="color:#0000bb;">str_attr </span><span style="color:#007700;">= </span><span style="color:#dd0000;">'test'</span><span style="color:#007700;">;<br />
</span><span style="color:#0000bb;">$tmp_object</span><span style="color:#007700;">-&gt;</span><span style="color:#0000bb;">int_attr </span><span style="color:#007700;">= </span><span style="color:#0000bb;">123</span><span style="color:#007700;">; </span><span style="color:#0000bb;">$memcache</span><span style="color:#007700;">-&gt;</span><span style="color:#0000bb;">set</span><span style="color:#007700;">(</span><span style="color:#dd0000;">'key'</span><span style="color:#007700;">, </span><span style="color:#0000bb;">$tmp_object</span><span style="color:#007700;">, </span><span style="color:#0000bb;">false</span><span style="color:#007700;">, </span><span style="color:#0000bb;">10</span><span style="color:#007700;">) or die (</span><span style="color:#dd0000;">"Failed to save data at the server"</span><span style="color:#007700;">);<br />
echo </span><span style="color:#dd0000;">"Store data in the cache (data will expire in 10 seconds)&lt;br/&gt;\n"</span><span style="color:#007700;">; </span><span style="color:#0000bb;">$get_result </span><span style="color:#007700;">= </span><span style="color:#0000bb;">$memcache</span><span style="color:#007700;">-&gt;</span><span style="color:#0000bb;">get</span><span style="color:#007700;">(</span><span style="color:#dd0000;">'key'</span><span style="color:#007700;">);<br />
echo </span><span style="color:#dd0000;">"Data from the cache:&lt;br/&gt;\n"</span><span style="color:#007700;">; </span><span style="color:#0000bb;">var_dump</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$get_result</span><span style="color:#007700;">); </span><span style="color:#0000bb;">?&gt;</span> </span> </code></div>
</div>
<p>นั่นแสดงว่า วิธีการใช้ memcache คือ เราต้อง new memcache ให้กับ query ที่เราต้องการจะ cache หากคุณมี code อยู่แล้ว และต้องการจะ cache มีทางเดียวที่ทำได้ คือ แก้ code ค่ะ ^O^ งานเข้าล่ะสิ</p>
<p>และจริงๆ memcache เอง ก็สามารถดูประสิทธิภาพทางหน้าเว็บได้เหมือน APC เลย ลอง download code จาก ลิงค์นี้ค่ะ http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/</p>
<p><img src="http://livebookmark.net/journal/wp-content/uploads/2008/05/memcache.png" alt="" /></p>
<p>เรื่องการ config แต่ละตัว อาจจะไม่ละเอียดมาก เรียกได้ว่าพอใช้งานได้แล้วกันค่ะ หากใครอยากจะ modify กันมากกว่านี้ ก็ตามไปอ่าน official website กันได้ค่ะ</p>
<p>หากมีข้อสงสัย ติชม เพิ่มเติม ก็ comment เอาไว้ได้ หากเอาไปอ้างอิง อย่าลืม credit ให้ด้วยนะคะ</p>
<p>ลิงค์น่าอ่านเพิ่มเติม</p>
<p>http://www.thaicyberpoint.com/ford/blog/id/170/<br />
http://www.pantz.org/software/php/phptuningtips.html<br />
http://dev.mysql.com/doc/refman/5.1/en/query-cache.html</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:6836px;width:1px;height:1px;">http://www.pantz.org/software/php/phptuningtips.html</div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=145&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2009/06/10/php-mysql-performance/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>

		<media:content url="http://www.mikebernat.com/images/xdebug/var_dump_full.jpg" medium="image" />

		<media:content url="http://tech-blog.box.net/wp-content/uploads/2007/06/xdebug-in-phpinfo.jpg" medium="image" />

		<media:content url="http://www.pseudocoder.com/wp-content/uploads/2007/04/wincachegrind3.jpg" medium="image" />

		<media:content url="http://www.ez.no/var/ezno/storage/images/images/community/articles/alternative_php_cache/883778-1-eng-GB/alternative_php_cache.png" medium="image" />

		<media:content url="http://www.howtoforge.com/images/apc_php5_lighttpd_debian_etch/3.png" medium="image" />

		<media:content url="http://www.rawseo.com/articles/apc_cache/apc_screen.png" medium="image" />

		<media:content url="http://centoshacker.com/wp-content/uploads/2008/11/memcache_phpinfo.jpg" medium="image" />

		<media:content url="http://4.bp.blogspot.com/_YB14YH_zSmM/SQdKmC5yZmI/AAAAAAAAAEc/3Tu_h54kWn0/s320/memcached-verbose.png" medium="image" />

		<media:content url="http://livebookmark.net/journal/wp-content/uploads/2008/05/memcache.png" medium="image" />
	</item>
		<item>
		<title>[twitter] facebook-twitter</title>
		<link>http://nattyait.wordpress.com/2009/05/17/twitter-facebook/</link>
		<comments>http://nattyait.wordpress.com/2009/05/17/twitter-facebook/#comments</comments>
		<pubDate>Sun, 17 May 2009 06:34:44 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[configuration]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=140</guid>
		<description><![CDATA[ด้วยความพยายามจะ sync facebook กับ twitter เข้าด้วยกัน เพื่อที่จะอัพเดท status ครั้งเดียวแล้วไปอัพเดททั้ง facebook และ twitter  ซึ่งตอนนี้ก็ทำได้แล้วโดยที่

อัพเดทจาก twitter แล้วจะไปอัพเดท status ใน facebook อัตโนมัติ
อัพเดทจาก twitter application ใน facebook แล้วไปอัพเดทใน twitter อัตโนมัติ
อัพเดทจาก facebook status แล้วอัพเดทอัตโนมัติใน twitter &#60;&#8211; ยังไม่แน่ใจว่าได้หรือยัง

อ่ะ ก่อนอื่น มาทำให้อัพเดทจาก twitter ไป facebok ก่อนละกัน ง่ายๆ เลย แค่ใช้ application:http://apps.new.facebook.com/twitter/ ใส่ user/pass ของ twitter ของคุณ แค่นี้ก็เสร็จแล้ว หากคุณอัพเดท twitter จากหน้า application ใน twitter ใน [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=140&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>ด้วยความพยายามจะ sync facebook กับ twitter เข้าด้วยกัน เพื่อที่จะอัพเดท status ครั้งเดียวแล้วไปอัพเดททั้ง facebook และ twitter  ซึ่งตอนนี้ก็ทำได้แล้วโดยที่</p>
<ul>
<li>อัพเดทจาก twitter แล้วจะไปอัพเดท status ใน facebook อัตโนมัติ</li>
<li>อัพเดทจาก twitter application ใน facebook แล้วไปอัพเดทใน twitter อัตโนมัติ</li>
<li>อัพเดทจาก facebook status แล้วอัพเดทอัตโนมัติใน twitter &lt;&#8211; ยังไม่แน่ใจว่าได้หรือยัง</li>
</ul>
<p>อ่ะ ก่อนอื่น มาทำให้อัพเดทจาก twitter ไป facebok ก่อนละกัน ง่ายๆ เลย แค่ใช้ application:http://apps.new.facebook.com/twitter/ ใส่ user/pass ของ twitter ของคุณ แค่นี้ก็เสร็จแล้ว หากคุณอัพเดท twitter จากหน้า application ใน twitter ใน facebook นี้ ก็จะไปอัพเดทใน twitter ของคุณ และจากคุณอัพเดทจาก twitter นอก facebook มันก็จะอัพเดทไปถึง facebook status เลย</p>
<p>และวิธีทำให้ อัพเดทจาก facebook status แล้วไปอัพเดท twitter อัตโนมัติ ทำได้ดังนี้ค่ะ</p>
<ol>
<li>เข้า twitter feed:http://twitterfeed.com แล้ว login เข้า twitterfeed (กรณีนี้เก๋ใช้ openid ในการ login ค่ะ)</li>
<li>เลือก go to my twitterfeeds</li>
<li>เลือก create new feed</li>
<li>เอาลิงค์ไปใส่ที่ RSS feed url โดยไปที่หน้า facebook ของตัวเอง เข้าลิงค์ http://www.facebook.com/notifications.php แล้วไปที่ your notification ด้านล่างขวา ให้ copy ลิงค์นั้นมา</li>
<li>ตั้งค่าตามต้องการ</li>
</ol>
<p>หวังว่าคงเป็นประโยชน์กับทุกท่านนะจ้ะ</p>
<p>ส่วนหนึ่ง อ้างอิงจากที่นี่ค่ะ http://blog.kristibarrow.com/2008/11/19/how-to-update-twitter-with-your-facebook-status/</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=140&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2009/05/17/twitter-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>[drupal] ปฐมบท installation</title>
		<link>http://nattyait.wordpress.com/2009/05/14/drupal-installation/</link>
		<comments>http://nattyait.wordpress.com/2009/05/14/drupal-installation/#comments</comments>
		<pubDate>Thu, 14 May 2009 11:36:47 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=137</guid>
		<description><![CDATA[ช่วงนี้มีโอกาสได้ทำงานเล็กๆ ที่ได้หน้าได้ตา ให้กับบริษัท เกี่ยวกับการทำ community ก็เลือกเครื่องมืออยู่ หลายตัวทีเดียว มีทั้ง wordpress drupal joomla วันนั้น test ทีเดียว 3 ตัว ก็ได้ข้อสรุปมาว่า drupal เหมาะกับ requirement นี้ที่สุด (สนับสนุน drupal แต่เขียน blog ใน wordpress ฮ่าๆๆๆ) ก็เลยว่าจะมาบันทึกเรื่อง drupal ไว้ก่อน ระหว่างที่จำได้อยู่แบบนี้
ไม่ได้ลงรูปเลยนะคะ ให้จินตนาการกันเอาเอง ฮ่าๆๆ
สามารถดาวน์โหลด drupal ได้จาก http://drupal.org/project/drupal ซึ่งเวอร์ชั่นที่โหลดมาตอนนี้ เป็นเวอร์ชั่น 6.12 ถ้าดูขนาด จะเห็นว่า แค่ 1 mb กว่าๆ เอา ตัวเล็กมากๆ ไม่น่าเชื่อ
หลังจากนั้น ก็ extract ไฟล์ ไปวางใน web directory [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=137&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>ช่วงนี้มีโอกาสได้ทำงานเล็กๆ ที่ได้หน้าได้ตา ให้กับบริษัท เกี่ยวกับการทำ community ก็เลือกเครื่องมืออยู่ หลายตัวทีเดียว มีทั้ง wordpress drupal joomla วันนั้น test ทีเดียว 3 ตัว ก็ได้ข้อสรุปมาว่า drupal เหมาะกับ requirement นี้ที่สุด (สนับสนุน drupal แต่เขียน blog ใน wordpress ฮ่าๆๆๆ) ก็เลยว่าจะมาบันทึกเรื่อง drupal ไว้ก่อน ระหว่างที่จำได้อยู่แบบนี้</p>
<p>ไม่ได้ลงรูปเลยนะคะ ให้จินตนาการกันเอาเอง ฮ่าๆๆ</p>
<p>สามารถดาวน์โหลด drupal ได้จาก <a href="http://drupal.org/project/drupal" target="_blank">http://drupal.org/project/drupal</a> ซึ่งเวอร์ชั่นที่โหลดมาตอนนี้ เป็นเวอร์ชั่น 6.12 ถ้าดูขนาด จะเห็นว่า แค่ 1 mb กว่าๆ เอา ตัวเล็กมากๆ ไม่น่าเชื่อ<br />
หลังจากนั้น ก็ extract ไฟล์ ไปวางใน web directory (/var/www/html อะไรประมาณนี้) ทีนี้ ก็ลองเข้า <a href="http://hostname/drupal" target="_blank">http://hostname/drupal</a> (hostname ของคุณเองนะ)</p>
<p>ก็จะมีหน้า configuration มาให้เลือกภาษาที่จะลง พอ next ไป มันก็จะไป check environment ของเรา ว่ามีนั่นมีนี่ครบป่าว</p>
<p>- Copy the ./sites/default/default.</p>
<div id=":vb" class="ii gt">settings.php file to ./sites/default/settings.php.<br />
- Change file permissions so that it is writable by the web server. โดยใช้คำสั่ง chmod -R 777 &lt;directory name&gt;</p>
<p>ถ้าผ่าน ก็จะเข้าถึงหน้า database configuration ก่อนทำขั้นนี้ เราก็ไปสร้าง database ชื่อ drupal เอาไว้แล้ว<br />
จากนั้นก็ใส่ config ของ database ที่เราสร้างขึ้น</p>
<p>ก็ลองเข้าใช้งาน <a href="http://localhost/drupal" target="_blank">http://localhost/drupal</a></p>
<p>แค่นี้ก็เสร็จเรียบร้อยขั้นตอนการลง drupal แล้ว ง่ายมากๆ เลย</p></div>
<div class="ii gt"></div>
<div class="ii gt">แต่การใช้ drupal ให้เกิดประโยชน์ แค่ใช้ ตัว default ก็จะยังไม่มีประโยชน์เท่าไหร่ สิ่งดีเด่นของ drupal เลย คือ มี module เสริมให้ลงมากมาย เช่น การจัดการ view การทำ automated logout พวก gallery และ module ต่างๆ ที่เพิ่มการ customize ตัว drupal ดังนั้น ในตอนต่อๆไป จะเอา module และวิธีการทำให้เว็บไซต์มีความน่าสนใจ มาเขียนต่อค่ะ</div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=137&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2009/05/14/drupal-installation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>[blognone] ซอฟท์แวร์ก๊อปปี้ ดีจริงหรือ</title>
		<link>http://nattyait.wordpress.com/2008/11/21/intellectual-property/</link>
		<comments>http://nattyait.wordpress.com/2008/11/21/intellectual-property/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 08:03:16 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[Work experience]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=133</guid>
		<description><![CDATA[เพิ่งไปเขียนบทความไว้ที่ blognone ฝากด้วยค่ะ
ขณะที่กำลังเขียน blog นี้ บทความนั้นได้รับ comment ไป 186 comments และ view ไป 3822 ครั้ง ค่ะ ด้วยอายุบทความ 1 วันกับ 4 ชั่วโมง
http://www.blognone.com/node/9664
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=133&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>เพิ่งไปเขียนบทความไว้ที่ blognone ฝากด้วยค่ะ</p>
<p>ขณะที่กำลังเขียน blog นี้ บทความนั้นได้รับ comment ไป 186 comments และ view ไป 3822 ครั้ง ค่ะ ด้วยอายุบทความ 1 วันกับ 4 ชั่วโมง</p>
<p><a href="http://www.blognone.com/node/9664">http://www.blognone.com/node/9664</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/133/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=133&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/11/21/intellectual-property/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>[PHP] สิ่งหนึ่งที่ทำให้เกิด Call to a member function on a non-object</title>
		<link>http://nattyait.wordpress.com/2008/11/19/php-%e0%b8%aa%e0%b8%b4%e0%b9%88%e0%b8%87%e0%b8%ab%e0%b8%99%e0%b8%b6%e0%b9%88%e0%b8%87%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%97%e0%b8%b3%e0%b9%83%e0%b8%ab%e0%b9%89%e0%b9%80%e0%b8%81%e0%b8%b4%e0%b8%94-call/</link>
		<comments>http://nattyait.wordpress.com/2008/11/19/php-%e0%b8%aa%e0%b8%b4%e0%b9%88%e0%b8%87%e0%b8%ab%e0%b8%99%e0%b8%b6%e0%b9%88%e0%b8%87%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%97%e0%b8%b3%e0%b9%83%e0%b8%ab%e0%b9%89%e0%b9%80%e0%b8%81%e0%b8%b4%e0%b8%94-call/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 09:45:27 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=126</guid>
		<description><![CDATA[วันนี้ แก้ error โง่ๆ ไปพักหนึ่ง ด้วยความมึน ตอน run PHP แล้วเกิด คือ พยายามจะ new object แต่ว่าไม่สามารถจะ new ได้ และหลังจาก new ก็ไปใช้ method ของมัน ทำให้มันบอกว่า ใช้ function จากตัวที่ไม่เป็น object ไม่ได้ อย่างเช่น


$test = new AR(new Ds());

$test-&#62;getDS();

มันจะเรียก getDS(); ไม่ได้ เพราะ $test ยังเป็น null
มาเล่น PhotoHunt กัน ให้ดูว่า class ของ Ds ทำอะไร


var $dsStrategy;
public function _construct (iDSStrategy $dsStrategy){
$this-&#62;dsStrategy = $dsStrategy;
}
public  function getValForCreditFromCore(){
$this-&#62;dsStrategy-&#62;getValForCreditFromCore();
} [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=126&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>วันนี้ แก้ error โง่ๆ ไปพักหนึ่ง ด้วยความมึน ตอน run PHP แล้วเกิด คือ พยายามจะ new object แต่ว่าไม่สามารถจะ new ได้ และหลังจาก new ก็ไปใช้ method ของมัน ทำให้มันบอกว่า ใช้ function จากตัวที่ไม่เป็น object ไม่ได้ อย่างเช่น</p>
<pre class="brush: php;">

$test = new AR(new Ds());

$test-&gt;getDS();
</pre>
<p>มันจะเรียก getDS(); ไม่ได้ เพราะ $test ยังเป็น null</p>
<p>มาเล่น PhotoHunt กัน ให้ดูว่า class ของ Ds ทำอะไร</p>
<pre class="brush: php;">

var $dsStrategy;
public function _construct (iDSStrategy $dsStrategy){
$this-&gt;dsStrategy = $dsStrategy;
}
public  function getValForCreditFromCore(){
$this-&gt;dsStrategy-&gt;getValForCreditFromCore();
} </pre>
<p>นี่แหละ ทำให้เกิด Call to a member function on a non-object งงเลยใช่ไหมว่าทำไม</p>
<p>เหตุผลสำหรับ code นี้ เพราะที่ใส่ underscore หน้า constructor ไปอันเดียว &#8211; -&#8221;</p>
<p>ที่ถูกต้องเป็น</p>
<pre class="brush: php;">public function __construct (iDSStrategy $dsStrategy)</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=126&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/11/19/php-%e0%b8%aa%e0%b8%b4%e0%b9%88%e0%b8%87%e0%b8%ab%e0%b8%99%e0%b8%b6%e0%b9%88%e0%b8%87%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%97%e0%b8%b3%e0%b9%83%e0%b8%ab%e0%b9%89%e0%b9%80%e0%b8%81%e0%b8%b4%e0%b8%94-call/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>Protected: เมื่อเริ่มต้นชีวิตอาจารย์</title>
		<link>http://nattyait.wordpress.com/2008/10/26/first-day-teacher/</link>
		<comments>http://nattyait.wordpress.com/2008/10/26/first-day-teacher/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 03:48:07 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[Work experience]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=121</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=121&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><form action="http://nattyait.wordpress.com/wp-pass.php" method="post">
<p>This post is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-121">Password:<br />
<input name="post_password" id="pwbox-121" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Submit" /></p></form>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/121/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=121&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/10/26/first-day-teacher/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>[PHP] Simple Test</title>
		<link>http://nattyait.wordpress.com/2008/10/22/php-simple-test/</link>
		<comments>http://nattyait.wordpress.com/2008/10/22/php-simple-test/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 10:41:22 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=118</guid>
		<description><![CDATA[เนื่องจากมีคนเรียกร้องอยากใช้งาน SimpleTest ใน PHP ขึ้นมาอย่างกระทันหัน ไม่ได้ตั้งตัว ก็เลยเอามาวางให้ที่นี่นะคะ
ก่อนอื่น ไป ดาวน์โหลดมาก่อนนะคะ
เมื่อได้มาแล้ว ก็แตกไฟล์ แล้วเอา folder ชื่อ simpletest ก็เอาไปวางใน apache ของตัวเอง สำหรับเก๋ เก๋จะวางไว้นอกสุด ก็คือใน htdocs เลย ใครจะมาเรียกใช้เมื่อไหร่ก็ได้
เก๋จะให้ตัวอย่างสำหรับการทำ SimpleTest ของ blog ตอนหนึ่ง คือ [PHP] Class สำหรับ convert DBF to MySQL
โดยเก๋จะสร้าง folder ชื่อ unittest และมีไฟล์ชื่อ TestDBFMySQL.php อยู่ การทำหน้า test เราต้องใส่ require_once(&#8216;../../simpletest/autorun.php&#8217;); เพื่อ include ไปยัง lib ของ simpletest และก็ include ไฟล์ที่เราจะ test [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=118&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>เนื่องจากมีคนเรียกร้องอยากใช้งาน SimpleTest ใน PHP ขึ้นมาอย่างกระทันหัน ไม่ได้ตั้งตัว ก็เลยเอามาวางให้ที่นี่นะคะ</p>
<p>ก่อนอื่น ไป <a href="http://simpletest.org/en/download.html">ดาวน์โหลด</a>มาก่อนนะคะ</p>
<p>เมื่อได้มาแล้ว ก็แตกไฟล์ แล้วเอา folder ชื่อ simpletest ก็เอาไปวางใน apache ของตัวเอง สำหรับเก๋ เก๋จะวางไว้นอกสุด ก็คือใน htdocs เลย ใครจะมาเรียกใช้เมื่อไหร่ก็ได้</p>
<p>เก๋จะให้ตัวอย่างสำหรับการทำ SimpleTest ของ blog ตอนหนึ่ง คือ <a href="http://nattyait.wordpress.com/2008/09/22/php-class-dbfmysql/">[PHP] Class สำหรับ convert DBF to MySQL</a></p>
<p>โดยเก๋จะสร้าง folder ชื่อ unittest และมีไฟล์ชื่อ TestDBFMySQL.php อยู่ การทำหน้า test เราต้องใส่ require_once(&#8216;../../simpletest/autorun.php&#8217;); เพื่อ include ไปยัง lib ของ simpletest และก็ include ไฟล์ที่เราจะ test ด้วย ปกติจะ new เป็น test case และ test suite ใน class อื่นได้ แต่อันนี้ไม่ได้ new ไว้ไฟล์อื่น แบบว่าเรียกไฟล์นี้โดยตรงเลย</p>
<p>การ test ก็จะ assert ในหลายกรณี อันนี้ก็แล้วแต่เราว่าจะทำยังงัย อ่านได้<a href="http://simpletest.org/en/first_test_tutorial.html">ที่นี่</a></p>
<p>โดยหน้าตาของไฟล์ตัวอย่าง เป็นดังนี้</p>
<pre class="brush: php;">

&lt;?php
//DBFMySQL/unittest/TestDBFMySQL.php

require_once('../../simpletest/autorun.php');
require_once('../DBFMySQL.php');

class TestDBFMySQL extends UnitTestCase {
        //public $fromDBF='D:\PO_McDonald\INVORHD0.DBF';
        public static $fromDBF='D:\PO_McDonald\INVORHD0.DBF';
        public static $toMySQL='INVORHD0';
        public static $myDB='db_mcdonald';
        public static $myUser='root';
        public static $myPass='root';
        public static $myHost='localhost';

    function setUp() {

    }

    function tearDown() {
        //@unlink('/temp/test.log');
    }

    function testConvertDBFToMySQL(){
        $x = DBFMySQL::convertDBFToMySQL(self::$fromDBF, self::$toMySQL, self::$myDB, self::$myUser, self::$myPass, self::$myHost);
        $this-&gt;assertTrue($x);
    }
    function testReadDBFToArray(){
        $x = DBFMySQL::readDBFToArray(self::$fromDBF);
        $this-&gt;assertNotNull($x);
    }
    function testPersistToMySQL(){
        $arrTable = DBFMySQL::readDBFToArray(self::$fromDBF);
        $x = DBFMySQL::persistToMySQL($arrTable, self::$toMySQL, self::$myDB, self::$myUser, self::$myPass, self::$myHost);
        $this-&gt;assertTrue($x);
    }
}
?&gt;
</pre>
<p>ลองเข้าไปที่ http://localhost/DBFMySQL/unittest/TestDBFMySQL.php นะคะ (เครื่องเก๋นะคะ ยกตัวอย่างให้ดู)</p>
<p>หากว่า Test ผ่าน จะได้ผลดังนี้ค่ะ</p>
<p><a href="http://www.uppicth.com/show.php?filex=f5d56b431af3adad44a45affe177d058.png"><img src="http://www.uppicth.com/pics/f5d56b431af3adad44a45affe177d058.png" alt="Image hosting by UpPicth.com" /></a></p>
<p>ถ้า fail</p>
<p><a href="http://www.uppicth.com/show.php?filex=7ac2edf2e22d503b15e20017b25be03d.png"><img src="http://www.uppicth.com/pics/7ac2edf2e22d503b15e20017b25be03d.png" alt="Image hosting by UpPicth.com" /></a></p>
<p>ถ้า connect db ไม่ผ่าน<br />
<a href="http://www.uppicth.com/show.php?filex=0e21a434df77bf0c2d7d6131fbdbba79.png"><img src="http://www.uppicth.com/pics/0e21a434df77bf0c2d7d6131fbdbba79.png" alt="Image hosting by UpPicth.com" /></a></p>
<p>สงสัยก็ comment ถามมาได้ค่ะ จะตอบให้</p>
<p>ดาวน์โหลดตัวอย่าง code ได้<a href="http://www.uploadd.com/download.aspx?pku=3377AD325DHT3BWA2U32ARX9GTBH4G">ที่น</a>ี่ค่ะ ก่อนอื่นควรไปอ่าน <a href="http://nattyait.wordpress.com/2008/09/22/php-class-dbfmysql/">[PHP] Class สำหรับ convert DBF to MySQL</a> ด้วยนะคะ เผื่อรันไม่ผ่าน</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=118&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/10/22/php-simple-test/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>

		<media:content url="http://www.uppicth.com/pics/f5d56b431af3adad44a45affe177d058.png" medium="image">
			<media:title type="html">Image hosting by UpPicth.com</media:title>
		</media:content>

		<media:content url="http://www.uppicth.com/pics/7ac2edf2e22d503b15e20017b25be03d.png" medium="image">
			<media:title type="html">Image hosting by UpPicth.com</media:title>
		</media:content>

		<media:content url="http://www.uppicth.com/pics/0e21a434df77bf0c2d7d6131fbdbba79.png" medium="image">
			<media:title type="html">Image hosting by UpPicth.com</media:title>
		</media:content>
	</item>
		<item>
		<title>[Jasper] run Jasper Report from Java class</title>
		<link>http://nattyait.wordpress.com/2008/10/03/jasper-java-clas/</link>
		<comments>http://nattyait.wordpress.com/2008/10/03/jasper-java-clas/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 10:42:10 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[jasper]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=112</guid>
		<description><![CDATA[จริงๆ ก่อนหน้าจะเขียนเืรื่องนี้ ควรเขียนการ run Jasper Report from JSP ก่อนนะเนี่ย แต่ไม่เป็นไร เอาอันนี้ก่อน
ได้วิธีการมาจาก ที่นี่ แต่ต่างกันที่ code การติดต่อ database นิดหน่อย และเราจะทำมันใน eclipse ไม่ได้รันแบบที่เค้าทำ
ก่อนอื่นสร้าง eclipse project เป็น java project แล้วเอา lib ต่อไปนี้ไปใส่ไว้ใน build path ของ eclipse

common-collection
 common-logging
 iReport
 commons-javaflow
 jasperreports
 common-digester
 common-beanutils
mysql-java-connector

และสร้าง ReportDriver.java ขึ้นมา ดังนี้
import java.sql.*;

import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.JasperReport;

import java.io.OutputStream;

public class ReportDriver {
    /**
     * [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=112&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>จริงๆ ก่อนหน้าจะเขียนเืรื่องนี้ ควรเขียนการ run Jasper Report from JSP ก่อนนะเนี่ย แต่ไม่เป็นไร เอาอันนี้ก่อน</p>
<p>ได้วิธีการมาจาก <a href="http://www.cise.ufl.edu/~otopsaka/CIS4301/ReportDemo/ReportFromJava.html">ที่นี่</a> แต่ต่างกันที่ code การติดต่อ database นิดหน่อย และเราจะทำมันใน eclipse ไม่ได้รันแบบที่เค้าทำ</p>
<p>ก่อนอื่นสร้าง eclipse project เป็น java project แล้วเอา lib ต่อไปนี้ไปใส่ไว้ใน build path ของ eclipse</p>
<ul>
<li>common-collection</li>
<li> common-logging</li>
<li> iReport</li>
<li> commons-javaflow</li>
<li> jasperreports</li>
<li> common-digester</li>
<li> common-beanutils</li>
<li>mysql-java-connector</li>
</ul>
<p>และสร้าง ReportDriver.java ขึ้นมา ดังนี้</p>
<pre class="brush: java;">import java.sql.*;

import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.JasperReport;

import java.io.OutputStream;

public class ReportDriver {
    /**
     * Constructor for ReportDriver
     */
    public ReportDriver() {       
    }
    public static Connection connectDB(String databaseName, String userName, String password) {
        Connection jdbcConnection = null;
        try{
            Class.forName(&quot;com.mysql.jdbc.Driver&quot;).newInstance();
            String connectionURL = &quot;jdbc:mysql://127.0.0.1:3306/test?user=root;password=root&quot;;
            jdbcConnection = DriverManager.getConnection(connectionURL,userName,password);
        }catch(Exception ex) {
            String connectMsg = &quot;Could not connect to the database: &quot; + ex.getMessage() + &quot; &quot; + ex.getLocalizedMessage();
            System.out.println(connectMsg);
        }
        return jdbcConnection;
    }

    /**
     * Takes 4 parameters: databaseName, userName, password, reportFileLocation
     * and connects to the database and prepares and views the report.
     * @param databaseName holds database name,
     * @param userName holds user name
     * @param password holds password to connect the database,
     * @param reportFile holds the location of the Jasper Report file (.jrxml)
     */
    public static void runReport(String databaseName, String userName, String password,String reportFile) {
        try{
            JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            Connection jdbcConnection = connectDB(databaseName, userName, password);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jdbcConnection);
            JasperViewer.viewReport(jasperPrint);
        }catch(Exception ex) {
            String connectMsg = &quot;Could not create the report &quot; + ex.getMessage() + &quot; &quot; + ex.getLocalizedMessage();
            System.out.println(connectMsg);
        }
    }
    public static void main(String[] args) {
        //if (args.length == 4) {
            String databaseName = &quot;test&quot; ;
            String userName = &quot;root&quot;;
            String password = &quot;root&quot;;
            String reportFile = &quot;Reports/test2.jrxml&quot;;
            runReport(databaseName, userName, password, reportFile);
        /*}/lse{
            System.out.println(&quot;Usage:&quot;);
            System.out.println(&quot;java ReportDriver databaseName userName password reportFileLocation&quot;);
        }
        return;*/

    }
}</pre>
<p>ใน code จะไปเรียกไฟล์ test2.jrxml ที่สร้างโดย iReport ดังนั้นเราต้องไปสร้างไฟล์นี้ก่อน ให้ต่อไปยัง database ตัวเดียวกับที่เราใช้ใน code นี้ เมื่อรัน main method ขึ้นมา ก็จะได้ report ที่ถูก view โดย JRViewer</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/112/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=112&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/10/03/jasper-java-clas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>[Resin] JasperReport on resin</title>
		<link>http://nattyait.wordpress.com/2008/09/25/resin-jasperreport-on-resin/</link>
		<comments>http://nattyait.wordpress.com/2008/09/25/resin-jasperreport-on-resin/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 04:50:50 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[configuration]]></category>
		<category><![CDATA[resin]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=103</guid>
		<description><![CDATA[หากเราไม่มี jasperserver บน resin แล้วเราต้องการให้มันสามารถใช้งานกับ .jrxml และ compile ได้ เราจำเป็นจะต้องมี lib ดังต่อไปนี้ หากต้องการใช้ในทุก project ก็เอาไปวางไว้ที่ resin/lib
common-collection
common-logging
poi
iReport
commons-javaflow
itext
jasperreports
common-digester
common-beanutils
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
เกิดจากการไม่มี common-logging
javax.servlet.ServletException: net.sf.jasperreports.engine.JRException:java.lang.reflect.InvocationTargetException
สาเหตุหนึ่งอาจ เกิดจากการไม่มี common-collection
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=103&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>หากเราไม่มี jasperserver บน resin แล้วเราต้องการให้มันสามารถใช้งานกับ .jrxml และ compile ได้ เราจำเป็นจะต้องมี lib ดังต่อไปนี้ หากต้องการใช้ในทุก project ก็เอาไปวางไว้ที่ resin/lib</p>
<p>common-collection<br />
common-logging<br />
poi<br />
iReport<br />
commons-javaflow<br />
itext<br />
jasperreports<br />
common-digester<br />
common-beanutils</p>
<p><span class="entry-content">java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory</span><span class="entry-content"><br />
เกิดจากการไม่มี common-logging</span></p>
<p><span class="entry-content">javax.servlet.ServletException: net.sf.jasperreports.engine.JRException:java.lang.reflect.InvocationTargetExce</span>ption<br />
<span style="text-decoration:underline;"><strong>สาเหตุหนึ่งอาจ</strong></span> เกิดจากการไม่มี common-collection</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=103&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/09/25/resin-jasperreport-on-resin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
		<item>
		<title>[Resin] PHP in Java: Natty &amp; Juacompe discussion</title>
		<link>http://nattyait.wordpress.com/2008/09/24/resin-php-in-java-natty-juacompe-discussion/</link>
		<comments>http://nattyait.wordpress.com/2008/09/24/resin-php-in-java-natty-juacompe-discussion/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 13:25:07 +0000</pubDate>
		<dc:creator>natty</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://nattyait.wordpress.com/?p=97</guid>
		<description><![CDATA[เนื่องมาจาก natty ที่พอจะมีความรู้เรื่อง resin เท่าหางอึ่ง + PHP อยู่บ้าง บวกกับ juacompe ที่อัดแน่นไปด้วยความรู้เกี่ยวกับ server ที่ใช้ run java ทำให้วันนี้ก็เกิดความเข้าใจมากขึ้นกับ PHP in Java ใน resin
หากเราต้องการทำให้ java ของเราถูกเรียกโดย PHP ได้ ต้องทำให้ class นั้น extends AbstractQuercusModule และมี method ที่รับ parameter env ซึ่งเป็น quercus environment resources หรือไม่ก็ต้องสร้าง class ไว้แล้วให้มาสร้าง instant อยู่ใน class นี้
code ด้านล่างเป็นเป็น code ที่สร้าง method ขึ้นมาเพื่อให้ถูกเรียกจาก PHP ได้ ชื่อ method [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=97&subd=nattyait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>เนื่องมาจาก natty ที่พอจะมีความรู้เรื่อง resin เท่าหางอึ่ง + PHP อยู่บ้าง บวกกับ juacompe ที่อัดแน่นไปด้วยความรู้เกี่ยวกับ server ที่ใช้ run java ทำให้วันนี้ก็เกิดความเข้าใจมากขึ้นกับ PHP in Java ใน resin</p>
<p>หากเราต้องการทำให้ java ของเราถูกเรียกโดย PHP ได้ ต้องทำให้ class นั้น extends AbstractQuercusModule และมี method ที่รับ parameter env ซึ่งเป็น quercus environment resources หรือไม่ก็ต้องสร้าง class ไว้แล้วให้มาสร้าง instant อยู่ใน class นี้</p>
<p>code ด้านล่างเป็นเป็น code ที่สร้าง method ขึ้นมาเพื่อให้ถูกเรียกจาก PHP ได้ ชื่อ method ว่า hello_test โดยจะเห็นว่ามันจะรับตัวแปร env ด้วย โดย class นี้อยู่ใน package example</p>
<pre class="brush: java;"> package example;

import com.caucho.quercus.env.Env;
import com.caucho.quercus.module.AbstractQuercusModule;

public class HelloModule extends AbstractQuercusModule {
   /*
   ** Notice the careful use of the naming
   ** convention hello_test.  This is done
   ** in order to prevent name collisions
   ** among different libraries.
   **
   ** @param env provides access to Quercus environment resources
   ** @param name
   */
   public String hello_test(Env env, String name)
   {
     env.println(&quot;inside HelloModule  hello_test()&quot;);
     return &quot;Hello, &quot; + name;
   }
} </pre>
<p>สิ่งที่สำคัญคือ ต้องสร้างไฟล์ชื่อ com.caucho.quercus.QuercusModule ไว้ที่ classes/META-INF/services โดยใส่ชื่อ package.class เอาไว้</p>
<pre class="brush: java;"> example.HelloModule </pre>
<p>ตอนหน้าค่อยต่ออีก&#8230;.นี่เป็นเพียง study ยังไม่ได้ทดสอบเลยว่าทำต่างจากนี้แล้วจะพังป่าว</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nattyait.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nattyait.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nattyait.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nattyait.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nattyait.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nattyait.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nattyait.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nattyait.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nattyait.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nattyait.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nattyait.wordpress.com&blog=4817581&post=97&subd=nattyait&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://nattyait.wordpress.com/2008/09/24/resin-php-in-java-natty-juacompe-discussion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">natty</media:title>
		</media:content>
	</item>
	</channel>
</rss>