<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-15101094</atom:id><lastBuildDate>Thu, 26 Jan 2012 15:04:24 +0000</lastBuildDate><category>idea</category><category>guide</category><category>MySQL</category><category>JSP</category><category>tool</category><category>web</category><category>Javascript</category><category>ActiveMQ</category><category>philosophy</category><category>Java</category><category>game</category><category>Web 2.0</category><category>dirty trick</category><category>Groovy</category><category>misc</category><category>Gant</category><category>JQuery</category><category>Tomcat</category><category>Firefox</category><category>reading list</category><category>Eclipse IDE</category><category>Spring</category><category>review</category><category>SVN</category><category>Tips and Tricks</category><title>Developer's Note</title><description>// shall I write some keywords here to boost search engine ranking?</description><link>http://thiamteck.blogspot.com/</link><managingEditor>noreply@blogger.com (Thiam Teck (1983 - ?))</managingEditor><generator>Blogger</generator><openSearch:totalResults>130</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blogspot/developers_philosophy" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="blogspot/developers_philosophy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2587853689066736754</guid><pubDate>Fri, 04 Nov 2011 18:09:00 +0000</pubDate><atom:updated>2011-11-05T02:21:39.747+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Revert to the old Google Reader? Let's enhance the new one</title><description>IMHO, The redesign of Google Reader to integrate with Google+ do not impress me.&lt;br /&gt;
&lt;br /&gt;
I am agree with &lt;a href="http://techcrunch.com/2011/11/02/ex-google-reader-product-manager-posts-scathing-review-of-reader-redesign/"&gt;the review of ex-Product Manager of Google Reader&lt;/a&gt;. The space allocated for reading is just too small, and I personally like the light blue theme than the current grey scale page.&lt;br /&gt;
&lt;br /&gt;
I failed to google any workable way to restore the old Google look and feel. However, I found the ways to enhance the Google Reader (for Firefox).&lt;br /&gt;
&lt;br /&gt;
Below is the original new Google Reader look and feel:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-slGEjYW7s2U/TrQp64KnqaI/AAAAAAAAA0I/_XmdkYjZ8uM/s1600/original.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://1.bp.blogspot.com/-slGEjYW7s2U/TrQp64KnqaI/AAAAAAAAA0I/_XmdkYjZ8uM/s320/original.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Below is the modified look and feel:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-TW3eoAJCsx8/TrQp8u2EGeI/AAAAAAAAA0Q/JQeIMTFUdJ8/s1600/modified.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://4.bp.blogspot.com/-TW3eoAJCsx8/TrQp8u2EGeI/AAAAAAAAA0Q/JQeIMTFUdJ8/s320/modified.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Below are the steps:&lt;br /&gt;
1. Install &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/"&gt;Greasemonkey&lt;/a&gt; plugin&lt;br /&gt;
2. Install script &lt;a href="http://userscripts.org/scripts/show/116888"&gt;"Google Reader - Compact Design"&lt;/a&gt; (this script make interface more compact thus give you more space to read)&lt;br /&gt;
3. Install &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/stylish/"&gt;Stylish&lt;/a&gt; plugin&lt;br /&gt;
4. Install user style &lt;a href="http://userstyles.org/styles/12640/google-reader-revert"&gt;"Google Reader Revert"&lt;/a&gt; (to get back the light blue theme)&lt;br /&gt;
&lt;br /&gt;
So far this 2 scripts do not conflict with each other. Feel free to try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2587853689066736754?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QR-Gv6yVQUkvKA-wOYihEz10Rgc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QR-Gv6yVQUkvKA-wOYihEz10Rgc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QR-Gv6yVQUkvKA-wOYihEz10Rgc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QR-Gv6yVQUkvKA-wOYihEz10Rgc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=5rGA10DAyYY:UA_zKXX9Abs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=5rGA10DAyYY:UA_zKXX9Abs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=5rGA10DAyYY:UA_zKXX9Abs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=5rGA10DAyYY:UA_zKXX9Abs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=5rGA10DAyYY:UA_zKXX9Abs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=5rGA10DAyYY:UA_zKXX9Abs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=5rGA10DAyYY:UA_zKXX9Abs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2011/11/revert-to-old-google-reader-lets.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-slGEjYW7s2U/TrQp64KnqaI/AAAAAAAAA0I/_XmdkYjZ8uM/s72-c/original.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2120338346045801344</guid><pubDate>Sat, 19 Mar 2011 06:27:00 +0000</pubDate><atom:updated>2011-03-19T14:27:09.117+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>JQuery UI: Datepicker with Month and Year only</title><description>This can be done by hiding the calendar via some CSS trick:&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/877276.js"&gt; &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2120338346045801344?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1Q4T9bzMtGFPr3LLqRbTLtY1ozI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Q4T9bzMtGFPr3LLqRbTLtY1ozI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1Q4T9bzMtGFPr3LLqRbTLtY1ozI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1Q4T9bzMtGFPr3LLqRbTLtY1ozI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=VHX6JvlyzqM:ibCJt8Llye8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=VHX6JvlyzqM:ibCJt8Llye8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=VHX6JvlyzqM:ibCJt8Llye8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=VHX6JvlyzqM:ibCJt8Llye8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=VHX6JvlyzqM:ibCJt8Llye8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=VHX6JvlyzqM:ibCJt8Llye8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=VHX6JvlyzqM:ibCJt8Llye8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2011/03/jquery-ui-datepicker-with-month-and.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-4625228805405653282</guid><pubDate>Sat, 19 Feb 2011 06:20:00 +0000</pubDate><atom:updated>2011-02-19T14:20:55.024+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>JQuery UI: eliminate "stop running this script?" warning in IE</title><description>In IE, when the Javascript on the page take too long duration to execute, the browser will popup a warning of "Stop running this scripts?"&lt;br /&gt;
&lt;br /&gt;
In order to eliminate the warning, we need to hint the browser that the script is not infinitely running, by having some pause via Javascript setTimeout method.&lt;br /&gt;
&lt;br /&gt;
However, for Javascript framework such as JQuery that use selector and method chaining extensively, Just setTimeout alone will not help much.&lt;br /&gt;
&lt;br /&gt;
We will need to slice the elements list from selector into few smaller batches, before chain it to the next method.&lt;br /&gt;
&lt;br /&gt;
Below is the sample code snippet:&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/834867.js?file=gistfile1.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Feel free to share if you have a more elegant approach to this problem. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-4625228805405653282?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WZSOqBue0SStDNcg89hYZ22Mugg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WZSOqBue0SStDNcg89hYZ22Mugg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WZSOqBue0SStDNcg89hYZ22Mugg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WZSOqBue0SStDNcg89hYZ22Mugg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_5U0GfW13J4:B2SRxds84aU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=_5U0GfW13J4:B2SRxds84aU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_5U0GfW13J4:B2SRxds84aU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=_5U0GfW13J4:B2SRxds84aU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_5U0GfW13J4:B2SRxds84aU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=_5U0GfW13J4:B2SRxds84aU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_5U0GfW13J4:B2SRxds84aU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2011/02/jquery-ui-eliminate-stop-running-this.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-5905014300099518012</guid><pubDate>Sat, 27 Nov 2010 14:18:00 +0000</pubDate><atom:updated>2010-11-27T22:18:08.926+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tool</category><title>Introducing feed2PDF</title><description>As the name implied, &lt;a href="http://feed2pdf.appspot.com/"&gt;feed2PDF&lt;/a&gt; is an application that convert ATOM/RSS feed into PDF files. It is built on top of &lt;a href="http://joliprint.com/"&gt;Joliprint&lt;/a&gt;, with enhancement of merging PDF generated from each feed item into 1 PDF file.&lt;br /&gt;
&lt;br /&gt;
Hope you found this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-5905014300099518012?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u9vZuR4OI-RAqQHIHVCgN0iVjKg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u9vZuR4OI-RAqQHIHVCgN0iVjKg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u9vZuR4OI-RAqQHIHVCgN0iVjKg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u9vZuR4OI-RAqQHIHVCgN0iVjKg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=sm4LtJ4YwuQ:qSSWu8MQuK8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=sm4LtJ4YwuQ:qSSWu8MQuK8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=sm4LtJ4YwuQ:qSSWu8MQuK8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=sm4LtJ4YwuQ:qSSWu8MQuK8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=sm4LtJ4YwuQ:qSSWu8MQuK8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=sm4LtJ4YwuQ:qSSWu8MQuK8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=sm4LtJ4YwuQ:qSSWu8MQuK8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2010/11/introducing-feed2pdf.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-8425650382516176279</guid><pubDate>Sun, 08 Aug 2010 04:57:00 +0000</pubDate><atom:updated>2010-08-08T12:57:35.833+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Split String with Empty Trailling Tokens in Java</title><description>The "-1" do the tricks:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;String[] stringTokens= dataString.split(",", -1);&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-8425650382516176279?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pYfPAL_Z9zuT13LCnbB0d7ng-m4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pYfPAL_Z9zuT13LCnbB0d7ng-m4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pYfPAL_Z9zuT13LCnbB0d7ng-m4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pYfPAL_Z9zuT13LCnbB0d7ng-m4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=diZRFImcW5Q:j5b23Mb58mw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=diZRFImcW5Q:j5b23Mb58mw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=diZRFImcW5Q:j5b23Mb58mw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=diZRFImcW5Q:j5b23Mb58mw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=diZRFImcW5Q:j5b23Mb58mw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=diZRFImcW5Q:j5b23Mb58mw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=diZRFImcW5Q:j5b23Mb58mw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2010/08/split-string-with-empty-trailling.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-1570318018677950917</guid><pubDate>Sun, 25 Apr 2010 06:47:00 +0000</pubDate><atom:updated>2010-04-25T14:47:32.423+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><category domain="http://www.blogger.com/atom/ns#">Groovy</category><title>Print Directory Tree with Groovy (with closure recursion)</title><description>While looking for a script that display directory tree, I came across this &lt;a href="http://groovy-almanac.org/directory-contents-as-ascii-tree/"&gt;Groovy script&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The code look just fine but it don't work (I test it with Groovy 1.7). After some google, I found that this is due to the closure as a first class object in Groovy, it can't be call within the closure itself.&lt;br /&gt;
&lt;br /&gt;
And below is the solution:&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="java:nogutter"&gt;def listRecursivly

