<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>@dder's Blog</title>
	<atom:link href="http://adder.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://adder.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Thu, 20 Oct 2011 09:13:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='adder.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>@dder's Blog</title>
		<link>http://adder.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://adder.wordpress.com/osd.xml" title="@dder&#039;s Blog" />
	<atom:link rel='hub' href='http://adder.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Sockets Direct Protocol (SDP)</title>
		<link>http://adder.wordpress.com/2011/10/20/sockets-direct-protocol-sdp/</link>
		<comments>http://adder.wordpress.com/2011/10/20/sockets-direct-protocol-sdp/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 09:13:32 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/?p=28</guid>
		<description><![CDATA[Sockets Direct Protocol (SDP) วันก่อนได้มีโอกาสไปอ่านเรื่อง SDP ซึ่งเป็นหนึ่งใน new feature ของ jdk7 รู้สึกว่าน่าสนใจมากกก เนื่องจาก server ของ office เองถ้าไม่นับ mssql แล้วก็แทบจะเป็น solaris ทั้งหมด หึหึ ความันส์จะบังเกิดก็คราวนี้แหละ เอาละไม่พูดมาเรามาเข้าเรื่องกันเลย เอาแบบง่ายๆละกัน SDP ก็คือ protocol ใหม่(ของผม แต่เก่าแล้วสำหรับชาวโลก) ซึ่งพัฒนามาตั้งนานนนนแล้วโดย InfiniBand Trade Association หรือ InfiniBand (IB) ซึ่งแก้งนี้มีประสบการณ์ในการ develop &#8216;High Performance Computing System&#8217; อยู่แล้ว ซึ่งหนึ่งใน feature ที่มีใช้กันเยอะก็คือ Remote Direct Memory Access (RDMA) &#8211; จริงๆแล้วผมเคยเห็น feature นี้ใน IBM [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=28&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Sockets Direct Protocol (SDP)</h1>
<p>วันก่อนได้มีโอกาสไปอ่านเรื่อง SDP ซึ่งเป็นหนึ่งใน new feature ของ jdk7 รู้สึกว่าน่าสนใจมากกก เนื่องจาก server ของ office เองถ้าไม่นับ mssql แล้วก็แทบจะเป็น solaris ทั้งหมด หึหึ ความันส์จะบังเกิดก็คราวนี้แหละ เอาละไม่พูดมาเรามาเข้าเรื่องกันเลย</p>
<p>เอาแบบง่ายๆละกัน SDP ก็คือ protocol ใหม่(ของผม แต่เก่าแล้วสำหรับชาวโลก) ซึ่งพัฒนามาตั้งนานนนนแล้วโดย <a href="http://www.infinibandta.org/">InfiniBand Trade Association</a> หรือ InfiniBand (IB) ซึ่งแก้งนี้มีประสบการณ์ในการ develop &#8216;High Performance Computing System&#8217; อยู่แล้ว ซึ่งหนึ่งใน feature ที่มีใช้กันเยอะก็คือ Remote Direct Memory Access (RDMA) &#8211; จริงๆแล้วผมเคยเห็น feature นี้ใน IBM blade server ที่ vendor เอามานำเสนอ ตอนนั้นผมยังคิดอยู่เลยว่ามันทำได้ขนาดนั้นเลยเหรอ ถึงขั้น cpu ไป access memory ของอีกเครื่องได้ บระเจ้าาาา เทพชัดๆ- จากประสบการณ์ของทีมนี้เราคงเชื่อใจฝรั่งแก้งนี้ได้ในระดับหนึ่งว่ามันไม่ได้โม้</p>
<p>เรื่องการทำงานของ SDP ก็มีหลักการง่ายๆคือ พยายาม bypass TCP mechanism ไปแล้วไปใช้ SDP แทน ซึ่งเขาว่ากันว่ามันจะลด overhead ต่างๆลงอย่างไม่น่าเชื่อ จริงเหรอวะ ยังคงเป็นคำถามในใจ&#8230;. ตอนนี้กำลัง print case study ไปอ่าน ใครสนใจก็ นี่เลย : <a href="http://www.mellanox.com/content/pages.php?pg=white_papers">http://www.mellanox.com/content/pages.php?pg=white_papers</a> อาจจะไม่ตรงซะทีเดียวแต่ก็เอามาดูว่าแก้งนี้มันทำอะไรสำเร็จไปแล้วมั่ง แล้วเกี่ยวกับ SDP ป่าว</p>
<p>การ implement นั้น สิ่งที่จะต้องทำมีขั้นตอนง่ายๆต่อไปนี้</p>
<ol>
<li>เตรียม SDP Configuration file ซึ่งก็ไม่ยากหาได้จาก toturial ทั้วไป เช่น <a href="http://download.oracle.com/javase/tutorial/sdp/sockets/file.html">http://download.oracle.com/javase/tutorial/sdp/sockets/file.html</a></li>
<li>enable SDP ซึ่งเป็น system property ตอน run ก็เพิ่มเข้าไปง่ายมากๆ</li>
</ol>
<p>*อย่าลืมดูเรื่อง IPv4, IPv6 ด้วยนะครับ มันมี issue ที่จำเป็นต้องทราบก่อนการใช้งาน แนะนำว่าให้ใช้ IPv6 แล้ว end-point ใหนที่ใช้ IPv4 ก็แค่เพิ่ม prefix เข้าไป</p>
<p>ส่วนเรื่องการ implement ในมุมของ programmer ถ้าคุณใช้ class ตามด้านล่างอยู่แล้ว ก็ไม่จำเป็นต้องทำอะไรเพิ่มเติมครับ ใช้ได้เลย แต่ถ้าใช้ 3rd Party อื่นๆก็ต้อง check based lib อีกที ^^</p>
<blockquote>
<pre>java.net package:
	Socket
	ServerSocket
java.nio.channels package:
	SocketChannel
	ServerSocketChannel
	AsynchronousSocketChannel
	AsynchronousServerSocketChannel</pre>
</blockquote>
<pre>ขอให้มีความสุขกับ performance ที่เพิ่มขึ้นนะครับ</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=28&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2011/10/20/sockets-direct-protocol-sdp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>
	</item>
		<item>
		<title>Log4J DailyFileAppender</title>
		<link>http://adder.wordpress.com/2009/12/25/log4j-dailyfileappender/</link>
		<comments>http://adder.wordpress.com/2009/12/25/log4j-dailyfileappender/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 08:52:52 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/?p=21</guid>
		<description><![CDATA[วันนี้ว่างโคตรๆ ไม่มีไรทำ จิตใจไม่ค่อยอยากจะทำงานแระ อยากหยุดอย่างเดียว 555+ จริงๆเย็นนี้จะไปดู avata 3d แหละรอมาสัปดานึงแระให้คนซาๆก่อน ระหว่างนี้หาไรทำดีกว่า จริงๆว่าจะเล่านานแล้วแต่ไม่ว่างซะที วันนี้โอกาสดีเลยจัดไป กาลครั้งนึ่งนานมาแล้ว ผมต้องไปแก้ application เก่าๆของ office ซึ่ง application ตัวนี้มีการเขียน log แบบ daily จริงๆแล้วสิ่งที่เขาต้องการให้แก้ผมจัดการเสร็จแระ แต่ระหว่างนั้นใด้เหลือบไปเห็นสิ่งนึ่ง&#8230;.. นั่นก็คือ ทำไมมันเขียน log เอง???? ไมไม่ใช้ log4j วะ!!! (ฮึมๆๆๆๆๆ ขัดใจวัยรุ่น) เลยว่าจะจัดการเปลี่ยนซะหน่อย ตอนแรกคิดว่า ไม่น่าจะมีปัยหาอะไรนะ ใช้ DailyFileAppender ก็น่าจะจบ ลั้นลา แต่พออ่านไปอ่านมา อ้าวเย็ดเป็ด!!! มันไม่มีแบบที่เขียนวันที่ today ลงไปใน log file เลยนี่หว่า มีแต่ rolling file แล้วค่อยเติมวันที่!!!!! ในใจก็เลยอ๋อทันที มิน่าละ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=21&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="color:#0000ff;">วันนี้ว่างโคตรๆ ไม่มีไรทำ จิตใจไม่ค่อยอยากจะทำงานแระ อยากหยุดอย่างเดียว 555+ จริงๆเย็นนี้จะไปดู avata 3d แหละรอมาสัปดานึงแระให้คนซาๆก่อน ระหว่างนี้หาไรทำดีกว่า จริงๆว่าจะเล่านานแล้วแต่ไม่ว่างซะที วันนี้โอกาสดีเลยจัดไป<br />
</span></p>
<p><span id="more-21"></span></p>
<p><span style="color:#ff00ff;">กาลครั้งนึ่งนานมาแล้ว ผมต้องไปแก้ application เก่าๆของ office ซึ่ง application ตัวนี้มีการเขียน log แบบ daily จริงๆแล้วสิ่งที่เขาต้องการให้แก้ผมจัดการเสร็จแระ แต่ระหว่างนั้นใด้เหลือบไปเห็นสิ่งนึ่ง&#8230;..</span></p>
<p><span style="color:#ff00ff;">นั่นก็คือ ทำไมมันเขียน log เอง???? ไมไม่ใช้ log4j วะ!!! (ฮึมๆๆๆๆๆ ขัดใจวัยรุ่น) เลยว่าจะจัดการเปลี่ยนซะหน่อย</span></p>
<p><span style="color:#ff00ff;">ตอนแรกคิดว่า ไม่น่าจะมีปัยหาอะไรนะ ใช้ <a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html" target="_blank">DailyFileAppender</a> ก็น่าจะจบ ลั้นลา</span></p>
<p><span style="color:#ff00ff;">แต่พออ่านไปอ่านมา อ้าวเย็ดเป็ด!!! </span></p>
<p><span style="color:#ff00ff;">มันไม่มีแบบที่เขียนวันที่ today ลงไปใน log file เลยนี่หว่า มีแต่ rolling file แล้วค่อยเติมวันที่!!!!!</span></p>
<p><span style="color:#ff00ff;">ในใจก็เลยอ๋อทันที มิน่าละ คนก่อนมันถึงไม่ใช้ log4j เพราะมันไม่มีนี่เอง  T T<br />
</span></p>
<p><span style="color:#ff00ff;">เอาไงดีกว่ากรู ทำต่อหรือว่าใช้แบบเดิมวะ&#8230;&#8230;</span></p>
<p><span style="color:#ff00ff;"><br />
</span></p>
<p><span style="color:#ff00ff;">เอาวะคนอย่างเราสู้ไม่ถอย เดินหน้าลูกเดียว</span></p>
<p><span style="color:#ff00ff;">สรุปคือ ต้องทำ appender เอง &#8211; -&#8221;</span></p>
<p><!--more--><span style="color:#008000;">Requirement</span></p>
<p><span style="color:#008000;">1. Write output เป็น text file</span></p>
<p><span style="color:#008000;">2. Rolling ทุกวัน</span></p>
<p><span style="color:#008000;">3. ชือ file ต้องมีวันที่ yyyyMMdd แม้แต่วันที่กำลังเขียน</span></p>
<p><!--more--></p>
<p><strong><span style="color:#0000ff;">สิ่งที่ต้องทำมีดังนี้</span></strong></p>
<p><span style="color:#0000ff;">1. เขียน java class ที่ extend org.apache.log4j.FileAppender</span></p>
<p><span style="color:#0000ff;">2. สร้าง getter/setting ของ property ที่เราต้องการเช่น </span></p>
<blockquote><p>public void setDirectory(String directory) {<br />
m_directory = directory;<br />
}</p>
<p>public String getDirectory() {<br />
return m_directory;<br />
}</p>
<p>ซึ่งจะ match กับ configuration ตัวนี้</p>
<p>log4j.appender.USSD105Tx.Directory=/usr/home/WEBADM/gwsmsl/log/USSDLog/USSD105</p></blockquote>
<p><span style="color:#0000ff;">3.Override method &#8220;public void activateOptions()&#8221; เพื่อเป็นการ initial variable ต่างๆ</span></p>
<blockquote><p>public void activateOptions() {<br />
if ((m_directory == null) || (m_directory.length() == 0)) {<br />
m_directory = &#8220;.&#8221;;<br />
}<br />
}</p></blockquote>
<p><span style="color:#0000ff;">4.จุด climax อยู่นี่ครับ การ override method &#8220;public void append(LoggingEvent event) &#8221; ซึ่งจะใช้ตอนเขียน output file จริงๆ ตัว</span></p>
<blockquote><p>public void append(LoggingEvent event) {</p>
<p>subAppend(event);</p>
<p>}</p></blockquote>
<p><span style="color:#ff00ff;">จบแล้วครับ ตัวอย่าง full code อยู่ด้านล่างครับ หากสงสัยอะไรว่างๆมาพูดคุยกันใด้ครับ แค่นี้ก่อนขี้เกียจแระ</span></p>
<p><!--more-->import java.io.File;<br />
import java.text.DateFormat;<br />
import java.text.SimpleDateFormat;<br />
import java.util.Calendar;<br />
import java.util.Date;<br />
import java.util.Locale;</p>
<p>import org.apache.log4j.FileAppender;<br />
import org.apache.log4j.spi.LoggingEvent;</p>
<p>/*<br />
log4j.logger.USSD105Tx=debug, USSD105Tx<br />
log4j.appender.USSD105Tx=th.co.tac.log4j.DailyFileAppender<br />
log4j.appender.USSD105Tx.Prefix=USSD105_<br />
log4j.appender.USSD105Tx.Suffix=.txt<br />
log4j.appender.USSD105Tx.Directory=/usr/home/WEBADM/gwsmsl/log/USSDLog/USSD105<br />
log4j.appender.USSD105Tx.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.USSD105Tx.layout.ConversionPattern=%d%m%n<br />
*/</p>
<p>public class DailyFileAppender extends FileAppender {<br />
public static final DateFormat YYYYMMDD_DF = new SimpleDateFormat(&#8220;yyyyMMdd&#8221;, Locale.US);</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Instance Variables<br />
/**<br />
* The directory in which log files are created.<br />
* Wihtout a leading slash, this is relative to the Tomcat home directory.<br />
*/<br />
private String m_directory = null;</p>
<p>/**<br />
* The prefix that is added to log file filenames.<br />
*/<br />
private String m_prefix = null;</p>
<p>/**<br />
* The suffix that is added to log file filenames.<br />
*/<br />
private String m_suffix = null;</p>
<p>/**<br />
* The File representation of the directory in which log files are created.<br />
*/<br />
private File m_path = null;</p>
<p>/**<br />
* A calendar object for manipulating dates and times.<br />
*/<br />
private Calendar m_calendar = null;</p>
<p>/**<br />
* The number of milliseconds since 1/1/1970 when tomorrow starts (local time).<br />
*/<br />
private long m_tomorrow = 0L;</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Constructors<br />
public DailyFileAppender(){<br />
super();<br />
}</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- Properties</p>
<p>/**<br />
* Return the directory in which we create log files.<br />
*/<br />
public String getDirectory() {<br />
return m_directory;<br />
}</p>
<p>/**<br />
* Set the directory in which we create log files.<br />
*<br />
* @param directory The new log file directory<br />
*/<br />
public void setDirectory(String directory) {<br />
m_directory = directory;<br />
}</p>
<p>/**<br />
* Return the log file prefix.<br />
*/<br />
public String getPrefix() {<br />
return m_prefix;<br />
}</p>
<p>/**<br />
* Set the log file prefix.<br />
*<br />
* @param prefix The new log file prefix<br />
*/<br />
public void setPrefix(String prefix) {<br />
m_prefix = prefix;<br />
}</p>
<p>/**<br />
* Return the log file suffix.<br />
*/<br />
public String getSuffix() {<br />
return m_suffix;<br />
}</p>
<p>/**<br />
* Set the log file suffix.<br />
*<br />
* @param suffix The new log file suffix<br />
*/<br />
public void setSuffix(String suffix) {<br />
m_suffix = suffix;<br />
}</p>
<p>/** Creates a new &lt;code&gt;DatedFileAppender&lt;/code&gt;<br />
with the specified characteristics.</p>
<p>@param directory the directory in which log files are created.<br />
@param prefix the prefix that is added to log file filenames.<br />
@param suffix the suffix that is added to log file filenames.<br />
*/<br />
public DailyFileAppender(String directory, String prefix, String suffix) {<br />
m_directory = directory;<br />
m_prefix = prefix;<br />
m_suffix = suffix;<br />
activateOptions();<br />
}</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Public Methods</p>
<p>/**<br />
Called once all options have been set on this Appender.<br />
Calls the underlying FileLogger&#8217;s start() method.<br />
*/<br />
public void activateOptions() {<br />
if (m_prefix == null) {<br />
m_prefix = &#8220;&#8221;;<br />
}<br />
if (m_suffix == null) {<br />
m_suffix = &#8220;&#8221;;<br />
}<br />
if ((m_directory == null) || (m_directory.length() == 0)) {<br />
m_directory = &#8220;.&#8221;;<br />
}<br />
m_path = new File(m_directory);<br />
m_path.mkdirs();<br />
if (m_path.canWrite()) {<br />
m_calendar = Calendar.getInstance();        // initialized<br />
}<br />
}</p>
<p>/**<br />
Called by AppenderSkeleton.doAppend() to write a log message formatted<br />
according to the layout defined for this appender.<br />
*/<br />
public void append(LoggingEvent event) {<br />
if(this.layout == null) {<br />
errorHandler.error(&#8220;No layout set for the appender named ["+ name+"].&#8221;);<br />
return;<br />
}<br />
if (this.m_calendar == null) {<br />
errorHandler.error(&#8220;Improper initialization for the appender named ["+ name+"].&#8221;);<br />
return;<br />
}<br />
long n = System.currentTimeMillis();<br />
if (n &gt;= m_tomorrow) {<br />
// Next line only works with newer (1.4 or so) versions of Java (method is protected in older versions)<br />
//m_calendar.setTimeInMillis(n);        // set Calendar to current time<br />
m_calendar.setTime(new Date(n));        // set Calendar to current time<br />
String datestamp = datestamp(m_calendar);    // convert to string &#8220;yyyy-mm-dd&#8221;<br />
tomorrow(m_calendar);            // set the Calendar to the start of tomorrow<br />
// Next line only works with newer (1.4 or so) versions of Java (method is protected in older versions)<br />
//m_tomorrow = m_calendar.getTimeInMillis();    // time in milliseconds when tomorrow starts<br />
m_tomorrow = m_calendar.getTime().getTime();    // time in milliseconds when tomorrow starts<br />
File newFile = new File(m_path, m_prefix + datestamp + m_suffix);<br />
this.fileName = newFile.getAbsolutePath();<br />
super.activateOptions();            // close current file and open new file<br />
}<br />
if(this.qw == null) {                // should never happen<br />
errorHandler.error(&#8220;No output stream or file set for the appender named ["+name+"].&#8221;);<br />
return;<br />
}<br />
subAppend(event);<br />
}</p>
<p>/**<br />
* Formats a datestamp as yyyy-mm-dd using a Calendar source object.<br />
*<br />
* @param calendar a Calendar containing the date to format.<br />
*<br />
* @return a String in the form &#8220;yyyy-yy-dd&#8221;.<br />
*/<br />
public static String datestamp(Calendar calendar) {<br />
return YYYYMMDD_DF.format(calendar.getTime());<br />
}</p>
<p>/**<br />
* Sets a calendar to the start of tomorrow,<br />
* with all time values reset to zero.<br />
*<br />
* &lt;p&gt;Takes advantage of the fact that the Java Calendar implementations<br />
* are mercifully accommodating in handling non-existent dates. For example,<br />
* June 31 is understood to mean July 1. This allows you to simply add one<br />
* to today&#8217;s day of the month to generate tomorrow&#8217;s date. It also works<br />
* for years, so that December 32, 2004 is converted into January 1, 2005.&lt;/p&gt;<br />
*/<br />
public static void tomorrow(Calendar calendar) {<br />
int year = calendar.get(Calendar.YEAR);<br />
int month = calendar.get(Calendar.MONTH);<br />
int day = calendar.get(Calendar.DAY_OF_MONTH) + 1;<br />
calendar.clear();            // clear all fields<br />
calendar.set(year, month, day);        // set tomorrow&#8217;s date<br />
}<br />
}</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=21&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2009/12/25/log4j-dailyfileappender/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>
	</item>
		<item>
		<title>EHCACHE</title>
		<link>http://adder.wordpress.com/2009/04/21/ehcache/</link>
		<comments>http://adder.wordpress.com/2009/04/21/ehcache/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 14:08:44 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/?p=19</guid>
		<description><![CDATA[หลังจากไม่ใด้เขียนอะไรซะนาน นึกขึ้นได้มาแวะ blog เรามั่งดีกว่า ว่าแต่จะเขียนเรื่องอะไรดีละ&#8230;. นึกออกแล้วเอา EHCACHE นี่แหละล่าสุดที่อ่านมา เนื่องจากว่าต้องสร้าง framework ใหม่ให้ office แล้วเขาเปลี่ยน weblogic8.1 เป็น weblogic 10 แล้วไงละ? lib weblogic portal (weblogic8) มันก็ใช้ไม่ใด้อะจิ!!! อ้าวซวยแล้ว #%$%^$$^ งั้นเปลี่ยนใหม่ก้ได้ ก็เลยมาตามหาๆๆๆๆๆ และแล้วบุพเพสันนิวาสก็พาเรามาเจอกับ EHCACHE แล่วมัน work ป่าว? ก่อนอื่นมาดูเรื่อง performance ซะก่อนเพราะถ้ารับ load ประมาณ 200000 tx/hr. ไม่ใหวมันก็ตายยย และแล้วก็ไปเจอ ehcache performance อ่านดูแล้วมันก็น่าจะไหวนะ จากนั้นก็มาดู architecture มันก่อน เอาคร่าวๆพอ อย่างน้อยๆให้รูแภาพรวม ว่าเราอยู่ตรงใหนของโลก  จากนั้นมาลอง implement กันว่ายากป่าว เพราะถ้ายากก้ไม่เอา (simple [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=19&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>หลังจากไม่ใด้เขียนอะไรซะนาน นึกขึ้นได้มาแวะ blog เรามั่งดีกว่า</p>
<p>ว่าแต่จะเขียนเรื่องอะไรดีละ&#8230;.</p>
<p>นึกออกแล้วเอา <a href="http://ehcache.sourceforge.net" target="_blank">EHCACHE</a> นี่แหละล่าสุดที่อ่านมา</p>
<p>เนื่องจากว่าต้องสร้าง framework ใหม่ให้ office แล้วเขาเปลี่ยน weblogic8.1 เป็น weblogic 10 แล้วไงละ?</p>
<p>lib weblogic portal (weblogic8) มันก็ใช้ไม่ใด้อะจิ!!! อ้าวซวยแล้ว #%$%^$$^</p>
<p>งั้นเปลี่ยนใหม่ก้ได้ ก็เลยมาตามหาๆๆๆๆๆ และแล้วบุพเพสันนิวาสก็พาเรามาเจอกับ EHCACHE แล่วมัน work ป่าว?</p>
<p>ก่อนอื่นมาดูเรื่อง performance ซะก่อนเพราะถ้ารับ load ประมาณ 200000 tx/hr. ไม่ใหวมันก็ตายยย และแล้วก็ไปเจอ <a href="http://jakarta.apache.org/jcs/JCSvsEHCache.html" target="_blank">ehcache performance</a> อ่านดูแล้วมันก็น่าจะไหวนะ</p>
<p>จากนั้นก็มาดู architecture มันก่อน เอาคร่าวๆพอ อย่างน้อยๆให้รูแภาพรวม ว่าเราอยู่ตรงใหนของโลก <img class="aligncenter" title="EHCACHE Architecture" src="http://ehcache.sourceforge.net/images/layered_architecture.png" alt="" width="772" height="309" /></p>
<p>จากนั้นมาลอง implement กันว่ายากป่าว เพราะถ้ายากก้ไม่เอา (simple is the best)</p>
<p>ดูๆแล้วไม่ยากแฮะ น่าจะหมูในอวย มาดูตัวอย่าง code กัน ง่ายสุดๆ ถ้าสงสัยอะไรก้ไปที่ <a href="http://ehcache.sourceforge.net/" target="_blank">official site</a></p>
<p>CacheManager cacheMgr = new CacheManager();<br />
Cache memoryOnlyCache = new Cache(cacheName, 100000, false, false, 5000, 1000);<br />
cacheMgr.addCache(memoryOnlyCache);</p>
<p>Element usrChk = new Element(&#8220;key&#8221;, &#8220;value&#8221;);<br />
memoryOnlyCache.put(usrChk);<br />
usrChk = memoryOnlyCache.get(&#8220;key&#8221;);</p>
<p>cacheMgr.shutdown();</p>
<p>จบแล้วครับ สงสัยอะไรหลังไมค์ได้คับ</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=19&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2009/04/21/ehcache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>

		<media:content url="http://ehcache.sourceforge.net/images/layered_architecture.png" medium="image">
			<media:title type="html">EHCACHE Architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>JOSSO</title>
		<link>http://adder.wordpress.com/2008/05/01/josso/</link>
		<comments>http://adder.wordpress.com/2008/05/01/josso/#comments</comments>
		<pubDate>Thu, 01 May 2008 06:34:03 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/?p=17</guid>
		<description><![CDATA[วันนี้ว่างๆระหว่างรอเพื่อนโทรมาชวนไปดูหนังเลยหาไรทำซะหน่อย ไม่รู้จะทำไรดี นี่เลยละกัน JOSSO บุ๊กมาร์คไว้นานแล้วไม่มีโอกาสได้เข้ามาอ่านซะที จริงๆแล้วผมสนใจเรื่องนี้มานานแล้วครับแต่ไม่ค่อยได้มีเวลามาจับซะทีมัวแต่ทำอย่างอื่นอยู่ ทีแรกบ้าพลังจะพยายาม implement เอง แต่เลิกแล้วใช้ของฝรั่งดีกว่า ดีกว่าเยอะ(คิดว่านะ) ก็เลยมาตกลงปลงใจกับอันนี้นี่แหละ JOSSO (http://www.josso.org/) หลังจากนั่งอ่านไปซักพัก เอ&#8230; เหมือนจะดีเลยแฮะ น่าสนใจสุดๆ tomcat/weblogic/jboss/etc. มัน deploy ได้หมดเลยอะแจ๋วจริงๆ เอาละมาเริ่ม workshop กันซะที จากรูปนะครับเอาเป็นว่าผมไม่เข้าวิชาการมากละกันเอาง่ายๆ กันเลย ตัว SSO นี่แบ่งออกเป็น 2 ส่วนหลักๆก็คือ 1. Gateway คือ ตัวที่ทำหน้าที่ user authentication ที่จะเข้ามา พูดง่ายๆก็คือหน้า login นั่นแหละ 2. Agent คือ web ทีจะเข้ามาใช้งานระบบ user authentication ร่วมกับ web อื่นๆ ใน gateway ตามข้อ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=17&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>วันนี้ว่างๆระหว่างรอเพื่อนโทรมาชวนไปดูหนังเลยหาไรทำซะหน่อย ไม่รู้จะทำไรดี นี่เลยละกัน JOSSO บุ๊กมาร์คไว้นานแล้วไม่มีโอกาสได้เข้ามาอ่านซะที</p>
<p>จริงๆแล้วผมสนใจเรื่องนี้มานานแล้วครับแต่ไม่ค่อยได้มีเวลามาจับซะทีมัวแต่ทำอย่างอื่นอยู่ ทีแรกบ้าพลังจะพยายาม implement เอง แต่เลิกแล้วใช้ของฝรั่งดีกว่า ดีกว่าเยอะ(คิดว่านะ) ก็เลยมาตกลงปลงใจกับอันนี้นี่แหละ JOSSO (http://www.josso.org/)</p>
<p>หลังจากนั่งอ่านไปซักพัก เอ&#8230; เหมือนจะดีเลยแฮะ น่าสนใจสุดๆ tomcat/weblogic/jboss/etc. มัน deploy ได้หมดเลยอะแจ๋วจริงๆ เอาละมาเริ่ม workshop กันซะที</p>
<p><img src="http://www.josso.org/confluence/download/attachments/2949140/Architecture%20Overview.jpg" alt="JOSSO Architecture" width="601" height="537" /></p>
<p>จากรูปนะครับเอาเป็นว่าผมไม่เข้าวิชาการมากละกันเอาง่ายๆ กันเลย ตัว SSO นี่แบ่งออกเป็น 2 ส่วนหลักๆก็คือ</p>
<p>1. Gateway คือ ตัวที่ทำหน้าที่ user authentication ที่จะเข้ามา พูดง่ายๆก็คือหน้า login นั่นแหละ</p>
<p>2. Agent คือ web ทีจะเข้ามาใช้งานระบบ user authentication ร่วมกับ web อื่นๆ ใน gateway ตามข้อ 1</p>
<p>เห็นมะมีแค่ 2 ส่วนเองง่ายโคตรๆ จริงๆแล้ว installation manual ใน web (http://www.josso.org/confluence/display/JOSSO1/Tomcat+6.0) ก้มีพอสมควรแต่ต้องอ่านหน่อย สำหรับท่านที่จะอ่านข้ามๆมั่วๆไป มีโอกาสไม่ success นะครับ เอาละ setup ตามผมเลยก้ได้ step by step ลืมบอกไปผมใช้ Tomcat6.0 นะครับ jdk6 ผมสมุติว่าท่านทำ jsp/setup tomcat เป็นแล้วนะครับ</p>
<p><span style="color:#0000ff;"><strong>Setup Gateway</strong></span></p>
<p>1. ที่ %CATALINA_HOME%/bin สร้าง file ดังต่อไปนี้</p>
<p>file:setenv.bat<br />
<span style="color:#ff00ff;">set CATALINA_HOME=C:/apache-tomcat-6.0.16<br />
set JAVA_OPTS=-Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.conf</span></p>
<p>file:jsso-config.xml<br />
<span style="color:#ff00ff;">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243; ?&gt;&lt;configuration&gt;&lt;hierarchicalXml fileName=&#8221;josso-gateway-config.xml&#8221;/&gt;&lt;/configuration&gt;</span></p>
<p>2. Copy file josso-gateway-config.xml จาก josso\core\src\resources ที่ unzip ออกมา เอามาวางไว้ที่ %CATALINA_HOME%/bin<br />
<img src="/DOCUME~1/Adison/LOCALS~1/Temp/moz-screenshot.jpg" alt="" /><img src="/DOCUME~1/Adison/LOCALS~1/Temp/moz-screenshot-1.jpg" alt="" /></p>
<p>3. ที่ %CATALINA_HOME%/conf/ สร้าง file jaas.conf โดยมี file content ดังนี้<br />
<span style="color:#ff00ff;">josso {<br />
org.josso.tc60.agent.jaas.SSOGatewayLoginModule required debug=true;<br />
};</span></p>
<p>4. แก้ไข file server.xml ของ tomcat โดยให้เพิ่ม<br />
<span style="color:#ff00ff;"> &lt;Realm className=&#8221;org.josso.tc60.agent.jaas.CatalinaJAASRealm&#8221;<br />
appName=&#8221;josso&#8221;<br />
userClassNames=&#8221;org.josso.gateway.identity.service.BaseUserImpl&#8221;<br />
roleClassNames=&#8221;org.josso.gateway.identity.service.BaseRoleImpl&#8221;<br />
debug=&#8221;1&#8243; /&gt;</span></p>
<p>&lt;Valve className=&#8221;org.josso.tc60.agent.SSOAgentValve&#8221; debug=&#8221;1&#8243;/&gt;<br />
ไว้ที่ด้านล่างของ</p>
<p><span style="color:#ff00ff;"> &lt;!&#8211;Realm className=&#8221;org.apache.catalina.realm.UserDatabaseRealm&#8221;<br />
resourceName=&#8221;UserDatabase&#8221;/&#8211;&gt;</span></p>
<p>5. จากนั้น copy file josso-credentials.xml, josso-users.xml จาก josso\core\src\resources มาไว้ที่ %CATALINA_HOME%/lib</p>
<p>6. จากนั้นเข้าไป folder ที่ unzip josso ออกมาแล้วพิมพ์คำสั่งต่อไปนี้ตามลำดับ</p>
<pre><span style="color:#ff00ff;">set JAVA_HOME=c:\jdk1.6.0
set CATALINA_HOME=c:\apache-tomcat-6.0.14
build.bat war
build.bat install-tomcat60
build.bat deploy-tomcat60</span>

7. จากนั้นให้ลอง start tomcat จะสังเกตว่าไม่มี error print out ออกมาที่ console</pre>
<p><span style="color:#0000ff;"><strong>Setup Agent</strong></span> อันนี้ผมแนะนำให้ setup tomcat อีกตัวขึ้นมาใหม่เลยนะครับ อย่างเช่นเครื่องผมมี tomcat6.0 อีกตัวนึง run ที่ 9090</p>
<p>1. Copy file josso-agent-config.xml จาก josso\core\src\resources ที่ unzip ออกมา เอามาวางไว้ที่ %CATALINA_HOME%/bin</p>
<p>2. ที่ %CATALINA_HOME%/bin สร้าง file ดังต่อไปนี้<br />
<span style="color:#ff00ff;">file:jsso-config.xml<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243; ?&gt;&lt;configuration&gt;&lt;hierarchicalXml fileName=&#8221;josso-agent-config.xml&#8221;/&gt;&lt;/configuration&gt;</span></p>
<p>3. จากนั้นสร้าง web module ขึ้นมาแล้วมี structure ดังต่อไปนี้<br />
<span style="color:#ff00ff;">SimpleSSO<br />
-index.jsp<br />
-login-redirect.jsp<br />
+protected<br />
-target.html<br />
+WEB-INF<br />
-web.xm</span>l</p>
<p>โดย detail แต่ละ file เป็นดังนี้<br />
<span style="color:#ff00ff;">//index.jsp<br />
&lt;%@ page language=&#8221;java&#8221; contentType=&#8221;text/html; charset=ISO-8859-1&#8243;<br />
pageEncoding=&#8221;ISO-8859-1&#8243;%&gt;<br />
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/html4/loose.dtd&#8221;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=ISO-8859-1&#8243;&gt;<br />
&lt;title&gt;Simple SSO&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
This is a public resource.&lt;br/&gt;<br />
&lt;a href=&#8221;protected/target.html&#8221;&gt;Protect Resource&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></p>
<p><span style="color:#ff00ff;">//login-redirect.jsp<br />
&lt;%@page contentType=&#8221;text/html; charset=iso-8859-1&#8243; language=&#8221;java&#8221; session=&#8221;true&#8221; %&gt;<br />
&lt;%<br />
response.sendRedirect(request.getContextPath() + &#8220;/josso_login/&#8221;);<br />
%&gt;</span></p>
<p><span style="color:#ff00ff;">//target.html<br />
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/html4/loose.dtd&#8221;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243;&gt;<br />
&lt;title&gt;Insert title here&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
Hello world SSO!!!<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></p>
<p><span style="color:#ff00ff;">//web.xml<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;web-app xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;<br />
xmlns=&#8221;http://java.sun.com/xml/ns/javaee&#8221;<br />
xmlns:web=&#8221;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#8221;<br />
xsi:schemaLocation=&#8221;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#8221;<br />
id=&#8221;WebApp_ID&#8221; version=&#8221;2.5&#8243;&gt;<br />
&lt;display-name&gt;SimpleSSO&lt;/display-name&gt;<br />
&lt;welcome-file-list&gt;<br />
&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&lt;/welcome-file-list&gt;</span></p>
<p>&lt;security-constraint&gt;<br />
&lt;web-resource-collection&gt;<br />
&lt;!&#8211; We&#8217;re going to protect this resource and make it available only to users in &#8220;role1&#8243;. &#8211;&gt;<br />
&lt;web-resource-name&gt;public-resources&lt;/web-resource-name&gt;<br />
&lt;url-pattern&gt;/protected/*&lt;/url-pattern&gt;<br />
&lt;http-method&gt;GET&lt;/http-method&gt;<br />
&lt;http-method&gt;POST&lt;/http-method&gt;<br />
&lt;/web-resource-collection&gt;<br />
&lt;auth-constraint&gt;<br />
&lt;role-name&gt;role1&lt;/role-name&gt;<br />
&lt;/auth-constraint&gt;<br />
&lt;user-data-constraint&gt;<br />
&lt;transport-guarantee&gt;NONE&lt;/transport-guarantee&gt;<br />
&lt;/user-data-constraint&gt;<br />
&lt;/security-constraint&gt;</p>
<p>&lt;login-config&gt;<br />
&lt;auth-method&gt;FORM&lt;/auth-method&gt;<br />
&lt;form-login-config&gt;<br />
&lt;form-login-page&gt;/login-redirect.jsp&lt;/form-login-page&gt;<br />
&lt;form-error-page&gt;/login-redirect.jsp&lt;/form-error-page&gt;<br />
&lt;/form-login-config&gt;<br />
&lt;/login-config&gt;<br />
&lt;security-role &gt;<br />
&lt;description&gt;Role 1&lt;/description&gt;<br />
&lt;role-name&gt;role1&lt;/role-name&gt;<br />
&lt;/security-role&gt;<br />
&lt;/web-app&gt;</p>
<p>4. จากนั้น pack &amp; deploy เลยครับ แล้วลองเข้าไปที่ <span style="color:#0000ff;">http://localhost:9090/SimpleSSO/protected/target.html</span> จะเป็นว่าระบบจะ redirect ไปที่หน้า SingOn จากนั้นให้เราไส่ user1/user1pwd แล้วระบบจะ login แล้วทำการ redirect กลับมาที่หน้า target.html</p>
<p>เสร็จแล้วครับ เห็นมะง่ายนิดเดียว ลองดูนะครับผมว่าน่าจะเป็นประโยชน์ต่อหลายๆคน เง้อหิวข้าวแล้วเพื่อยังไม่โทรมาอีก อะไรกันเนี่ยยยยยยยยยยยยยยยยยยยยยยย</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=17&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2008/05/01/josso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>

		<media:content url="http://www.josso.org/confluence/download/attachments/2949140/Architecture%20Overview.jpg" medium="image">
			<media:title type="html">JOSSO Architecture</media:title>
		</media:content>

		<media:content url="/DOCUME~1/Adison/LOCALS~1/Temp/moz-screenshot.jpg" medium="image" />

		<media:content url="/DOCUME~1/Adison/LOCALS~1/Temp/moz-screenshot-1.jpg" medium="image" />
	</item>
		<item>
		<title>Grails</title>
		<link>http://adder.wordpress.com/2007/05/17/grails/</link>
		<comments>http://adder.wordpress.com/2007/05/17/grails/#comments</comments>
		<pubDate>Thu, 17 May 2007 15:36:52 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/2007/05/17/grails/</guid>
		<description><![CDATA[Grails(http://grails.codehaus.org) มาแว้ววววววว ในที่สุดก็ว่างได้มาเล่าซะที เนื่องจากพักนี้ฝนตกบ่อยๆ ไอ้ตกบ่อยมันก็ดีอยู่หรอกนะแต่ห้องผมน้ำมันรั่วนี้จินอนๆอยู่เซ็งเลย เอาละเข้าเรื่องกันซะที พอดีว่าได้มีโอกาสลอง Grails ดูอะคับเลยอยากจะเอามาเล่าสู่กันฟังเผื่อจะมีคนนำไปใช้งานจริง(ก่อนผม) อิอิเริ่มเลยละกันนะ Grails คือ ? ผมมองว่า Grails คือ Tools ที่ช่วยในการ Generate Java Web Application โดย Web Application ที่ Generate มานี้จะครอบคลุม Function CRUD (Create, Read, Update, Delete) น่าสนใจไช่มั้ยละอย่างน้อยก็นำมาทำส่วน admin ได้แหละ ได้แค่ CRUD เหรอ? ป่าวคับนั่นเป็นแค่ default การ Generate ถ้าต้องการ Function อย่างอื่นนอกเหนือจากนี้ก็สามารถเขียนเองเพิ่มเติมได้ตามใจชอบเลย แล้วเขียนไงอะ? ฮ่าๆๆๆ อย่าพึ่งคึกเนื่องจาก Grails นี้ใช้ภาษา Groovy ในการพัฒนา developer [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=15&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Grails(http://grails.codehaus.org)</strong><br />
มาแว้ววววววว ในที่สุดก็ว่างได้มาเล่าซะที เนื่องจากพักนี้ฝนตกบ่อยๆ ไอ้ตกบ่อยมันก็ดีอยู่หรอกนะแต่ห้องผมน้ำมันรั่วนี้จินอนๆอยู่เซ็งเลย<br />
เอาละเข้าเรื่องกันซะที พอดีว่าได้มีโอกาสลอง Grails ดูอะคับเลยอยากจะเอามาเล่าสู่กันฟังเผื่อจะมีคนนำไปใช้งานจริง(ก่อนผม) อิอิเริ่มเลยละกันนะ</p>
<p><strong>Grails คือ ?</strong><br />
ผมมองว่า Grails คือ Tools ที่ช่วยในการ Generate Java Web Application โดย Web Application ที่ Generate มานี้จะครอบคลุม Function CRUD (Create,<br />
Read, Update, Delete) น่าสนใจไช่มั้ยละอย่างน้อยก็นำมาทำส่วน admin ได้แหละ</p>
<p><strong>ได้แค่ CRUD เหรอ?</strong><br />
ป่าวคับนั่นเป็นแค่ default การ Generate ถ้าต้องการ Function อย่างอื่นนอกเหนือจากนี้ก็สามารถเขียนเองเพิ่มเติมได้ตามใจชอบเลย</p>
<p><strong>แล้วเขียนไงอะ?</strong><br />
ฮ่าๆๆๆ อย่าพึ่งคึกเนื่องจาก Grails นี้ใช้ภาษา Groovy ในการพัฒนา developer จึงจำเป็นต้องมีความรู้ใน Groovy พอสมควร แรกๆผมคิดจะดำน้ำไป แต่ดำๆไปซักพัก $%#@!#*?$ นี่มันเขียนบ้าไรวะ ก็เลยต้องกลับไปอ่าน Groovy มาก่อน(อิอิ) อย่างน้อยก็ต้องรู้ Syntax มันแหละ (promotion พิเศษสำหรับคอ java ไปที่นี่เลย http://groovy.codehaus.org/Differences+from+Java)</p>
<p><strong>แล้ว Web Application ที่ Generate ได้มัน deploy ได้ทุก server ป่าว?</strong><br />
อันนี้ไม่ confirm น้าาาา แต่จะบอกว่าตัว Framework ที่ Grails มัน Generate มันจะเป็น Spring + Hibernate3 แหละอิอิ โดยส่วนตัวผมชอบคู่หูคู่ฮานี้อยู่แล้วเลยยิ่งช๊อบบบ ชอบ สำหรับบางคนอาจจะมองว่านี่เป็นข้อจำกัดก็ได้นะคับ เพราะถ้าองค์กรหรือ project ที่กำลังพัฒนาไม่ไช่ Spring + Hibernate ถ้าจะเอาตัวนี้ไป Merge ก็ต้องทำใจ</p>
<p><strong>งั้น Project ผมไม่ใช้ Spring + Hibernate ก็หมดสิทธจิ?</strong><br />
ก็ไม่ซะทีเดียวหรอกคับ เนื่องจาก Framework ที่ Grails มัน Generate มันมี SiteMesh ด้วยนะ หวังว่าคงเอาไปช่วยไรใด้บ้าง(อิอิ)</p>
<p><strong>แล้ว Tutorial เยอะมั้ย</strong><br />
มีข่าวดีกับข่าวร้ายเอาไรก่อน เอาข่าวดีก่อนละกันนะ Tutorial มีเยอะแยะเลยส่วนมาก Step-By-Step ด้วยนะเยี่ยมมั้ย ส่วนข่าวร้าย Tutorial ส่วนมากไม่สามารถ run ได้กับ<br />
version 0.5.5 (lastest version) อิอิต้อง modify นิดๆหน่อยๆ(อิอิ สู้เข้านะคับ)</p>
<p><strong>ขอดูตัวอย่างหน่อยจิ</strong><br />
ทีแรกผมว่าจะ demo ให้ดูแต่ผมว่านี่ http://grails.org/Quick+Start ก็ง่ายแล้วแหละ</p>
<p><em><strong>โชคดีนะคับ อิอิ</strong></em></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=15&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2007/05/17/grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>
	</item>
		<item>
		<title>Spring Web Flow</title>
		<link>http://adder.wordpress.com/2007/05/01/spring-web-flow/</link>
		<comments>http://adder.wordpress.com/2007/05/01/spring-web-flow/#comments</comments>
		<pubDate>Tue, 01 May 2007 14:48:52 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/2007/05/01/spring-web-flow/</guid>
		<description><![CDATA[Spring Web Flow (http://www.springframework.org/webflow) หลังจากที่สงสัยมานานว่า Spring MVC กับ Spring Web Flow มันต่างกันไง ก็เลยลองมาแกะๆดูซะหน่อยว่า Spring Web Flow มันเป็นไง หลังจากที่มาแงะๆดู ก็พอจะรู้คร่าวๆว่าไอ้ Spring Web Flow นี่มันก็ใช้ Spring MVC นั่นแหละทั้ง View Technology, Bean Component(loC) ต่างๆ แต่ว่าไอ้เจ้า Spring Web Flow นี่มันจะมี Flow Loader เข้ามาช่วย(หนึ่งใน bean ที่จำเป็นต้อง load ของ Spring Container) ซึ่งตัว Flow Loader นี่เองจะเป็นตัว ควบคุมแล้วจัดการ Flow ทั้งหมดในระบบ(สามารถมีได้มากกว่า 1 Flow ในระบบ) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=13&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Spring Web Flow (http://www.springframework.org/webflow) </strong></p>
<p>หลังจากที่สงสัยมานานว่า Spring MVC กับ Spring Web Flow มันต่างกันไง ก็เลยลองมาแกะๆดูซะหน่อยว่า Spring Web Flow มันเป็นไง หลังจากที่มาแงะๆดู ก็พอจะรู้คร่าวๆว่าไอ้ Spring Web Flow นี่มันก็ใช้ Spring MVC นั่นแหละทั้ง View Technology, Bean Component(loC) ต่างๆ แต่ว่าไอ้เจ้า Spring Web Flow นี่มันจะมี Flow Loader เข้ามาช่วย(หนึ่งใน bean ที่จำเป็นต้อง load ของ Spring Container) ซึ่งตัว Flow Loader นี่เองจะเป็นตัว ควบคุมแล้วจัดการ Flow ทั้งหมดในระบบ(สามารถมีได้มากกว่า 1 Flow ในระบบ) ซึ่งตัว Flow Loader นี่จะไป load flow descriptor (xml file)  ซึ่ง Flow แต่ละ flow ก็จะมี id เป้นตัวระบุว่า flow นี้ชื่อไร</p>
<p>จากที่ผมลองๆ(ทั้งทำตามและนั่งดูเฉยๆ อิอิ) ไม่ค่อยประทับไจเท่าไหร่ ผมว่ามันคล้ายกับ JSF มากๆ บางคนอาจจะแย้งผมว่าคล้ายได้ไงวะ JSF มันเป็นเรื่องของ Component Model นี่หว่า แต่ Spring Web Flow มันเป้นเรื่องของการทำ web ซึ่งกว้างกว่า web component อีก หุหุ จริงๆแล้วเวลาเราทำ web ผมมองว่ามันก็คือการจัดการ กับ event กับ behavior ของ UI Component นั่นแหละ (งานส่วนใหญ่มีแค่นั้น)</p>
<p>กลับมาเข้าที่ Spring Web Flow กันต่อ(นอกเรื่องไปนานแล้ว อิอิ) เอาง่ายๆตัวที่จะต้องสนใจมี 3 ตัวหลักๆนั่นก้คือ<br />
<strong> bean</strong> = ก็ bean ต่างๆนั่นแหละอยาก load อะไรก็ load แต่เค้าทำมาเพื่อ load พวก Web Action &amp; Form Validator แต่จะเอาไป load พวก Transaction Control, DAO, &#8230;. ก็ตามสดวกคับ<br />
<strong> view-state</strong> = ส่วนนี้เอาไว้แสดงผลนะ โดยจะ map กับ view ต่างๆ ขึ้นอยู่กับ View Thechnology ที่ไช้ จะใช้ JSF หรือ Struts Tiles ก็ยังไหว อิอิ แต่จะไช้ Plain JSP ก็ได้ โดยเจ้า view-state นี่แหละที่จะมี transition เป็นตัวบอกว่าเกิดไรให้ทำไร (คุ้นๆมะคล้ายกับ navigation-case ของ JSF ป่าวอิอิ) อันนี้แหละต่างจาก Spring MVC ซัดๆ(เฮ้ยเผลอหลุดภาษาบ้านเกิดแล้วตู) ซึ่งเจ้าตัว Spring MVC จะไม่มีตัว view navigation control (ซึ่งก็คือ forward ใน struts, navigation-case ของ jsf และ transition ของ spring web flow)  แต่ถ้าเราจะมองว่า Spring MVC มีเฉพาะ global view navigation control ก็ไม่ผิดนะเพราะมันมีแค่ global จริงๆ<br />
<strong>action-state</strong> = ไม่ต้องบอกก็รู้เนอะ เอาไว้ทำงานต่างๆตาม business process แล้วมันก็มี transition เป็นตัวบอกเหมือนกันกับ view-state นั่นแหละ<br />
*เกือบลืมเจ้านี่มี conversation scope ด้วยนะ ว้าวไม่รู้ใครเลียนแบบใคร (Seam VS Spring Web Flow) แต่ชั่งเถอะจำข้อดีเขามาไช้ก็เยี่ยมแล้ว</p>
<p>บทความนี่ผมเขียนขึ้นจากความเข้าใจผมนะคับ อาจจะมีความคิดเห็นแทรกไปบ้างก็ขออภัยนะคับ มีไรก็ comment ได้นะคับ ให้กำลังใจก็ได้</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=13&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2007/05/01/spring-web-flow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>
	</item>
		<item>
		<title>Ajax4Jsf</title>
		<link>http://adder.wordpress.com/2007/04/19/ajax4jsf/</link>
		<comments>http://adder.wordpress.com/2007/04/19/ajax4jsf/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 16:53:59 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/2007/04/19/ajax4jsf/</guid>
		<description><![CDATA[หลังจากแอบไปเล่นน้ำสงกรานต์มา กลับมาก็เลยเอาซะหน่อยอ่านจบแล้วแต่ยังมะได้เขียนซะทีวันนี้แหละ เริ่มละนะ มันคือๆไร? มันก็คือ framework ที่จะเข้ามาช่วยให้การนำ ajax เข้ามาใช้งานกับ jsf ของเราง่ายขึ้นไงละ Ajax คือไร ? โอ้พระเจ้า Ajax = Asynchronous Javascript And Xml ส่วน detail ไปหาเอาเองนะอิอิ แล้ว JSF ละ ? JSF = Java Server Face ถ้าไม่มีพื้นฐานด้าน jsf มาก่อน ผมแนะนำให้ไปอ่านมาก่อนครับ เดี๋ยวเจอปัญหาจะแก้ไม่ตก อิอิ ยากมั้ย ? การเขียนมะยากคับแต่ debug ฝั่ง client (ajax) ค่อนข้างลำบากถ้าไม่มี Tools ดีๆมาช่วย ผมเองใช้ MyEclipse AJAX Tools / Web [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=11&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>หลังจากแอบไปเล่นน้ำสงกรานต์มา กลับมาก็เลยเอาซะหน่อยอ่านจบแล้วแต่ยังมะได้เขียนซะทีวันนี้แหละ เริ่มละนะ</em></p>
<p><strong>มันคือๆไร?</strong><br />
มันก็คือ framework ที่จะเข้ามาช่วยให้การนำ ajax เข้ามาใช้งานกับ jsf ของเราง่ายขึ้นไงละ</p>
<p><strong>Ajax คือไร ?</strong><br />
โอ้พระเจ้า Ajax = Asynchronous Javascript And Xml ส่วน detail ไปหาเอาเองนะอิอิ</p>
<p><strong>แล้ว JSF ละ ?</strong><br />
JSF = Java Server Face ถ้าไม่มีพื้นฐานด้าน jsf มาก่อน ผมแนะนำให้ไปอ่านมาก่อนครับ เดี๋ยวเจอปัญหาจะแก้ไม่ตก อิอิ</p>
<p><strong>ยากมั้ย ?</strong><br />
การเขียนมะยากคับแต่ debug ฝั่ง client (ajax) ค่อนข้างลำบากถ้าไม่มี Tools ดีๆมาช่วย ผมเองใช้ MyEclipse AJAX Tools / Web 2.0 Tools มาช่วยคับเบาแรงไปเยอะ อิอิ</p>
<p><strong>ไม่เห็นภาพ ขอตัวอย่างง่ายๆหน่อยจิ ?</strong><br />
ตัวอย่างนี้ผมจะไม่ขออธิบายในส่วน basic web application นะคับ ผมจะเอาเฉพาะส่วนที่สำคัญๆเท่านั้น  รูปข้างล่างเป็นรูป architecture ของ Ajax4Jsf คับ</p>
<p><a href="http://adder.wordpress.com/2007/04/19/ajax4jsf/ajax4jsf-architecture/" rel="attachment wp-att-12" title="ajax4jsf-architecture"><img src="http://adder.files.wordpress.com/2007/04/newpic1.thumbnail.jpg?w=470" alt="ajax4jsf-architecture" /></a></p>
<p>//web deployment descriptor ก็ load jsf engine กับ ajax4jsf engine ซะ<br />
//web.xml<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221; &#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;<br />
&lt;web-app id=&#8221;WebApp_ID&#8221;&gt;<br />
&lt;display-name&gt;SimpleAjax4Jsf&lt;/display-name&gt;<br />
&lt;filter&gt;<br />
&lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;<br />
&lt;filter-class&gt;org.ajax4jsf.Filter&lt;/filter-class&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;<br />
&lt;url-pattern&gt;*.faces&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;<br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;*.faces&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
&lt;welcome-file-list&gt;<br />
&lt;welcome-file&gt;login.jsp&lt;/welcome-file&gt;<br />
&lt;/welcome-file-list&gt;<br />
&lt;taglib&gt;<br />
&lt;taglib-uri&gt;https://ajax4jsf.dev.java.net/ajax&lt;/taglib-uri&gt;<br />
&lt;taglib-location&gt;tld/a4j.tld&lt;/taglib-location&gt;<br />
&lt;/taglib&gt;<br />
&lt;/web-app&gt;</p>
<p>//อันนี้เป็น config file ของ jsf<br />
//faces-config.xml<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;!DOCTYPE faces-config PUBLIC<br />
&#8220;-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN&#8221;<br />
&#8220;http://java.sun.com/dtd/web-facesconfig_1_1.dtd&#8221;&gt;<br />
&lt;faces-config&gt;<br />
&lt;managed-bean&gt;<br />
&lt;managed-bean-name&gt;searchBean&lt;/managed-bean-name&gt;<br />
&lt;managed-bean-class&gt;psn.gsoft.jsf.simpleajax4jsf.bean.SearchBean&lt;/managed-bean-class&gt;<br />
&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;<br />
&lt;/managed-bean&gt;<br />
&lt;/faces-config&gt;</p>
<p>//ส่วนของ View คับ<br />
//search.jsp<br />
&lt;%@ page language=&#8221;java&#8221; contentType=&#8221;text/html; charset=UTF-8&#8243; pageEncoding=&#8221;UTF-8&#8243;%&gt;<br />
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/html4/loose.dtd&#8221;&gt;<br />
&lt;%@ taglib uri=&#8221;https://ajax4jsf.dev.java.net/ajax&#8221; prefix=&#8221;a4j&#8221;%&gt;<br />
&lt;%@ taglib uri=&#8221;http://java.sun.com/jsf/core&#8221; prefix=&#8221;f&#8221; %&gt;<br />
&lt;%@ taglib uri=&#8221;http://java.sun.com/jsf/html&#8221; prefix=&#8221;h&#8221; %&gt;<br />
&lt;html&gt;<br />
&lt;f:view&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243;&gt;<br />
&lt;title&gt;Search&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h:form&gt;<br />
&lt;h:panelGrid columns=&#8221;1&#8243;&gt;<br />
&lt;a4j:region&gt;<br />
&lt;h:outputLabel value=&#8221;Keyword&#8221;&gt;&lt;/h:outputLabel&gt;<br />
&lt;h:inputText id=&#8221;name&#8221; value=&#8221;#{searchBean.keyword}&#8221; tabindex=&#8221;0&#8243;&gt;<br />
&lt;a4j:support event=&#8221;onkeyup&#8221; actionListener=&#8221;#{searchBean.find}&#8221; reRender=&#8221;searchResults&#8221;/&gt;<br />
&lt;/h:inputText&gt;<br />
&lt;/a4j:region&gt;<br />
&lt;/h:panelGrid&gt;<br />
&lt;h:commandButton actionListener=&#8221;#{searchBean.find}&#8221;&gt;Search&lt;/h:commandButton&gt;<br />
&lt;a4j:status&gt;<br />
&lt;f:facet name=&#8221;start&#8221;&gt;<br />
&lt;h:graphicImage value=&#8221;/images/spinner.gif&#8221;/&gt;<br />
&lt;/f:facet&gt;<br />
&lt;/a4j:status&gt;<br />
&lt;/h:form&gt;</p>
<p>&lt;a4j:outputPanel id=&#8221;searchResults&#8221;&gt;<br />
&lt;div class=&#8221;section&#8221;&gt;<br />
&lt;h:dataTable value=&#8221;#{searchBean.matchs}&#8221; var=&#8221;match&#8221; rendered=&#8221;true&#8221;&gt;<br />
&lt;h:column&gt;<br />
&lt;f:facet name=&#8221;header&#8221;&gt;Name&lt;/f:facet&gt;<br />
&lt;h:outputText value=&#8221;#{match}&#8221;/&gt;<br />
&lt;/h:column&gt;<br />
&lt;/h:dataTable&gt;<br />
&lt;/div&gt;<br />
&lt;/a4j:outputPanel&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/f:view&gt;<br />
&lt;/html&gt;</p>
<p>//Bean class<br />
//SearchBean.java<br />
package psn.gsoft.jsf.simpleajax4jsf.bean;</p>
<p>import java.util.ArrayList;<br />
import java.util.List;</p>
<p>import javax.faces.event.ActionEvent;</p>
<p>public class SearchBean {<br />
private String[] names;<br />
private Object[] matchs;<br />
private String keyword;</p>
<p>public SearchBean(){<br />
names = new String[]{&#8220;Adison&#8221;, &#8220;Duke&#8221;, &#8220;Didi&#8221;, &#8220;John&#8221;, &#8220;Subianto&#8221;};<br />
}</p>
<p>public String getKeyword(){<br />
return keyword;<br />
}</p>
<p>public void setKeyword(String keyword){<br />
this.keyword = keyword;<br />
}</p>
<p>public Object[] getMatchs(){<br />
return matchs;<br />
}</p>
<p>public String[] getNames(){<br />
return names;<br />
}</p>
<p>public void find(ActionEvent ae){<br />
find();<br />
}</p>
<p>public void find(){<br />
List&lt;String&gt; values = new ArrayList&lt;String&gt;();</p>
<p>for(String name:names){<br />
if(name.indexOf(keyword)&gt;-1){<br />
values.add(name);<br />
}<br />
}</p>
<p>matchs = values.toArray();<br />
}<br />
}</p>
<p>เสร็จแล้วคับ จากนั้นก็ pack แล้วก็ deploy เลยคับ comment กันบ้างนะคับจะได้มีกำลังใจเขียนต่อไป</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=11&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2007/04/19/ajax4jsf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>

		<media:content url="http://adder.files.wordpress.com/2007/04/newpic1.thumbnail.jpg" medium="image">
			<media:title type="html">ajax4jsf-architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>JBoss Seam</title>
		<link>http://adder.wordpress.com/2007/04/06/jboss-seam/</link>
		<comments>http://adder.wordpress.com/2007/04/06/jboss-seam/#comments</comments>
		<pubDate>Fri, 06 Apr 2007 11:54:38 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/2007/04/06/jboss-seam/</guid>
		<description><![CDATA[Seam (http://www.jboss.com/products/seam) ช่วงนี้พึ่งจะอ่าน jboss seam มาคับเห็นว่าน่าสนใจ เลยอยากจะเอามาเล่าให้ฟังคร่าวๆ seam เป็น frame work ไว้สำหรับทำ web application ที่ออกแบบมา รอบรับ web 2.0 โดยจะมีการนำ technology อื่นๆเข้ามาใช้ร่วมด้วย Ajax(ajax4jsf), Enterprice Java Bean 3.0(Generic Session Bean), Java Persistance API(Hibernate), Business Process Management(jBPM) โดย seam สามารถทำงานใด้บน application server ที่มี ejb 3 container เช่น jboss และบน application server ที่ไม่มี ejb 3 container เช่น Tomcat หุหุ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=7&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Seam </strong>(http://www.jboss.com/products/seam)<br />
ช่วงนี้พึ่งจะอ่าน jboss seam มาคับเห็นว่าน่าสนใจ เลยอยากจะเอามาเล่าให้ฟังคร่าวๆ seam เป็น frame work ไว้สำหรับทำ web application ที่ออกแบบมา รอบรับ web 2.0 โดยจะมีการนำ technology อื่นๆเข้ามาใช้ร่วมด้วย Ajax(ajax4jsf), Enterprice Java Bean 3.0(Generic Session Bean), Java Persistance API(Hibernate), Business Process Management(jBPM) โดย seam สามารถทำงานใด้บน application server ที่มี ejb 3 container เช่น jboss และบน application server ที่ไม่มี ejb 3 container<br />
เช่น Tomcat  หุหุ ฟังแค่นี้ก็น่าสนใจแล้วไช่มั้ยคับ</p>
<p><a href="http://adder.files.wordpress.com/2007/04/architecture.png" title="seam-architecture.png"></a></p>
<p style="text-align:center;"><a href="http://adder.files.wordpress.com/2007/04/architecture.png" title="seam-architecture.png"><img src="http://adder.files.wordpress.com/2007/04/architecture.png?w=470" alt="seam-architecture.png" /></a></p>
<p align="center">seam architecture</p>
<p><strong><br />
ทำไมต้องใช้ Seam ?</strong><br />
<strong>เป็น framework แรกสำหรับ ejb 3</strong> : หลังจากที่ standard ejb พัฒนาจาก version 2.x มาเป็น 3.0 นั้นทำให้การใช้ ejb ง่ายกว่าเดิมมากๆ ไม่ว่าจะเป็นการลดความซ้ำซ้อนของ code และการลดข้อมูลใน deployment descriptor สำหรับ seam นั้น จะมีการรวมบางส่วนของ presentation tier กับ business logic tier เอาใว้ด้วยกัน<br />
<strong>เป็นวิธีง่ายๆสำหรับการนำ Ajax มาใช</strong>้ : ตัว seam นี้มีการ integrate ajax4jsf เข้าไปด้วย ซึ่งสำหรับผู้ใช้ seam อาจไม่รู้ด้วยซ้ำว่า ajax ทำงานหรือเขียน code อย่างไร แต่ ajax จะเข้ามาช่วยคุณเองโดยอัตโนมัติ เช่น การ validate data &amp; fill in data  จาก data model<br />
<strong>มีระบบการจัดการ state ใหม่ </strong>: ก่อนหน้าที่จะมี seam เราจะชอบเก็บข้อมูลต่างๆ ที่ต้องใช้หลายๆครั้งไว้ใน session context ซึ่ง อาจก่อให้เกิดปัญหา เช่น การ remove object นั้นออกจาก session context เมื่อไม่ใช้งานแล้ว และ การ save object ซ้ำในกรณีที่ผู้ใช้งาน ใช้มากกว่า 1 tab บน web browser(อืมก็จริงแฮะ) ตัว seam ใด้สร้าง context ใหม่ขึ้นมาจัดการปัญหาดังกล่าวด้วย<br />
<strong>จัดการ Flow</strong>: ตัว seam มีการ integrate jBPM ทำให้สามารถจัดการงานที่เป็น work flow ใด้โดยใช้ความสามารถของ jBPM</p>
<p>*จาก web ของ seam เองมีตัวอย่างมากมายให้ศึกษาอยู่แล้วคับ แต่ถ้าต้องการให้ผม demo ให้ดูก็ comment มาใด้เลยนะคับ</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=7&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2007/04/06/jboss-seam/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>

		<media:content url="http://adder.files.wordpress.com/2007/04/architecture.png" medium="image">
			<media:title type="html">seam-architecture.png</media:title>
		</media:content>
	</item>
		<item>
		<title>จงอ่านแล้วคิดว่าจะวนหรือจะจอด</title>
		<link>http://adder.wordpress.com/2007/04/04/%e0%b8%88%e0%b8%87%e0%b8%ad%e0%b9%88%e0%b8%b2%e0%b8%99%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b8%a7%e0%b8%99%e0%b8%ab%e0%b8%a3/</link>
		<comments>http://adder.wordpress.com/2007/04/04/%e0%b8%88%e0%b8%87%e0%b8%ad%e0%b9%88%e0%b8%b2%e0%b8%99%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b8%a7%e0%b8%99%e0%b8%ab%e0%b8%a3/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 15:41:05 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[good article]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/2007/04/04/%e0%b8%88%e0%b8%87%e0%b8%ad%e0%b9%88%e0%b8%b2%e0%b8%99%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b8%a7%e0%b8%99%e0%b8%ab%e0%b8%a3/</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=6&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://adder.files.wordpress.com/2007/04/lookkaew-l-0609090701.jpg" title="lookkaew-l-0609090701.jpg"><img src="http://adder.files.wordpress.com/2007/04/lookkaew-l-0609090701.jpg?w=470" alt="lookkaew-l-0609090701.jpg" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=6&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2007/04/04/%e0%b8%88%e0%b8%87%e0%b8%ad%e0%b9%88%e0%b8%b2%e0%b8%99%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b8%a7%e0%b8%99%e0%b8%ab%e0%b8%a3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>

		<media:content url="http://adder.files.wordpress.com/2007/04/lookkaew-l-0609090701.jpg" medium="image">
			<media:title type="html">lookkaew-l-0609090701.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>ข้อคิดสำหรับมนุษย์เงินเดือน</title>
		<link>http://adder.wordpress.com/2007/04/04/%e0%b8%82%e0%b9%89%e0%b8%ad%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99/</link>
		<comments>http://adder.wordpress.com/2007/04/04/%e0%b8%82%e0%b9%89%e0%b8%ad%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 15:28:43 +0000</pubDate>
		<dc:creator>Adison Pimpakan</dc:creator>
				<category><![CDATA[good article]]></category>

		<guid isPermaLink="false">http://adder.wordpress.com/2007/04/04/%e0%b8%82%e0%b9%89%e0%b8%ad%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99/</guid>
		<description><![CDATA[กาลครั้งหนึ่งนานมาแล้ว มีนกแสนสวยตัวหนึ่ง มีขนสวยงามมาก มีคนอยากได้ไว้ครอบครองเป็นจำนวน มากแต่ไม่เคยมีชาวบ้านคนไหนจับนกตัวนั้นได้เลย อยู่มาวันหนึ่งมี อาบัง ขายถั่วมานั่งใต้ต้นไม้ที่มีนกแสน สวยอยู่ พอนกแสนสวยเห็นถั่วของอาบังก็เกิดอยากกินขึ้นมา จึงร้องบอกอาบังว่า “ อาบัง อาบัง ขอถั่วให้ชั้นกินหน่อยสิ ” อาบังได้ยินดังนั้น ก็ตอบกลับไปว่า “ ได้เลย ได้เลย แต่ขอขนให้ชั้นเส้นนึงนะ ” พอนกได้ยินดังนั้น ก็ก้มลงมองที่ขนของตนเอง แล้วคิดว่า ขนของตนเองนี่มีเยอะมาก เสียไปสักเส้นคง ไม่เป็นไรหรอก นกแสนสวยก็เลยให้ขนอาบังไปหนึ่งเส้น แล้วก็ลงไปกินถั่วของอาบัง วันต่อมานกแสน สวยก็บอกกับอาบังอีกว่าขอถั่วให้ชั้นกินหน่อยสิ อาบังก็ตอบเหมือนเดิมว่าขอขนให้ชั้นเส้นหนึ่งก่อน นกแสน สวยก็คิดเหมือนเดิมว่าขนมันยังมีอยู่เยอะก็เลยให้ขนอาบังไปอีก เป็นอย่างนี้ต่อไปอีกหลายวัน จนวันหนึ่ง นกแสนสวยก็ขอถั่วอาบังกินอีก อาบังก็ตอบเหมือนเดิมว่า ขอขนให้ชั้นเส้นหนึ่งก่อน นกก็ไม่รีรอรีบให้ขน อาบังไปทันที แล้วลงมากินถั่วของอาบัง อาบังก็เลยจับนกตัวนั้นไว้ได้ เพราะว่าขนของมันเหลือน้อยแล้ว ไม่สามารถที่จะบินหนีอาบังได้ เรื่องนี้ถ้าอ่านผ่านไปอาจจะไม่ได้อะไรเลย แต่ถ้าเราลองคิดให้ดี เปลี่ยนจากนกแสนสวยเป็นตัวเรา ขนของนกแต่ละเส้นคือเวลาของเราที่เสียไปและอาบังเป็นนายจ้างของเราส่วนถั่วที่อาบังให้ก็เหมือนกับ เงินเดือนที่นายจ้างให้เรา หมายความว่า ทุกวันนี้ ถ้าเรายังประมาทในการใช้ชีวิตยังพอใจแค่เงินเดือนที่นายจ้างให้เราทุกเดือน [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=4&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>กาลครั้งหนึ่งนานมาแล้ว มีนกแสนสวยตัวหนึ่ง มีขนสวยงามมาก มีคนอยากได้ไว้ครอบครองเป็นจำนวน<br />
มากแต่ไม่เคยมีชาวบ้านคนไหนจับนกตัวนั้นได้เลย อยู่มาวันหนึ่งมี อาบัง ขายถั่วมานั่งใต้ต้นไม้ที่มีนกแสน<br />
สวยอยู่ พอนกแสนสวยเห็นถั่วของอาบังก็เกิดอยากกินขึ้นมา จึงร้องบอกอาบังว่า<br />
“ อาบัง อาบัง ขอถั่วให้ชั้นกินหน่อยสิ ”<br />
อาบังได้ยินดังนั้น ก็ตอบกลับไปว่า<br />
“ ได้เลย ได้เลย แต่ขอขนให้ชั้นเส้นนึงนะ ”<br />
พอนกได้ยินดังนั้น ก็ก้มลงมองที่ขนของตนเอง แล้วคิดว่า ขนของตนเองนี่มีเยอะมาก เสียไปสักเส้นคง<br />
ไม่เป็นไรหรอก นกแสนสวยก็เลยให้ขนอาบังไปหนึ่งเส้น แล้วก็ลงไปกินถั่วของอาบัง วันต่อมานกแสน<br />
สวยก็บอกกับอาบังอีกว่าขอถั่วให้ชั้นกินหน่อยสิ อาบังก็ตอบเหมือนเดิมว่าขอขนให้ชั้นเส้นหนึ่งก่อน นกแสน<br />
สวยก็คิดเหมือนเดิมว่าขนมันยังมีอยู่เยอะก็เลยให้ขนอาบังไปอีก เป็นอย่างนี้ต่อไปอีกหลายวัน จนวันหนึ่ง<br />
นกแสนสวยก็ขอถั่วอาบังกินอีก อาบังก็ตอบเหมือนเดิมว่า ขอขนให้ชั้นเส้นหนึ่งก่อน นกก็ไม่รีรอรีบให้ขน<br />
อาบังไปทันที แล้วลงมากินถั่วของอาบัง อาบังก็เลยจับนกตัวนั้นไว้ได้ เพราะว่าขนของมันเหลือน้อยแล้ว<br />
ไม่สามารถที่จะบินหนีอาบังได้<br />
เรื่องนี้ถ้าอ่านผ่านไปอาจจะไม่ได้อะไรเลย แต่ถ้าเราลองคิดให้ดี เปลี่ยนจากนกแสนสวยเป็นตัวเรา<br />
ขนของนกแต่ละเส้นคือเวลาของเราที่เสียไปและอาบังเป็นนายจ้างของเราส่วนถั่วที่อาบังให้ก็เหมือนกับ<br />
เงินเดือนที่นายจ้างให้เรา<br />
หมายความว่า ทุกวันนี้ ถ้าเรายังประมาทในการใช้ชีวิตยังพอใจแค่เงินเดือนที่นายจ้างให้เราทุกเดือน<br />
เวลาของเราก็จะค่อยๆหมดไปเรื่อยๆ เวลาของเราไม่ได้มีมากมายหรอกแป๊บเดียวเดี๋ยวมันก็หมดไป<br />
แล้ว ซึ่งเงินเดือนที่นายจ้างให้เราเนี่ยก็ให้แค่พอเราอยู่ได้ทุกเดือนเท่านั้นแหละ บางคนอาจจะคิดว่า<br />
การทำงานประจำเป็นอาชีพที่มั่นคง แต่ก็ไม่นะ เพราะว่าการเป็นลูกจ้างเค้าเนี่ยเราไม่สามารถที่จะ<br />
กำหนดวิถีชีวิตของตัวเองได้ เราถูกนายจ้างเรากำหนดให้ต่างหากว่าจะหยุดวันไหนวันนี้จะทำอะไร จึง<br />
ไม่อยากให้ทุกคนยึดติดกับความคุ้นเคยกับความสบายเพียงแค่วันนี้แต่อยากจะให้มองให้ไกลๆ มองถึง<br />
อนาคตของเราว่าเราจะหยุดทำงานเมื่อไหร่เราจะใช้ชีวิตในวัยเกษียณอย่างไร อย่าเป็นเหมือนนกแสน<br />
สวยที่รู้ตัวก็ตอนที่ตัวเองไม่มีขนอยู่ที่ตัวแล้ว</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/adder.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/adder.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adder.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adder.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/adder.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/adder.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adder.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adder.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/adder.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adder.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adder.wordpress.com&amp;blog=912099&amp;post=4&amp;subd=adder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://adder.wordpress.com/2007/04/04/%e0%b8%82%e0%b9%89%e0%b8%ad%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4186d6de32d3d2de71ce21ef2081f901?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">adder</media:title>
		</media:content>
	</item>
	</channel>
</rss>