listRecursivly = { file, arg -&amp;gt;
    println "${'|  ' * arg}`- ${file.getName()}\\"
    file.eachFile() {f -&amp;gt;
        if(f.directory) {
            listRecursivly(f,(arg + 1))
        } else {
            println "${'|  ' * (arg + 1)}`- ${f.getName()}"
        }
    }
}

listRecursivly (new File("."),0)
&lt;/pre&gt;&lt;br /&gt;
The little trick here is to define and initialize the closure in 2 separate lines.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/63106ce6-8a28-4ad0-9616-fcfb3e859071/" title="Reblog this post [with Zemanta]"&gt;&lt;img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=63106ce6-8a28-4ad0-9616-fcfb3e859071" alt="Reblog this post [with Zemanta]"&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-1570318018677950917?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lwlPlbncvH0GTlKw3TsjOygQ9Qk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lwlPlbncvH0GTlKw3TsjOygQ9Qk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lwlPlbncvH0GTlKw3TsjOygQ9Qk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lwlPlbncvH0GTlKw3TsjOygQ9Qk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=FEGsFDLiPMg:Af7Vyb3R88g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=FEGsFDLiPMg:Af7Vyb3R88g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=FEGsFDLiPMg:Af7Vyb3R88g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=FEGsFDLiPMg:Af7Vyb3R88g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=FEGsFDLiPMg:Af7Vyb3R88g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=FEGsFDLiPMg:Af7Vyb3R88g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=FEGsFDLiPMg:Af7Vyb3R88g:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2010/04/print-directory-tree-with-groovy-with.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-5632434062224116389</guid><pubDate>Fri, 15 Jan 2010 13:53:00 +0000</pubDate><atom:updated>2010-01-15T21:53:00.404+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Scan File with AVG 8.5 in Windows Live Messenger</title><description>It is a bit tricky:&lt;br /&gt;&lt;br /&gt;1. Create a batch file (said ScanAVG.bat) in your AVG installation directory:&lt;br /&gt;2. Edit the batch file:&lt;br /&gt;&lt;pre name="code" class="js:nogutter"&gt;&lt;br /&gt;@echo off&lt;br /&gt;"C:\Program Files\AVG\AVG8\avgscanx.exe" /SCAN=%1 /HEUR /ARC /PUP /CLEAN&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. In Live Messenger, Tools &gt; Options &gt; File Transfer&lt;br /&gt;4. Check "Scan files for viruses using:"&lt;br /&gt;5. Fill in the path to your batch file. (i.e. "C:\Program Files\AVG\AVG8\ScanAVG.bat")&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nD7XTTvHIvo/S0syE1rSqJI/AAAAAAAAAsE/LsyR6Iuvr4o/s1600-h/msn_avg.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 277px; height: 320px;" src="http://3.bp.blogspot.com/_nD7XTTvHIvo/S0syE1rSqJI/AAAAAAAAAsE/LsyR6Iuvr4o/s320/msn_avg.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5425485234807416978" /&gt;&lt;/a&gt;&lt;br /&gt;Reference: http://forums.techguy.org/general-security/707127-solved-avg-8-free-windows-2.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-5632434062224116389?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-L9v3JP7kvDDy3qsRh7DvGdFs0o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-L9v3JP7kvDDy3qsRh7DvGdFs0o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-L9v3JP7kvDDy3qsRh7DvGdFs0o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-L9v3JP7kvDDy3qsRh7DvGdFs0o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=RkBgkuCwZWg:4MrbxYKR_T8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=RkBgkuCwZWg:4MrbxYKR_T8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=RkBgkuCwZWg:4MrbxYKR_T8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=RkBgkuCwZWg:4MrbxYKR_T8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=RkBgkuCwZWg:4MrbxYKR_T8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=RkBgkuCwZWg:4MrbxYKR_T8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=RkBgkuCwZWg:4MrbxYKR_T8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2010/01/scan-file-with-avg-85-in-windows-live.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_nD7XTTvHIvo/S0syE1rSqJI/AAAAAAAAAsE/LsyR6Iuvr4o/s72-c/msn_avg.JPG" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-4656314699322707617</guid><pubDate>Sat, 09 Jan 2010 01:26:00 +0000</pubDate><atom:updated>2010-02-25T22:03:43.490+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><category domain="http://www.blogger.com/atom/ns#">ActiveMQ</category><title>Send Message to ActiveMQ via WGET</title><description>In &lt;a class="zem_slink" href="http://activemq.apache.org" title="Apache ActiveMQ" rel="homepage"&gt;ActiveMQ&lt;/a&gt; website, it does show &lt;a href="http://activemq.apache.org/rest.html"&gt;the steps of consuming message from ActiveMQ via WGET&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to produce message and send into ActiveMQ queue, here is the command:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;wget --post-file=message.txt http://localhost:8161/demo/message/MyQueue?type=queue&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Where the message.txt is something like this:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;body=the test message you would like to submit.&lt;/blockquote&gt;&lt;/div&gt;  &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/4aaf83cd-c8be-4b3e-a8dd-d5811026e7ec/" title="Reblog this post [with Zemanta]"&gt;&lt;img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=4aaf83cd-c8be-4b3e-a8dd-d5811026e7ec" alt="Reblog this post [with Zemanta]" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-4656314699322707617?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kwvOGBe7I77AX20KIMAaBPx5xk4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kwvOGBe7I77AX20KIMAaBPx5xk4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kwvOGBe7I77AX20KIMAaBPx5xk4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kwvOGBe7I77AX20KIMAaBPx5xk4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=JohW4Mb7tsY:qZRrKBGFALI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=JohW4Mb7tsY:qZRrKBGFALI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=JohW4Mb7tsY:qZRrKBGFALI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=JohW4Mb7tsY:qZRrKBGFALI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=JohW4Mb7tsY:qZRrKBGFALI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=JohW4Mb7tsY:qZRrKBGFALI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=JohW4Mb7tsY:qZRrKBGFALI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2010/01/send-message-to-activemq-via-wget.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2523506969703459664</guid><pubDate>Mon, 23 Nov 2009 14:28:00 +0000</pubDate><atom:updated>2009-11-23T22:50:57.356+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Gant</category><title>Gant: OutOfMemoryError</title><description>Today just hit an OutOfMemoryError when using &lt;a href="http://gant.codehaus.org/"&gt;Gant&lt;/a&gt; build script to compile my code.&lt;br /&gt;&lt;br /&gt;Google for way to set heap size for Gant, but in the end found the solution by set it in JAVA_OPTS.&lt;br /&gt;&lt;pre name="code" class="sql:nogutter"&gt;set JAVA_OPTS="-Xmx512M"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2523506969703459664?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zr-rOxu4CQnOQHGWVGkY8UCU8CE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zr-rOxu4CQnOQHGWVGkY8UCU8CE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zr-rOxu4CQnOQHGWVGkY8UCU8CE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zr-rOxu4CQnOQHGWVGkY8UCU8CE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=72cgykzfffU:5B_pH6suqR4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=72cgykzfffU:5B_pH6suqR4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=72cgykzfffU:5B_pH6suqR4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=72cgykzfffU:5B_pH6suqR4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=72cgykzfffU:5B_pH6suqR4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=72cgykzfffU:5B_pH6suqR4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=72cgykzfffU:5B_pH6suqR4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2009/11/gant-outofmemoryerror.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2032684276535071741</guid><pubDate>Mon, 07 Sep 2009 01:47:00 +0000</pubDate><atom:updated>2009-09-07T09:55:39.595+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><category domain="http://www.blogger.com/atom/ns#">Tomcat</category><title>Redirect Tomcat console output to log file</title><description>We know using proper logging library instead of System.out is important. But when there are a legacy application that still using the System.out and System.err, it will be good to be able to pipe it into file for troubleshooting.&lt;br /&gt;&lt;br /&gt;The solution is set the swallowOutput="true" in Tomcat context of your webapp. Then this will pipe the stdout and stderr into the logger configured in the same context.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2032684276535071741?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MDKoFqYEDL3WLb8HuHc9Kh_gmzw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MDKoFqYEDL3WLb8HuHc9Kh_gmzw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MDKoFqYEDL3WLb8HuHc9Kh_gmzw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MDKoFqYEDL3WLb8HuHc9Kh_gmzw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=gwsrazYFVyA:JuKrFCeBIfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=gwsrazYFVyA:JuKrFCeBIfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=gwsrazYFVyA:JuKrFCeBIfs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=gwsrazYFVyA:JuKrFCeBIfs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=gwsrazYFVyA:JuKrFCeBIfs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=gwsrazYFVyA:JuKrFCeBIfs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=gwsrazYFVyA:JuKrFCeBIfs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2009/09/redirect-tomcat-console-output-to-log.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-4468626766006951858</guid><pubDate>Mon, 15 Jun 2009 14:48:00 +0000</pubDate><atom:updated>2009-06-15T23:20:51.512+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><title>ERROR 1 (HY000) at line 1: Can't create/write to file</title><description>MySQL SELECT statement allowed us to pipe the query result in to a file via SELECT ... INTO OUTFILE. It work just fine for me most of the time, until recently I hit this error:&lt;br /&gt;&lt;blockquote&gt;ERROR 1 (HY000) at line 1: Can't create/write to file '\home\myuser\my_output_file.txt' (Errcode: 2) mv: cannot stat `/home/myuser/my_output_file.txt': No such file or directory &lt;/blockquote&gt;The first thing come to my mind is the problem of file permission, so I grant 777 permission to my output directory. But the problem still exist.&lt;br /&gt;&lt;br /&gt;Then I check the Mysql username I use, and found that it was granted with FILE permission correctly.&lt;br /&gt;&lt;br /&gt;Then I start to google on this error code, and most of the search result point to similars causes.&lt;br /&gt;&lt;br /&gt;So I read again the &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/select.html"&gt;documentation of MySQL&lt;/a&gt;, and I found this:&lt;br /&gt;&lt;blockquote&gt;The SELECT ... INTO OUTFILE 'file_name' form of SELECT writes the selected rows to a file. The file is created on the server host, so you must have the FILE privilege to use this syntax.&lt;/blockquote&gt;And the keyword is "&lt;span style="font-weight: bold;"&gt;server host&lt;/span&gt;". I made wrong assumption that it will write file to the server that execute the SELECT ... INTO OUTFILE.&lt;br /&gt;&lt;br /&gt;And the workaround is simple, just change my SELECT statement by remove the OUTFILE portion. And pipe the query to file from the MySQL command line&lt;br /&gt;&lt;blockquote&gt;mysql -u myuser -ppassword -h remotehost mydb &amp;lt; myquery.sql &amp;gt; my_output_file.txt&lt;/blockquote&gt;Reading documentation is bored but important :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-4468626766006951858?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3Z28iZsFXmtaLNpRqUOJh4XjDyQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Z28iZsFXmtaLNpRqUOJh4XjDyQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3Z28iZsFXmtaLNpRqUOJh4XjDyQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Z28iZsFXmtaLNpRqUOJh4XjDyQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=WFUodgz2zDM:qj2AhNtJA7A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=WFUodgz2zDM:qj2AhNtJA7A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=WFUodgz2zDM:qj2AhNtJA7A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=WFUodgz2zDM:qj2AhNtJA7A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=WFUodgz2zDM:qj2AhNtJA7A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=WFUodgz2zDM:qj2AhNtJA7A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=WFUodgz2zDM:qj2AhNtJA7A:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2009/06/error-1-hy000-at-line-1-cant.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-8716594023175376300</guid><pubDate>Sun, 19 Apr 2009 11:17:00 +0000</pubDate><atom:updated>2009-04-19T19:19:09.338+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">guide</category><title>Passwordless SSH login via Public Key Authentication</title><description>SSH login with password authentication is often a problem for shell script that run without human interaction. One of the option by simulating user input via some &lt;a href="http://expect.nist.gov/"&gt;Expect&lt;/a&gt; script. While another option is to setup certification based authentication.&lt;br /&gt;&lt;br /&gt;Below is the steps:&lt;br /&gt;&lt;br /&gt;1. SSH to client host (said with username 'myuser')&lt;br /&gt;2. Generate keys at client host, press 'Enter' while it prompt for key location and passphrase.:&lt;br /&gt;&lt;pre name="code" class="sql:nogutter"&gt;&lt;br /&gt;$ ssh-keygen -t rsa&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. Upload the public key generated (~/.ssh/id_rsa.pub) to remote host home directory (said username 'remoteuser')&lt;br /&gt;3. SSH to the remote host with same username ('remoteuser'), create the .ssh folder if not exist&lt;br /&gt;&lt;pre name="code" class="sql:nogutter"&gt;&lt;br /&gt;$ cd ~&lt;br /&gt;$ mkdir .ssh&lt;br /&gt;$ chmod 700 .ssh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. Import public key into authorized_keys&lt;br /&gt;&lt;pre name="code" class="sql:nogutter"&gt;&lt;br /&gt;$ cat id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys&lt;br /&gt;$ chmod 600 ~/.ssh/*&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now when the 'myuser' at client host SSH to remote host with username 'remoteuser', it will not prompt for password anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-8716594023175376300?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oyfLRNb-BVcxARpWmKfymIEz2Mk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oyfLRNb-BVcxARpWmKfymIEz2Mk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oyfLRNb-BVcxARpWmKfymIEz2Mk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oyfLRNb-BVcxARpWmKfymIEz2Mk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=vXRxB2oGJlI:ZfhSsN3ah2k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=vXRxB2oGJlI:ZfhSsN3ah2k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=vXRxB2oGJlI:ZfhSsN3ah2k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=vXRxB2oGJlI:ZfhSsN3ah2k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=vXRxB2oGJlI:ZfhSsN3ah2k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=vXRxB2oGJlI:ZfhSsN3ah2k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=vXRxB2oGJlI:ZfhSsN3ah2k:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2009/04/passwordless-ssh-login-via-public-key.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-6437705341431349181</guid><pubDate>Thu, 05 Mar 2009 14:54:00 +0000</pubDate><atom:updated>2009-03-05T23:06:08.628+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Duplicate log in log4j</title><description>If you have log4j configured as below, you will notice that log entry from "yourLogger" will duplicate in appender&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="css:nogutter"&gt;&lt;br /&gt;log4j.rootLogger=info, stdout&lt;br /&gt;log4j.logger.yourLogger=info, stdout&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To solve this, just change your configuration to:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="css:nogutter"&gt;&lt;br /&gt;log4j.rootLogger=info, stdout&lt;br /&gt;log4j.logger.yourLogger=info, stdout&lt;br /&gt;log4j.additivity.yourLogger=false&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-6437705341431349181?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aux6JCwygeuB0siZwyDrjjHdkmU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aux6JCwygeuB0siZwyDrjjHdkmU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aux6JCwygeuB0siZwyDrjjHdkmU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aux6JCwygeuB0siZwyDrjjHdkmU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=uH_xL0uwuvg:fIIeLemyZNQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=uH_xL0uwuvg:fIIeLemyZNQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=uH_xL0uwuvg:fIIeLemyZNQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=uH_xL0uwuvg:fIIeLemyZNQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=uH_xL0uwuvg:fIIeLemyZNQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=uH_xL0uwuvg:fIIeLemyZNQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=uH_xL0uwuvg:fIIeLemyZNQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2009/03/duplicate-log-in-log4j.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-6482947492904206980</guid><pubDate>Thu, 01 Jan 2009 08:09:00 +0000</pubDate><atom:updated>2009-01-01T16:19:57.418+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">reading list</category><title>Reading List: Dec 2008 Wrapup</title><description>&lt;a href="http://chaoticjava.com/posts/io-performance-tar-file-bytes/" rel="bookmark" title="Permanent Link to IO performance - Tar vs. File vs. Byte streams"&gt;IO performance - Tar vs. File vs. Byte streams&lt;/a&gt;&lt;br /&gt;Benchmark that show TAR file processing as a good alternative for better performance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/news/2008/12/Google-Mock"&gt;Google Has Open-Sourced Their C++ Mocking Framework&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/Interviews/studentdevs/index.html"&gt;Top Java Developers Offer Advice to Students&lt;/a&gt;&lt;br /&gt;11 Top Java developers sharing their experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-6482947492904206980?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ztf3d5_1pR8iwDarkZtYTVqci6A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ztf3d5_1pR8iwDarkZtYTVqci6A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ztf3d5_1pR8iwDarkZtYTVqci6A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ztf3d5_1pR8iwDarkZtYTVqci6A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=-fabb5M1TdY:n8P55RuofVk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=-fabb5M1TdY:n8P55RuofVk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=-fabb5M1TdY:n8P55RuofVk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=-fabb5M1TdY:n8P55RuofVk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=-fabb5M1TdY:n8P55RuofVk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=-fabb5M1TdY:n8P55RuofVk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=-fabb5M1TdY:n8P55RuofVk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2009/01/reading-list-dec-2008-wrapup.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-6852681708495569264</guid><pubDate>Sat, 27 Dec 2008 09:30:00 +0000</pubDate><atom:updated>2008-12-27T17:40:44.057+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Axis2 WSDL2Java error for SOAP Encoding</title><description>Recently had hit the SchemaCompilationException when using Axis2 wsdl2java to generate client stub from a WSDL file.&lt;br /&gt;&lt;br /&gt;After some google, had found &lt;a href="http://www.nabble.com/WSDL2Java-error-td20594340.html"&gt;this page&lt;/a&gt; is describe same problem as what I face. And the reason for the exception is due to Axis2 do not support SOAP Encoding.&lt;br /&gt;&lt;br /&gt;Fortunately after a while, my colleague had found the solution. Instead of using ADB for data binding, use XMLBeans. Below is example of the command:&lt;br /&gt;&lt;br /&gt;wsdl2java -uri myService.wsdl -d xmlbeans&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-6852681708495569264?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pfzeukc7jJDtYK6vAGI8H7RuH_s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pfzeukc7jJDtYK6vAGI8H7RuH_s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pfzeukc7jJDtYK6vAGI8H7RuH_s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pfzeukc7jJDtYK6vAGI8H7RuH_s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=BPjZ4FCqdk0:Rz3wxp-ZVPk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=BPjZ4FCqdk0:Rz3wxp-ZVPk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=BPjZ4FCqdk0:Rz3wxp-ZVPk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=BPjZ4FCqdk0:Rz3wxp-ZVPk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=BPjZ4FCqdk0:Rz3wxp-ZVPk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=BPjZ4FCqdk0:Rz3wxp-ZVPk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=BPjZ4FCqdk0:Rz3wxp-ZVPk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/12/axis2-wsdl2java-error-for-soap-encoding.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2563182081749223514</guid><pubDate>Sun, 30 Nov 2008 01:00:00 +0000</pubDate><atom:updated>2008-11-30T09:00:01.159+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">reading list</category><title>Reading List: Nov 2008 Wrapup</title><description>&lt;a href="http://www.infoq.com/news/2008/11/microsoft-joins-amqp"&gt;Microsoft joins AMQP Working Group&lt;/a&gt;&lt;br /&gt;Microsoft already joins AMQP, so when will Sun?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.springsource.com/2008/11/11/more-weapons-for-the-war-on-complexity-springsource-acquires-groovygrails-leader/"&gt;More Weapons for the War on Complexity: SpringSource Acquires Groovy/Grails Leader&lt;/a&gt;&lt;br /&gt;After acquire Covalent, SpringSource acquires G2One.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://broadcast.oreilly.com/2008/11/interview-with-jason-hunter-of.html"&gt;Interview with Jason Hunter of MarkMail.org&lt;/a&gt;&lt;br /&gt;Interview with Jason Hunter about the MarkMail.org and its architecture to scale to its terabytes data.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/news/2008/11/Database-Martin-Fowler"&gt;Martin Fowler see a Thaw in Frozen Thinking about Data Storage&lt;/a&gt;&lt;br /&gt;Besides the dominant RDBMS, Martin Fowler point out that RISC RDBMS and document-oriented distributed database can be an alternative for certain scenario.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2563182081749223514?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pyw6kS_mxrSaxbRENIXvaMC9ngM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pyw6kS_mxrSaxbRENIXvaMC9ngM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pyw6kS_mxrSaxbRENIXvaMC9ngM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pyw6kS_mxrSaxbRENIXvaMC9ngM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=elIbzCPnyks:-GKFOxwauNc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=elIbzCPnyks:-GKFOxwauNc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=elIbzCPnyks:-GKFOxwauNc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=elIbzCPnyks:-GKFOxwauNc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=elIbzCPnyks:-GKFOxwauNc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=elIbzCPnyks:-GKFOxwauNc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=elIbzCPnyks:-GKFOxwauNc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/11/reading-list-nov-2008-wrapup.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-7503529384844407300</guid><pubDate>Fri, 14 Nov 2008 13:16:00 +0000</pubDate><atom:updated>2008-11-14T21:31:23.432+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Java: convert UCS2 to UTF-8</title><description>While convert UCS2 into UTF-8, I hit UnsupportedEncodingException. So I use UTF-16 instead and it work well (at least till the time I write this post):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;public String ucs2ToUTF8(byte[] ucs2Bytes) throws UnsupportedEncodingException{&lt;br /&gt;&lt;br /&gt;    String unicode = new String(ucs2Bytes, "UTF-16");&lt;br /&gt;   &lt;br /&gt;    String utf8 = new String(unicode.getBytes("UTF-8"), "Cp1252");&lt;br /&gt;   &lt;br /&gt;    return utf8;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-7503529384844407300?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i3pOKwT7TAD14_pXORyoWuK1BxE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i3pOKwT7TAD14_pXORyoWuK1BxE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i3pOKwT7TAD14_pXORyoWuK1BxE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i3pOKwT7TAD14_pXORyoWuK1BxE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=df5dE8q_veQ:4HNPZlqEJ28:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=df5dE8q_veQ:4HNPZlqEJ28:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=df5dE8q_veQ:4HNPZlqEJ28:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=df5dE8q_veQ:4HNPZlqEJ28:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=df5dE8q_veQ:4HNPZlqEJ28:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=df5dE8q_veQ:4HNPZlqEJ28:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=df5dE8q_veQ:4HNPZlqEJ28:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/11/java-convert-ucs2-to-utf-8.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2207901894770106172</guid><pubDate>Sat, 01 Nov 2008 11:23:00 +0000</pubDate><atom:updated>2008-11-01T19:32:07.750+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Duplicate Underscore in XML generated by XStream</title><description>When using &lt;a href="http://xstream.codehaus.org/"&gt;XStream&lt;/a&gt; to serialise Java object into XML, alias name with undercore (_) will get duplicate. For example, "first_name" will be serialised as "first__name".&lt;br /&gt;&lt;br /&gt;The reason is explained in their &lt;a href="http://xstream.codehaus.org/faq.html#XML_double_underscores"&gt;FAQ&lt;/a&gt; and the workaround is to provide your own XmlFriendlyReplacer. However, it do not give any example. So here is the example:&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;// replace $ with "ddd"&lt;br /&gt;// replace underscore with underscore&lt;br /&gt;XmlFriendlyReplacer replacer = new XmlFriendlyReplacer("ddd", "_");&lt;br /&gt;XStream xstream = new XStream(new DomDriver("UTF-8", replacer));&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2207901894770106172?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uDeWv2HLJYCqRi5YchhULwr70X8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uDeWv2HLJYCqRi5YchhULwr70X8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uDeWv2HLJYCqRi5YchhULwr70X8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uDeWv2HLJYCqRi5YchhULwr70X8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=eqK_l4dDld0:P-Z7xtt5hIM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=eqK_l4dDld0:P-Z7xtt5hIM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=eqK_l4dDld0:P-Z7xtt5hIM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=eqK_l4dDld0:P-Z7xtt5hIM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=eqK_l4dDld0:P-Z7xtt5hIM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=eqK_l4dDld0:P-Z7xtt5hIM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=eqK_l4dDld0:P-Z7xtt5hIM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/11/duplicate-underscore-in-xml-generated.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>17</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-8216089927769708089</guid><pubDate>Fri, 31 Oct 2008 01:00:00 +0000</pubDate><atom:updated>2008-11-01T01:09:52.971+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">reading list</category><title>Reading List: Oct 2008 Wrapup</title><description>&lt;a href="http://weblogs.java.net/blog/brucechapman/archive/2008/09/named_parameter.html"&gt;Named Parameters&lt;/a&gt;&lt;br /&gt;Little trick to have named parameters in Plain Old Java.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/javase/6/webnotes/6u10.html"&gt;Java SE 6 Update 10 Released (Officially)&lt;/a&gt;&lt;br /&gt;After a year of beta, Java SE 6 Update 10 released without prior notice of schedule. It focus on improvement of client side technology such as applet, JNLP, and JavaFX.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/presentations/gosling-jvm-lang-summit-keynote"&gt;How The JVM Spec Came To Be&lt;/a&gt;&lt;br /&gt;Presentation from James Gosling. I wish to watch it this weekend.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/Interviews/bloch_effective_08_qa.html"&gt;More Effective Java With Google's Joshua Bloch&lt;/a&gt;&lt;br /&gt;Interview with Joshua Bloch, author of "Effective Java"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-8216089927769708089?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8PdUVJEpJyYBuRPdcCNRW_vY94E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8PdUVJEpJyYBuRPdcCNRW_vY94E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8PdUVJEpJyYBuRPdcCNRW_vY94E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8PdUVJEpJyYBuRPdcCNRW_vY94E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dpoLcA6MHvg:xg0oKRWYn4M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dpoLcA6MHvg:xg0oKRWYn4M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dpoLcA6MHvg:xg0oKRWYn4M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dpoLcA6MHvg:xg0oKRWYn4M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dpoLcA6MHvg:xg0oKRWYn4M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dpoLcA6MHvg:xg0oKRWYn4M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dpoLcA6MHvg:xg0oKRWYn4M:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/10/reading-list-oct-2008-wrapup.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-5632707418615812075</guid><pubDate>Sun, 26 Oct 2008 04:45:00 +0000</pubDate><atom:updated>2008-11-01T20:49:21.888+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><category domain="http://www.blogger.com/atom/ns#">Spring</category><title>Spring: factory method with arguements</title><description>Spring framework is a popular IoC framework. In the documentation, it show examples of instatiate object through constructor, static factory method, and instance factory method.&lt;br /&gt;&lt;br /&gt;However, It do not show the example of factory method with parameters. After some google, below is the trick:&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;public class TestObject{&lt;br /&gt;&lt;br /&gt; private String id;&lt;br /&gt;&lt;br /&gt; private TestObject(String id){&lt;br /&gt;     super();&lt;br /&gt;     this.id = id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static TestObject getInstance(String id){&lt;br /&gt;     return new TestObject(i)&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;bean id="testObject" class="TestObject" factory-method="getInstance"&amp;gt;&lt;br /&gt; &amp;lt;constructor-arg type="java.lang.String" value="object-id-123"/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-5632707418615812075?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wlC5UX2LjpMfJL9uIWzrmaxOZ-I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wlC5UX2LjpMfJL9uIWzrmaxOZ-I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wlC5UX2LjpMfJL9uIWzrmaxOZ-I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wlC5UX2LjpMfJL9uIWzrmaxOZ-I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dMiz8K6avOo:UUJM_s2_TM8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dMiz8K6avOo:UUJM_s2_TM8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dMiz8K6avOo:UUJM_s2_TM8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dMiz8K6avOo:UUJM_s2_TM8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dMiz8K6avOo:UUJM_s2_TM8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dMiz8K6avOo:UUJM_s2_TM8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dMiz8K6avOo:UUJM_s2_TM8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/10/spring-factory-method-with-arguements.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-2924207802838657314</guid><pubDate>Sun, 19 Oct 2008 15:12:00 +0000</pubDate><atom:updated>2008-10-19T23:26:40.269+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Java: Check if Socket Connection Broken</title><description>Most common ways of check if a socket connection to server was broken is by send a heartbeat message to server. However, for application that connect to server that do not support heardbeat, we can check connection by listen to the InputStream:&lt;br /&gt;&lt;br /&gt;('is' refer to java.io.InputStream)&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;int bytesRead = is.read(receiveBuffer, 0, 1024);&lt;br /&gt;     &lt;br /&gt;// this is the trick to identify connection drop&lt;br /&gt;if(bytesRead == -1){&lt;br /&gt;    throw new IOException("byteRead = -1, Connection closed.");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-2924207802838657314?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/g8bvyYPreWBKzxUdbT8YDWN3o2k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g8bvyYPreWBKzxUdbT8YDWN3o2k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/g8bvyYPreWBKzxUdbT8YDWN3o2k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g8bvyYPreWBKzxUdbT8YDWN3o2k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=SzKkddjABZc:lUOBfzMtSlk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=SzKkddjABZc:lUOBfzMtSlk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=SzKkddjABZc:lUOBfzMtSlk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=SzKkddjABZc:lUOBfzMtSlk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=SzKkddjABZc:lUOBfzMtSlk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=SzKkddjABZc:lUOBfzMtSlk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=SzKkddjABZc:lUOBfzMtSlk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/10/java-check-if-socket-connection-broken.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-3032130658275948304</guid><pubDate>Tue, 30 Sep 2008 01:00:00 +0000</pubDate><atom:updated>2008-09-30T09:00:01.679+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">reading list</category><title>Reading List: Sept 2008 Wrapup</title><description>&lt;a href="http://www.ibm.com/developerworks/java/library/j-zerocopy/index.html?ca=drs-"&gt;Efficient data transfer through zero copy&lt;/a&gt;&lt;br /&gt;Explain the Java  technique to improve IO performance on Linux/Unix with benchmark. I had Google for similar benchmark for Windows but have no luck.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/articles/API-Design-Joshua-Bloch"&gt;Joshua Bloch: Bumper-Sticker API Design&lt;/a&gt;&lt;br /&gt;List of best practices on API design, from author of best selling "Effective Java".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/experiencewii"&gt;Wario Land: Shake It&lt;/a&gt;&lt;br /&gt;An youtube video that show you what is "Thinking out of the box".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-3032130658275948304?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RP2N3baBonv_mQ2dhYKB8wqjIUw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RP2N3baBonv_mQ2dhYKB8wqjIUw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RP2N3baBonv_mQ2dhYKB8wqjIUw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RP2N3baBonv_mQ2dhYKB8wqjIUw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=qSBkGyG8Hno:A5BuARrnWZc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=qSBkGyG8Hno:A5BuARrnWZc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=qSBkGyG8Hno:A5BuARrnWZc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=qSBkGyG8Hno:A5BuARrnWZc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=qSBkGyG8Hno:A5BuARrnWZc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=qSBkGyG8Hno:A5BuARrnWZc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=qSBkGyG8Hno:A5BuARrnWZc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/09/reading-list-sept-2008-wrapup.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-8433003170129659526</guid><pubDate>Sun, 28 Sep 2008 02:12:00 +0000</pubDate><atom:updated>2008-09-28T10:19:32.433+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Java: remove non-printable characters from String</title><description>&lt;a href="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html#sum"&gt;Regular expression in Java&lt;/a&gt; is handy to remove non-printable character (control character, ASCII 0 - 31, 127) from a String:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;String truncated = originalString.replaceAll("\\p{Cntrl}", "");&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-8433003170129659526?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dP0v9TWGkIStNkjimqzCxVn_ko4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dP0v9TWGkIStNkjimqzCxVn_ko4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dP0v9TWGkIStNkjimqzCxVn_ko4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dP0v9TWGkIStNkjimqzCxVn_ko4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_cVlGITpG2I:s8WH0qgtj9s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=_cVlGITpG2I:s8WH0qgtj9s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_cVlGITpG2I:s8WH0qgtj9s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=_cVlGITpG2I:s8WH0qgtj9s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_cVlGITpG2I:s8WH0qgtj9s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=_cVlGITpG2I:s8WH0qgtj9s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=_cVlGITpG2I:s8WH0qgtj9s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/09/java-remove-non-printable-characters.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-8919758367643232334</guid><pubDate>Sun, 21 Sep 2008 10:31:00 +0000</pubDate><atom:updated>2008-09-21T18:55:30.516+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">ActiveMQ</category><category domain="http://www.blogger.com/atom/ns#">dirty trick</category><title>ActiveMQ Failover with Async Send</title><description>&lt;a href="http://activemq.apache.org/index.html"&gt;Apche ActiveMQ&lt;/a&gt; is a popular open source  JMS Message Broker. As in version 5.0, it support &lt;a href="http://activemq.apache.org/failover-transport-reference.html"&gt;failover transport&lt;/a&gt;, and &lt;a href="http://activemq.apache.org/async-sends.html"&gt;async send&lt;/a&gt;. But not both at the same time.&lt;br /&gt;&lt;br /&gt;Both connection string below will NOT work:&lt;br /&gt;&lt;br /&gt;failover:(tcp://remotehost:61616,tcp://localhost:61616)?jms.useAsyncSend=true&lt;br /&gt;failover:(tcp://remotehost:61616?jms.useAsyncSend=true,tcp://localhost:61616?jms.useAsyncSend=true)&lt;br /&gt;&lt;br /&gt;So the dirty trick I use is to write my own ContextFactory that override 'org.apache.activemq.jndi.ActiveMQInitialContextFactory'&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;package org.apache.activemq.jndi;&lt;br /&gt;&lt;br /&gt;import java.net.URISyntaxException;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;&lt;br /&gt;import org.apache.activemq.ActiveMQConnectionFactory;&lt;br /&gt;&lt;br /&gt;public class ActiveMQOptimisedSendInitialContextFactory extends ActiveMQInitialContextFactory{&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected ActiveMQConnectionFactory createConnectionFactory(&lt;br /&gt;   Hashtable environment&lt;br /&gt; ) throws URISyntaxException {&lt;br /&gt;  ActiveMQConnectionFactory connFactory = super.createConnectionFactory(environment);&lt;br /&gt;  &lt;br /&gt;  connFactory.setUseAsyncSend(true);&lt;br /&gt;  &lt;br /&gt;  return connFactory;&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected ActiveMQConnectionFactory createConnectionFactory(&lt;br /&gt;   String name,&lt;br /&gt;   Hashtable environment&lt;br /&gt; ) throws URISyntaxException {&lt;br /&gt;  ActiveMQConnectionFactory connFactory =  super.createConnectionFactory(name, environment);&lt;br /&gt;  &lt;br /&gt;  connFactory.setUseAsyncSend(true);&lt;br /&gt;  &lt;br /&gt;  return connFactory;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Using this class as JNDI's 'java.naming.factory.initial', then the connection will be using async send by default, inlude failover transport.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-8919758367643232334?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NrlMyFSVb-4jEqUYEzhJVxti3QY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NrlMyFSVb-4jEqUYEzhJVxti3QY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NrlMyFSVb-4jEqUYEzhJVxti3QY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NrlMyFSVb-4jEqUYEzhJVxti3QY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dyb6o5neO5o:MiHZU114NpE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dyb6o5neO5o:MiHZU114NpE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dyb6o5neO5o:MiHZU114NpE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dyb6o5neO5o:MiHZU114NpE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dyb6o5neO5o:MiHZU114NpE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=dyb6o5neO5o:MiHZU114NpE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=dyb6o5neO5o:MiHZU114NpE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/09/activemq-failover-with-async-send.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-15101094.post-5220585891555779537</guid><pubDate>Wed, 17 Sep 2008 15:18:00 +0000</pubDate><atom:updated>2008-09-17T23:23:11.491+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips and Tricks</category><title>Turn Off Annoying Beep Sound on Windows</title><description>The annoying beep alert of Windows can be disable by editing registry key value. Below are the steps:&lt;br /&gt;&lt;br /&gt;1) Open Registry Editor by: Start &gt; Run &gt; regedit&lt;br /&gt;2) Open the key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Beep&lt;br /&gt;3) Change value of "Start" to 4&lt;br /&gt;4) Restart PC.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nD7XTTvHIvo/SNEgmiOkoPI/AAAAAAAAAUo/yJ44l6zDt9E/s1600-h/disable_beep.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_nD7XTTvHIvo/SNEgmiOkoPI/AAAAAAAAAUo/yJ44l6zDt9E/s320/disable_beep.JPG" alt="" id="BLOGGER_PHOTO_ID_5247010887258382578" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15101094-5220585891555779537?l=thiamteck.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Y0tgZNWkcd_60X7Y8uNLfNypOrk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y0tgZNWkcd_60X7Y8uNLfNypOrk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Y0tgZNWkcd_60X7Y8uNLfNypOrk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y0tgZNWkcd_60X7Y8uNLfNypOrk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=ND8PPVOdZ3E:cpf--_Lw_7w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=ND8PPVOdZ3E:cpf--_Lw_7w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=ND8PPVOdZ3E:cpf--_Lw_7w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=ND8PPVOdZ3E:cpf--_Lw_7w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=ND8PPVOdZ3E:cpf--_Lw_7w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?i=ND8PPVOdZ3E:cpf--_Lw_7w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?a=ND8PPVOdZ3E:cpf--_Lw_7w:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/developers_philosophy?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thiamteck.blogspot.com/2008/09/turn-off-annoying-beep-sound-on-windows.html</link><author>noreply@blogger.com (Thiam Teck (1983 - ?))</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_nD7XTTvHIvo/SNEgmiOkoPI/AAAAAAAAAUo/yJ44l6zDt9E/s72-c/disable_beep.JPG" height="72" width="72" /><thr:total>0</thr:total></item></channel></rss>

