<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9189811149336712938</id><updated>2011-12-23T18:25:28.512-08:00</updated><category term='ruby'/><category term='openid'/><category term='wiki'/><category term='ws'/><category term='support'/><category term='javascript'/><category term='earth'/><category term='m$'/><category term='news'/><category term='encoding'/><category term='mule'/><category term='lament'/><category term='collaboration'/><category term='aflexi'/><category term='perl'/><category term='im'/><category term='community'/><category term='competition'/><category term='event'/><category term='mncc'/><category term='politic'/><category term='freedom'/><category term='troubleshooting'/><category term='ldap'/><category term='spring'/><category term='social-network'/><category term='advertisement'/><category term='performance'/><category term='review'/><category term='work'/><category term='rant'/><category term='database'/><category term='linux'/><category term='meme'/><category term='malaysia'/><category term='me'/><category term='oss'/><category term='office'/><category term='java'/><category term='refactoring'/><category term='jug'/><category term='php'/><category term='engineering'/><category term='ajax'/><category term='howto'/><category term='security'/><category term='esb'/><category term='cop'/><category term='random'/><category term='holiday'/><category term='aop'/><category term='onapp'/><category term='music'/><category term='brain'/><category term='memory'/><category term='geek'/><category term='school'/><category term='barcampmalaysia'/><category term='fashion'/><category term='flex'/><category term='gui'/><category term='tip'/><category term='rest'/><category term='jquery'/><category term='android'/><category term='integration'/><category term='web2.0'/><category term='myjug'/><category term='groovy'/><category term='software'/><category term='crap'/><category term='unix'/><category term='html'/><category term='awards'/><category term='ria'/><category term='project'/><category term='jms'/><category term='architecture'/><category term='fwd'/><category term='web-design'/><category term='ide'/><category term='unit-test'/><category term='open-source'/><category term='json'/><category term='google'/><category term='f1'/><title type='text'>ƴƈ, ∃ and ∀</title><subtitle type='html'>Aflexi, FOSS, Java, Software Engineering, Politics, the Beings and Nothingness.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.yclian.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default?start-index=101&amp;max-results=100'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>135</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-9173731176290107171</id><published>2011-11-28T16:44:00.000-08:00</published><updated>2011-11-29T04:25:14.020-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><title type='text'>ruby-debug on 1.9.3 (Windows)</title><content type='html'>Couldn't get the gems installed yet:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;gt;gem install ruby-debug-base19 --version=0.11.26 -- --configure-options --with-ruby-include="C:\PROGRA~2\Ruby\1.9.3-p0\include\ruby-1.9.1\ruby-1.9.3-p0"&lt;br /&gt;Temporarily enhancing PATH to include DevKit...&lt;br /&gt;Building native extensions.  This could take a while...&lt;br /&gt;ERROR:  Error installing ruby-debug-base19:&lt;br /&gt;        ERROR: Failed to build gem native extension.&lt;br /&gt;&lt;br /&gt;        C:/PROGRA~2/Ruby/1.9.3-p0/bin/ruby.exe extconf.rb --configure-options --with-ruby-include=C:\PROGRA~2\Ruby\1.9.3-p0\include\ruby-1.9.1\ruby-1.9.3-p0&lt;br /&gt;checking for rb_method_entry_t.called_id in method.h... yes&lt;br /&gt;checking for vm_core.h... yes&lt;br /&gt;checking for iseq.h... yes&lt;br /&gt;checking for insns.inc... yes&lt;br /&gt;checking for insns_info.inc... yes&lt;br /&gt;checking for eval_intern.h... yes&lt;br /&gt;checking for struct iseq_line_info_entry in vm_core.h,iseq.h... no&lt;br /&gt;checking for struct iseq_insn_info_entry in vm_core.h,iseq.h... yes&lt;br /&gt;checking for if rb_iseq_compile_with_option was added an argument filepath... yes&lt;br /&gt;creating Makefile&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;generating ruby_debug-i386-mingw32.def&lt;br /&gt;compiling breakpoint.c&lt;br /&gt;breakpoint.c:3:21: fatal error: vm_core.h: No such file or directory&lt;br /&gt;compilation terminated.&lt;br /&gt;make: *** [breakpoint.o] Error 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gem files will remain installed in C:/PROGRA~2/Ruby/1.9.3-p0/lib/ruby/gems/1.9.1/gems/ruby-debug-base19-0.11.26 for inspection.&lt;br /&gt;Results logged to C:/PROGRA~2/Ruby/1.9.3-p0/lib/ruby/gems/1.9.1/gems/ruby-debug-base19-0.11.26/ext/ruby_debug/gem_make.out&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://twitter.com/#%21/luislavena/status/141166374159527936"&gt;Luis Lavena&lt;/a&gt; &lt;a href="http://blog.wyeworks.com/2011/11/1/ruby-1-9-3-and-ruby-debug"&gt;lent me a hand&lt;/a&gt; on this, but that couldn't solve the problem.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Moving your Ruby installation to a path without spaces fixes the problem. I thought &lt;code&gt;PROGRA~2&lt;/code&gt; could work just find. Thanks &lt;a href="http://twitter.com/#%21/luislavena/status/141478213850365952"&gt;Luis once again&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-9173731176290107171?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/9173731176290107171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=9173731176290107171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/9173731176290107171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/9173731176290107171'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2011/11/ruby-debug-on-193-windows.html' title='ruby-debug on 1.9.3 (Windows)'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1250877418582142461</id><published>2011-09-28T20:04:00.000-07:00</published><updated>2011-09-28T20:09:37.204-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='onapp'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><title type='text'>This interviewee would only answer the interview questions if I hired him</title><content type='html'>Over the past 4 days, I dedicated most of my time on resume screening and interviews. It is a boring job but you get some fun out of it sometimes.&lt;br /&gt;&lt;br /&gt;So, here's some fun I collected this morning. An interviewee who thought I would hire him straight without asking any questions related to the job.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;2011/9/29 Z* H* &amp;lt;*@yahoo.com&amp;gt;&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Hi,&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; I will be able to answer all your questions in the first day working at your &lt;br /&gt;&amp;gt; company. &lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; Thanks&lt;br /&gt;&amp;gt; ________________________________&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; From: Yuen-Chi Lian &amp;lt;*@onapp.com&amp;gt;&lt;br /&gt;&amp;gt; To: Z* H* &amp;lt;*@yahoo.com&amp;gt;&lt;br /&gt;&amp;gt; Sent: Thursday, 29 September 2011, 7:43&lt;br /&gt;&amp;gt; Subject: Re: Application for QA Engineer from H*, Z*&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Hello Z*,&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; I would like you to answer the following questions before we proceed.&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt;&amp;nbsp; 1. What does software quality mean to you?&lt;br /&gt;&amp;gt;&amp;nbsp; 2. How... *?&lt;br /&gt;&amp;gt;&amp;nbsp; 3. Do you think... *?&lt;br /&gt;&amp;gt;&amp;nbsp; 4. How... *?&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; Regards,&lt;br /&gt;&amp;gt; Yuen-Chi Lian | www.onapp.com&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; 2011/9/29 Z* H* &lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Good morning,&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; Yes, I am aware of it and willing to work hard, whatever it takes. &lt;br /&gt;&amp;gt; Thanks&lt;br /&gt;&amp;gt; ________________________________&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;gt; From: Yuen-Chi Lian &amp;lt;*@onapp.com&amp;gt;&lt;br /&gt;&amp;gt; To: Z* H* &amp;lt;*@yahoo.com&amp;gt;&lt;br /&gt;&amp;gt; Sent: Wednesday, 28 September 2011, 17:08&lt;br /&gt;&amp;gt; Subject: Re: Application for QA Engineer from H*, Z*&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Hello Z*,&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Just want to be sure, are you aware that this is not a manufacturing QA job &lt;br /&gt;&amp;gt; but an IT QA job?&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Regards,&lt;br /&gt;&amp;gt; Yuen-Chi Lian | www.onapp.com&lt;/pre&gt;&lt;br /&gt;And here's my response&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Date: Thu, 29 Sep 2011 08:33:09 +0800&lt;br /&gt;Subject: Re: Application for QA Engineer from H*, Z*&lt;br /&gt;From: Yuen-Chi Lian &amp;lt;*@onapp.com&amp;gt;&lt;br /&gt;To: Z* H* &amp;lt;*@yahoo.com&amp;gt;&lt;br /&gt;Cc: Malaysia Careers &amp;lt;career-my@onapp.com&amp;gt;&lt;br /&gt;&lt;br /&gt;That's very interesting.&lt;br /&gt;&lt;br /&gt;But, Z*,&lt;br /&gt;&lt;br /&gt;Our team actually built the core logic of the Iron Man's latest armor "Bleeding &lt;br /&gt;Edge", appointed by Stark Industries after going through their professional &lt;br /&gt;selection of industrial partners.&lt;br /&gt;&lt;br /&gt;We're very serious about QA, as the product is used (and will only be used) in &lt;br /&gt;critical missions that define the future of the mankind. I urge you to answer these &lt;br /&gt;questions and hope you understand why and how so serious they are.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Yuen-Chi Lian | www.onapp.com&lt;/pre&gt;&lt;br /&gt;He hasn't yet gotten back to me 'til now. If you have someone better than this guy who is looking for a QA job, or to be a Sysadmin/Java/PHP/Python engineer, let me know at &lt;a href="mailto:%20career-my@onapp.com"&gt;career-my@onapp.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1250877418582142461?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1250877418582142461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1250877418582142461' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1250877418582142461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1250877418582142461'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2011/09/this-interviewee-would-only-answer.html' title='This interviewee would only answer the interview questions if I hired him'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8267197152266397215</id><published>2011-06-30T11:59:00.000-07:00</published><updated>2011-06-30T13:05:14.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jug'/><category scheme='http://www.blogger.com/atom/ns#' term='myjug'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Some JUG Politics or "Why doesn't a community grow under farcism"</title><content type='html'>A group with no/poor leadership is like a ship without a rudder.&lt;br /&gt;&lt;br /&gt;I have been trying to reboot MyJUG (at a tangible level, &lt;a href="http://my-jug.org/"&gt;a site&lt;/a&gt; and some &lt;a href="http://blog.yclian.com/search/label/myjug"&gt;blogs&lt;/a&gt;) for years with no avail, to take lead but got beaten down (continue reading), and when I wanted to talk about some &lt;a href="http://blog.yclian.com/2011/06/mncc-23rd-agm.html"&gt;MNCC&lt;/a&gt; stuff to the group just now, I found out that I was banned.&lt;br /&gt;&lt;br /&gt;MyJUG is established since 1999, founded by &lt;a href="http://www.linkedin.com/profile/view?id=290858&amp;amp;authType=name&amp;amp;authToken=buTi&amp;amp;locale=en_US&amp;amp;pvs=pp&amp;amp;trk=ppro_viewmore"&gt;Loke KS&lt;/a&gt;, owned by Loke, bossed by Loke. Once in a short while, some new faces come and new motivation generated to create new discussions and some ambitious to live up the group and technical talks. Most recently, before 2011, we were told by Loke that he's working something out with Oracle (and now, being the mid of 2011, the group still haven't yet organized a single activity) and looking for volunteers to help out (I have no idea why we have never formed a board or committee to have some balance of power and management, I raised it), and I did,&lt;br /&gt;&lt;blockquote&gt;On Sat, Dec 11, 2010 at 2:34 AM, Yuen-Chi Lian &lt;me@yclian.com&gt; wrote:&lt;br /&gt;&amp;gt; Hi all,&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; I created two polls in Doodle, just click, no hassle registration:&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Vote for new platform&lt;br /&gt;&amp;gt; Vote for next talk&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; I wrote a blog post too, let's make some change to the group for 2011.&lt;/me@yclian.com&gt;&lt;/blockquote&gt;&lt;blockquote&gt;On Sun, Dec 12, 2010 at 8:54 AM, Loke KS &lt;loke.ks@gmail.com&gt; wrote:&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Yuen, why don't you take the lead in organising some talks?&lt;/loke.ks@gmail.com&gt;&lt;/blockquote&gt;Very good, I got a tap on the shoulder to go for it.&lt;br /&gt;&lt;br /&gt;And I moved fast again, including finding a right place to document the activities of the group, to vote for topics, etc. (so I also started a &lt;a href="https://sites.google.com/site/malaysiajug/"&gt;Google Sites&lt;/a&gt;, as the &lt;a href="http://a3.sphotos.ak.fbcdn.net/hphotos-ak-ash4/206389_19982071544_664246544_369905_9418_n.jpg"&gt;earlier work&lt;/a&gt; I did is hosted in my ex-company server). Most importantly, I kept things transparent in the mailing list and opened them for better suggestions.&lt;br /&gt;&lt;br /&gt;Then?&lt;br /&gt;&lt;blockquote&gt;On Wed, Dec 22, 2010 at 9:43 AM, Loke KS &lt;loke.ks@gmail.com&gt; wrote:&lt;br /&gt;&amp;gt; Can you discuss with me first before you take any action on any matter?&lt;/loke.ks@gmail.com&gt;&lt;/blockquote&gt;Come on, &lt;b&gt;what the fuck?&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;On Wed, Dec 22, 2010 at 9:55 AM, Yuen-Chi Lian &lt;me@yclian.com&gt; wrote:&lt;br /&gt;&amp;gt; I was acting based on the votes. I didn't know there was a concern,&lt;br /&gt;&amp;gt; enlighten me.&lt;br /&gt;&lt;br /&gt;On Wed, Dec 22, 2010 at 9:59 AM, Loke KS &lt;loke.ks@gmail.com&gt; wrote:&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; If you want to work as a team, then we work as a team else we work &lt;br /&gt;&amp;gt; individually, separately. What does working in a team means? What if I have &lt;br /&gt;&amp;gt; other plans that I am working with other people?&lt;br /&gt;&lt;br /&gt;On Wed, Dec 22, 2010 at 11:24 AM, Yuen-Chi Lian &lt;me@yclian.com&gt; wrote:&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Then always share with us.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Secret agenda is no longer a weapon but stumbling block of a community. &lt;br /&gt;&amp;gt; Being open and transparent is the initial driving force to start or change a &lt;br /&gt;&amp;gt; community in this era. You can learn from some successful stories, GitHub is &lt;br /&gt;&amp;gt; one, how Apache/Hudson/MySQL/OpenOffice left Oracle is another.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; There's just too much legacy to drag us from moving forward. When we &lt;br /&gt;&amp;gt; sacrifice more individualistic controls over things back to community decision, &lt;br /&gt;&amp;gt; you will see how things can be different.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; I'm sure you get my point. Oracle doesn't.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; It's not about working as a team, but working with the community.&lt;/me@yclian.com&gt;&lt;/loke.ks@gmail.com&gt;&lt;/me@yclian.com&gt;&lt;/blockquote&gt;Things went quiet again, until &lt;a href="http://twitter.com/ebernie"&gt;Bernie&lt;/a&gt; (great Android developer) started similar topic, but Loke, this time, never looked into the problem nor contributed anything practical to realize the members' desire.&lt;br /&gt;&lt;br /&gt;About a week plus ago, I was told that &lt;a href="http://twitter.com/cheeaun"&gt;Chee Aun&lt;/a&gt; is working on &lt;a href="http://connections.my/"&gt;Connections.my&lt;/a&gt;, and thus I brought it up in MyJUG (although I misunderstood what the site is actually for in the beginning, but that's not important) and also mentioned about having a breakaway JUG, as, at that point of time, I was frustrated that Loke still hasn't yet done any real deal with the great Oracle. When emotion goes wrong, bad things can happen - I'm banned: &lt;br /&gt;&lt;blockquote&gt;You have been banned from &lt;a href="http://tech.groups.yahoo.com/group/myjug"&gt;this group&lt;/a&gt; by the group moderator (Yahoo! ID banned: &lt;b&gt;yuenchi.lian&lt;/b&gt;). You may not join the group &lt;b&gt;myjug&lt;/b&gt;.              &lt;/blockquote&gt;I'm not sure if I'm the first one to be banned, but I am seriously tired of dealing with one's fascism (there's only one owner and moderator to maintain the Yahoo! group) but nothing else every time I wanted to realize something.&lt;br /&gt;&lt;br /&gt;So, here's an idea, is anyone up for a breakaway, to start clean, with no boss but the people?&lt;br /&gt;&lt;br /&gt;At the same time, while the old Facebook page is deprecating, I have spawned &lt;a href="http://www.facebook.com/home.php?sk=group_178881862173356"&gt;a new one here&lt;/a&gt;, please join.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8267197152266397215?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8267197152266397215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8267197152266397215' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8267197152266397215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8267197152266397215'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2011/06/some-jug-politics-or-why-doesnt.html' title='Some JUG Politics or &quot;Why doesn&apos;t a community grow under farcism&quot;'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7909386470136611604</id><published>2011-06-30T10:08:00.000-07:00</published><updated>2011-06-30T10:08:00.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='mncc'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>MNCC 23rd AGM</title><content type='html'>It has been quite a while since last blogging, been using Twitter and Weibo to deliver my ideas but not this time.&lt;br /&gt;&lt;br /&gt;I joined the MNCC since almost a year ago, suggested by one of its then-member of council &lt;a href="http://twitter.com/ditesh"&gt;Ditesh&lt;/a&gt;. I have a strong belief that there's something I can contribute to the country through this platform, although nothing real has been done yet.&lt;br /&gt;&lt;br /&gt;The annual meeting was held at Armada Hotel, with its annual report &lt;a href="http://www.mncc.com.my/23AGM2011/index.html"&gt;available here&lt;/a&gt;. And, I remember that we talked about the lack of funds, the low turn-outs to organized conferences and seminars, and most important, the lack of youngsters. I suppose 3 or less fingers can count those who're at or below the age of 30 out of ~40 attendances tonight.&lt;br /&gt;&lt;br /&gt;I do have some opinions but I do not want to provide any analysis on MNCC at this stage to make myself judgmental and critical. Instead, I need to lend some helping hands.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mncc.com.my/"&gt;Take a look at its website&lt;/a&gt;, very 90's, very unattractive. But I was shocked to find out that it has been maintained by Syed, someone who could be double of your age, knows enough of HTML to get the content up.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-soGtsJE4uBU/Tgylbo-epwI/AAAAAAAAAQM/hvniKDQZD9k/s1600/mncc-201106.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://3.bp.blogspot.com/-soGtsJE4uBU/Tgylbo-epwI/AAAAAAAAAQM/hvniKDQZD9k/s320/mncc-201106.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So here comes the purpose of this blog post, I am looking for a volunteer to set up a CMS and administrate the site (hosted at Exabytes according to Syed, but this is not important), the best person who can do this job better than me.&lt;br /&gt;&lt;br /&gt;Anyone?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7909386470136611604?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7909386470136611604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7909386470136611604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7909386470136611604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7909386470136611604'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2011/06/mncc-23rd-agm.html' title='MNCC 23rd AGM'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-soGtsJE4uBU/Tgylbo-epwI/AAAAAAAAAQM/hvniKDQZD9k/s72-c/mncc-201106.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-9079680681043180127</id><published>2010-12-19T06:17:00.000-08:00</published><updated>2010-12-28T05:29:14.044-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Yes, Riding on Linux</title><content type='html'>I received a free WiMAX USB dongle (called the &lt;a href="http://www.yes.my/v2/say-yes/go-dongle.do"&gt;Yes Go&lt;/a&gt;) last Tuesday, given how busy week days usually are, I only managed to &lt;i&gt;really&lt;/i&gt; get it working on my Ubuntu now. In this blog, I am not going write about the Yes site usability, how interesting the speed can go (by the way, if you think 10Mb/s is impressive enough, that's the speed HSDPA can give. WiMAX can run up to 40Mb/s.); Instead, I speak about what I went through getting it to work on my Linux machine.&lt;br /&gt;&lt;br /&gt;Yes Go doesn't have (publicly) a Linux driver (and its source), just like the Clearwire USB dongle and many others. Yes Go is manufactured by Infomark, IMW-U300, which uses GCT chip (&lt;a href="http://www.gctsemi.com/products/wimax-GDM7205.htm"&gt;GDM7205&lt;/a&gt; most likely, with &lt;a href="http://www.freshtelclub.ru/forum/viewtopic.php?f=24&amp;amp;t=54&amp;amp;start=160#p9318"&gt;uClinux.&lt;/a&gt; It can push &lt;b&gt;&amp;gt;30Mbps&lt;/b&gt; of download and &lt;b&gt;6Mbps&lt;/b&gt; of upload):&lt;br /&gt;&lt;br /&gt;(Note: I'm not a Linux hacker, so all I could do is &lt;a href="http://www.draisberghof.de/usb_modeswitch/"&gt;usb_modeswitch&lt;/a&gt; and some simple digging. I'm happy to learn how to grab the image and boot into it when I have the time.) &lt;br /&gt;&lt;blockquote&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ screen /dev/ttyUSB0&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Model name: IMW-U300&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;Manufacturere: INFOMARK&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;%WIMAX MAC: ff:ff:ff:ff:ff:ff&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/dev/usb0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;3Parameter block: version 2 in NVRAM EEPROM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ lsusb | grep 1076&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Bus 001 Device 039: ID 1076:7f00 GCT Semiconductor, Inc.&lt;/span&gt;&lt;/blockquote&gt;Given that (and I-ANAL - I Am Not A Lawyer), &lt;a href="http://lists.gpl-violations.org/pipermail/legal/2010-January/001785.html"&gt;GCT could have violated the GPL&lt;/a&gt; (see also this &lt;a href="http://people.debian.org.tw/%7Echihchun/2010/02/04/gct-tecom-violated-gpl/"&gt;Taiwanese post&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;After hours of research, I contacted &lt;a href="http://twitter.com/YesCare"&gt;@YesCare&lt;/a&gt; for the driver, the case has been escalated and am still pending for solution at the time I'm writing this blog. This left me with one ugly workaround to use Yes Go -- bridging from a virtual machine (I use Sun's/Oracle's VirtualBox) running Windows.&lt;br /&gt;&lt;br /&gt;The basic steps (more discussions in this &lt;a href="http://forum.virtualbox.org/viewtopic.php?f=7&amp;amp;p=142563#p130615"&gt;VirtualBox's forum thread&lt;/a&gt;): &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create an ad-hoc wireless network in NetworkManager.&lt;/li&gt;&lt;li&gt;Add a bridge adapter in VirtualBox, select your wireless LAN (e.g. &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;wlan0&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;Turn off &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;usb_modeswitch&lt;/span&gt; before plugging in the USB dongle. See &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/usb_modeswitch.conf&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Start VirtualBox with &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;root&lt;/span&gt; (or configure &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;fstab&lt;/span&gt; to allow current user to read/write the USB device nodes).&lt;/li&gt;&lt;li&gt;Setup Yes Go, once connected, bridge it with your adapter added earlier.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;That ends a chapter.&lt;br /&gt;&lt;br /&gt;Meanwhile, for preregistered users, today is the last day to activate your account in order to retain your reserved phone number.&lt;br /&gt;&lt;br /&gt;To make myself to really know what I'm going to pay for, I wrote a &lt;a href="http://jsfiddle.net/yclian/TPwbB/embedded/result/"&gt;JS-based calculator&lt;/a&gt; last night using &lt;a href="https://github.com/rlayte/mvc.js"&gt;mvc.js&lt;/a&gt;  (before Yes updated their site with the &lt;a href="http://www.yes.my/v2/why-yes/data-calculator.do"&gt;new calculator&lt;/a&gt; this afternoon)&lt;a href="https://github.com/rlayte/mvc.js"&gt;&lt;/a&gt;. Feel free to fork it with &lt;a href="http://jsfiddle.net/"&gt;jsfiddle&lt;/a&gt; or &lt;a href="http://github.com/yclian/yescalc"&gt;github&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-9079680681043180127?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/9079680681043180127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=9079680681043180127' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/9079680681043180127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/9079680681043180127'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/12/yes-riding-on-linux.html' title='Yes, Riding on Linux'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-770326241075406544</id><published>2010-12-10T10:32:00.000-08:00</published><updated>2010-12-10T10:32:19.709-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='myjug'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>The Malaysian Java User Group can be more than just a mailing list</title><content type='html'>Is simply just a mailing list for years. Continue reading.&lt;br /&gt;&lt;br /&gt;Recently, I received an email (with a few in the loop, not through the &lt;a href="http://tech.groups.yahoo.com/group/myjug/"&gt;mailing list&lt;/a&gt;) from &lt;a href="http://www.linkedin.com/profile/view?id=290858"&gt;Loke&lt;/a&gt; to discuss about some aspects of MyJUG. I found it hard to respond to most posted questions (such as "Best Practices" and "Strengths and Opportunities" of this group), simply because - &lt;i&gt;the cruelest fact&lt;/i&gt; - there's nothing much to describe.&lt;br /&gt;&lt;br /&gt;I join the mailing list about 4 to 5 years ago, when I innocently thought getting to know more people there could get some new hires for my former employer. It doesn't work that way (or at least at the moment), so if you happen to have the same intention, you may want to readjust or quit.&lt;br /&gt;&lt;br /&gt;Every now and then, I whine and whine to some people about the lack of substantive committee to move forward the group, the lack of activities, etc. Then, every now and then, we voted for topics and things go silent. Then, recur.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;StackOverflowError&lt;/span&gt; not yet.&lt;br /&gt;&lt;br /&gt;To run a successful technical/user group seems really hard in Malaysia. &lt;a href="http://foss.org.my/"&gt;FOSS-SM&lt;/a&gt; used to have consistent monthly meetup when &lt;a href="http://twitter.com/aizatto"&gt;Aizat&lt;/a&gt; was active. &lt;a href="http://my.linkedin.com/pub/chee-seng-chua/7/434/690"&gt;Chee Seng&lt;/a&gt; runs the Flex UG (MyFlex) but the number of participants is really low (also given the fact that Flex is barely a killer). Umm, the &lt;a href="http://www.php.net.my/"&gt;PHP UG&lt;/a&gt; seems pretty successful though. Why?&lt;br /&gt;&lt;br /&gt;I don't know.&lt;br /&gt;&lt;br /&gt;The community can change it.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://doodle.com/u3b92d3qr6mp9hrw"&gt;Vote for next topics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://doodle.com/knivbfeha68zqs38"&gt;Vote for new platform&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-770326241075406544?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/770326241075406544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=770326241075406544' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/770326241075406544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/770326241075406544'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/12/malaysian-java-user-group-can-be-more.html' title='The Malaysian Java User Group can be more than just a mailing list'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8074403484758243771</id><published>2010-11-03T10:13:00.000-07:00</published><updated>2010-11-03T10:58:09.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Yes?</title><content type='html'>YTL Communications, a subsidary of YTL Power (&lt;a href="http://finance.yahoo.com/q/bc?s=6742.KL"&gt;YTLPOWR&lt;/a&gt;), will be launching their WiMAX service on the 19th of this month.&lt;br /&gt;&lt;br /&gt;I attended its pre-launch event just now and here're some stuff to highlight to fellow Linux users or Android lovers.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No, there's no official Linux software or drivers and &lt;a href="http://en.wikipedia.org/wiki/Normal_distribution"&gt;I don't see why&lt;/a&gt; they shall release one. But things shall really work &lt;a href="http://ubuntuforums.org/showthread.php?t=929192"&gt;OOTB&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;No, HTC lovers, you can't run &lt;a href="http://en.wikipedia.org/wiki/HTC_Evo_4G"&gt;Evo 4G&lt;/a&gt; on it, as Evo works only with 2.5GHz-2.7GHz WiMAX. In Malaysia, WiMAX is currently deployed with 2.3GHz spectrum; although &lt;a href="http://bigdogdotcom.wordpress.com/2010/10/08/transparency-is-the-way-to-go/"&gt;MCMC recently has granted the 2.6GHz spectrum&lt;/a&gt; - we still gotta wait.&lt;/li&gt;&lt;li&gt;Yes, you have to buy the phones from YTL and given that WiMAX requires no SIM, I am not sure whether that'll encourage vendor locked down and monopoly. My question on this wasn't really answered.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;They are Samsung lovers and the available handset now is &lt;a href="http://reviews.cnet.com/smartphones/samsung-epic-4g-review/"&gt;Samsung Epic 4G&lt;/a&gt;. I don't use and never like a QWERTY phone.&lt;/li&gt;&lt;li&gt;I suppose they have customized their phones with their own software, but custom ROM shall work just fine with all the necessary &lt;a href="http://en.wikipedia.org/wiki/APK_%28file_format%29"&gt;apk&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Yes, Android is the only platform for now. iPhone 4 is not a 4G network phone, yet.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;IMO, within the next two to three years, we won't see 2.6GHz band and &lt;a href="http://en.wikipedia.org/wiki/LTE_Advanced"&gt;LTE&lt;/a&gt; being deployed. That also means, we don't get real 4G 'til that happens. What shall happen in between, it's too hard to tell now.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8074403484758243771?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8074403484758243771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8074403484758243771' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8074403484758243771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8074403484758243771'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/11/yes.html' title='Yes?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-22443215929652849</id><published>2010-10-07T09:46:00.000-07:00</published><updated>2010-10-07T09:46:48.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Zend Debugger &gt; XDebug makes PDT &gt; Netbeans</title><content type='html'>Displaying variable values - including breakdown values of their attributes - of current scope has been the most important thing to my debugging practice.&lt;br /&gt;&lt;br /&gt;AFAIK, Netbeans PHP IDE only supports XDebug. XDebug is known to be &lt;a href="http://www.phpntips.com/xdebug-debug-with-netbeans-on-linux-2010-09/"&gt;unstable with watches and balloons&lt;/a&gt; (and I have had too many crashes experience) and having this defect yields Netbeans useless IMO.&lt;br /&gt;&lt;br /&gt;I use PDT together with XDebug over the past 3 years of active PHP development and for the past few days (finally) I started using Zend Debugger. Then I realized that it has the "problem" of only displaying variables in scope (e.g. function scope), meaning, global variables and &lt;tt&gt;$this&lt;/tt&gt; will not be shown, due to usability and performance concern.&lt;br /&gt;&lt;br /&gt;The fix is pretty simple (after reading &lt;a href="http://forums.zend.com/viewtopic.php?f=59&amp;t=1911#p8134"&gt;this forum response&lt;/a&gt;), just place watches if you want to monitor out-of-scope variables.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-22443215929652849?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/22443215929652849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=22443215929652849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/22443215929652849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/22443215929652849'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/10/zend-debugger-xdebug-makes-pdt-netbeans.html' title='Zend Debugger &gt; XDebug makes PDT &gt; Netbeans'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5423012217526385143</id><published>2010-09-11T18:22:00.000-07:00</published><updated>2010-09-11T18:23:44.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><title type='text'>回张木钦道德论</title><content type='html'>&lt;i&gt;"你有没有感受到，当前我们的社会流行的“比道德更高价值”的东西，就是“反国阵”？道德虽然好，但是还有更好的，就是打倒国阵。打倒国阵是政治目的，不是道德，却是比道德更高的价值。"&lt;br /&gt;&lt;br /&gt;"我们是不是即将进入一个只有政治目标，没有道德价值的世界？"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;在一个道德已被滥用的社会，已被国阵扭曲和掩盖的社会，你可否有反问道德是否还存有其被等量齐观的价值？&lt;br /&gt;&lt;br /&gt;革命，看重的是议程，被应许的是人权与未来。若像你那一般高谈道德，美女间谍就永远派不上用场了。&lt;br /&gt;&lt;br /&gt;这个星期我看了《V煞》整一百遍，在一个人民被贬低，媒体，司法与立法被控制的国家，政权的倒台与改变需要人民的策划与响应（当权者和汉奸最怕）。&lt;br /&gt;&lt;br /&gt;　　艾维： You really think blowing up Parliament's&lt;br /&gt;going to make this country a better place?&lt;br /&gt;&lt;br /&gt;　　V：　There's no certainty, only opportunity.&lt;br /&gt;&lt;br /&gt;暗杀与爆炸听来血腥，毫无道德，但爆响声中却带来了希望与未来。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5423012217526385143?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5423012217526385143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5423012217526385143' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5423012217526385143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5423012217526385143'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/09/blog-post.html' title='回张木钦道德论'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-732850835355710701</id><published>2010-05-17T07:54:00.000-07:00</published><updated>2010-05-17T07:55:35.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Wee, Prove It</title><content type='html'>&lt;blockquote&gt;“I didn't jump ship. I am on my own and now I have more time to concentrate on my constituents.&lt;br /&gt;&lt;br /&gt;“My constituents will see whether what I did was right. I am certain I will be forgiven by history and the next generation,” &lt;a href="http://www.mmail.com.my/content/36560-dont-call-me-childish-says-wee"&gt;he added&lt;/a&gt;.&lt;/blockquote&gt;&lt;br /&gt;It's too early still for me to say that you had done practically nothing for my district, yes, my freaking district.&lt;br /&gt;&lt;br /&gt;I still remember on a Wednesday rainy night, me, a very a young guy at that time attended your cerama in celebration of your move to PKR. Then, a meet-up once speaking about a portal for Wangsa Maju.&lt;br /&gt;&lt;br /&gt;I remember you claimed that in 30 days Wangsa Maju/Setapak will see a change. I saw a small protest on removal of protected trees due to road expansion. I saw you hitting on Yew for the Platinum condominium and land matters. Other than that, I am still awaiting the change.&lt;br /&gt;&lt;br /&gt;Prove it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-732850835355710701?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/732850835355710701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=732850835355710701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/732850835355710701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/732850835355710701'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/05/wee-prove-it.html' title='Wee, Prove It'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-2275158780688489855</id><published>2010-02-22T10:01:00.000-08:00</published><updated>2010-02-22T10:02:12.326-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Some Groovy Class-Loading Notes</title><content type='html'>Was trying to load a resource (*.properties) from the class-path and as you know, class loading can be a PITA at different enviroments (IDEs, build tools, tests, containers).&lt;br /&gt;&lt;br /&gt;Here's the snippet I used, ran with Maven and Eclipse IDE, &lt;tt&gt;target/test-classes&lt;/tt&gt; is in the class-path.&lt;br /&gt;&lt;pre&gt;String name = "aflexi.itest.properties"&lt;br /&gt;&lt;br /&gt;// System CL&lt;br /&gt;println ClassLoader.getSystemClassLoader()&lt;br /&gt;// Uses system or bootstrap CL&lt;br /&gt;println ClassLoader.getSystemResource(name)&lt;br /&gt;&lt;br /&gt;// Caller CL&lt;br /&gt;println ClassLoader.getCallerClassLoader()&lt;br /&gt;println ClassLoader.getCallerClassLoader().getResource(name)&lt;br /&gt;&lt;br /&gt;// Class's class loader. Perfectly fine in both places&lt;br /&gt;println getClass().getClassLoader()&lt;br /&gt;println getClass().getClassLoader().getResource("aflexi.itest.properties")&lt;br /&gt;&lt;br /&gt;// Doesn't work anywhere, the CL is the one of previous, but the name will be resolved as "net/aflexi/cdn/test/itest/aflexi.itest.properties"&lt;br /&gt;println getClass().getClassLoader0()&lt;br /&gt;println getClass().getResource("aflexi.itest.properties")&lt;br /&gt;&lt;br /&gt;// Doesn't work either. Using Groovy's calling class.&lt;br /&gt;println ReflectionUtils.getCallingClass()&lt;br /&gt;println ReflectionUtils.getCallingClass().getResource("aflexi.itest.properties")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And here's the result:&lt;br /&gt;&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Expression / Class Loader&lt;/th&gt;&lt;th&gt;Test 1: Instance&lt;/th&gt;&lt;th&gt;Test 2: Instance&lt;/th&gt;&lt;th&gt;Test 1: Found Resource?&lt;/th&gt;&lt;th&gt;Test 2: Found Resource?&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;ClassLoader.getSystemClassLoader().getResource()&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;sun.misc.Launcher$AppClassLoader@19134f4&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;sun.misc.Launcher$AppClassLoader@19134f4&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;ClassLoader.getCallerClassLoader().getResource()&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;sun.misc.Launcher$AppClassLoader@19134f4&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;org.codehaus.groovy.tools.RootLoader@8965fb&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;getClass().getClassLoader().getResource()&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;groovy.lang.GroovyClassLoader$InnerLoader@14177f3&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;groovy.lang.GroovyClassLoader$InnerLoader@dc0435&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;getClass().getResource()&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;groovy.lang.GroovyClassLoader$InnerLoader@14177f3&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;groovy.lang.GroovyClassLoader$InnerLoader@dc0435&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;ReflectionUtils.getCallingClass().getResource()&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;class cuke4duke.internal.groovy.GroovyLanguage&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;&lt;tt&gt;class groovy.ui.GroovyMain&lt;/tt&gt;&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Take note that, &lt;tt&gt;getClass().getResource()&lt;/tt&gt; uses the same CL instance (otherwise system CL) with &lt;tt&gt;getClass().getClassLoader().getResource()&lt;/tt&gt;. The reason why it failed is that, it resolves the name of the properties file with package name, i.e. &lt;tt&gt;aflexi.itest.properties&lt;/tt&gt; to &lt;tt&gt;net/aflexi/cdn/test/itest/aflexi.itest.properties&lt;/tt&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-2275158780688489855?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/2275158780688489855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=2275158780688489855' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2275158780688489855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2275158780688489855'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/02/some-groovy-class-loading-notes.html' title='Some Groovy Class-Loading Notes'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-357253805963003368</id><published>2010-02-20T08:10:00.000-08:00</published><updated>2010-02-20T08:10:20.417-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>POGO + Singleton + Mixin</title><content type='html'>Something worth sharing (or probably you may suggest me with a better solution) about injection/Mixin on Groovy's object that is being a singleton.&lt;br /&gt;&lt;br /&gt;Let's start off with an example. I have a &lt;tt&gt;Users&lt;/tt&gt; class with a private singleton, e.g.&lt;br /&gt;&lt;pre&gt;@Mixin(Whatever)&lt;br /&gt;class Users{&lt;br /&gt;&lt;br /&gt;  private static Users instance = new Users()&lt;br /&gt;&lt;br /&gt;  def doGetUserByEmail(){}&lt;br /&gt;&lt;br /&gt;  static def getUserByEmail(){&lt;br /&gt;    instance.doGetUserByEmail()&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Unfortunately, this is not working as Users.instance is constructed within the class before Groovy does more thing with its interpreter (at this point, I still have limited knowledge about Groovy, but that's the basic idea). &lt;br /&gt;&lt;br /&gt;So I let Groovy to handle the construction of the singleton for me, with &lt;tt&gt;@Singleton&lt;/tt&gt; - resulted with the same effect.&lt;br /&gt;&lt;br /&gt;However, &lt;tt&gt;@Singleton(lazy = true)&lt;/tt&gt; solves the problem, as the late/lazy instantiation happens on a "ready" POGO class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-357253805963003368?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/357253805963003368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=357253805963003368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/357253805963003368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/357253805963003368'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2010/02/pogo-singleton-mixin.html' title='POGO + Singleton + Mixin'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3449072605144531257</id><published>2009-12-17T21:23:00.000-08:00</published><updated>2009-12-17T21:24:55.271-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>3 Spring Stuff Worth Sharing</title><content type='html'>Firstly, &lt;b&gt;Spring 3.0.0 is released not more than 2 days ago&lt;/b&gt;. Juergen (if you have the habit of reading source code, you shall know him) blogged about the features at &lt;a href="http://blog.springsource.com/2009/12/16/spring-framework-3-0-goes-ga/"&gt;Spring Framework 3.0 goes GA&lt;/a&gt;. I am particularly interested to explore more (possibly make changes to my existing project) in the area of &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java-combining"&gt;@Configuration&lt;/a&gt;, &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/expressions.html"&gt;SpEL&lt;/a&gt;, REST, OXM and &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html#validation-beanvalidation"&gt;validation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I also upgraded my project this morning, with less than 10 lines of code changes to switch the plug from 2.5.6 to 3.0.0 - the compilation errors were some casting issues of generics type - yes, Spring 3 is now compile-time type safe. If you use Maven, you may want to &lt;a href="http://blog.springsource.com/2009/12/02/obtaining-spring-3-artifacts-with-maven/"&gt;read about the pom and repository configurations here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Second-and-thirdly, below are some notes I wrote down in company's intranet. :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Spring Resolves Dependencies and Initializes Accordingly, Not You&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Before that, I thought implementing the &lt;tt&gt;Ordered&lt;/tt&gt; interface could impact the order of which beans shall first be loaded. Then I realized, it doesn't work. &lt;tt&gt;Ordered&lt;/tt&gt; is used.. as far as I can tell right now, two on top of my head: during invocation of Bean and BeanFactory post processing and the order of Advices - just not Bean initialization!&lt;br /&gt;&lt;br /&gt;So how does it really work (for which bean to be loaded before any other)? One thing that I found (or maybe really just one): dependencies - bean references and &lt;tt&gt;@DependsOn&lt;/tt&gt;/&lt;tt&gt;depends-on&lt;/tt&gt;. When the BeanFactory preinstantiates the beans, it resolves its dependencies (via &lt;tt&gt;BeanDefinitionValueResolver&lt;/tt&gt;) and eventually the beans who are referenced/dependent by others will be initialized first.&lt;br /&gt;&lt;br /&gt;Do take note that, you rarely use &lt;tt&gt;@DependsOn&lt;/tt&gt; unless you have static (*ugh!!*) references. For my case, &lt;tt&gt;HibernateSessionFactoryBean&lt;/tt&gt; depends on &lt;tt&gt;SubEntityManager&lt;/tt&gt; and those enums in it are accessed via the static (*ugh!!*) method &lt;tt&gt;SubEntityManager.getInstance()&lt;/tt&gt; by the &lt;tt&gt;SubEntityUserType&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Spring Shutdown Hook and Unit Testing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A Spring &lt;tt&gt;ApplicationContext&lt;/tt&gt; has a &lt;tt&gt;close()&lt;/tt&gt; method, things like &lt;tt&gt;HibernateSessionFactoryBean&lt;/tt&gt; will only be destroyed when the context is destroyed via the &lt;tt&gt;close()&lt;/tt&gt; method - which is triggered by shutdown hook. See &lt;tt&gt;AbstractApplicationContext.registerShutdownHook()&lt;/tt&gt;. So what is important here to know is, if you are running unit tests, a series of them, destroy can only happen when the shutdown hook is called.&lt;br /&gt;&lt;br /&gt;Here's an example, I was running two test fixtures but the first one didn't shutdown until the whole test execution exited. &lt;br /&gt;&lt;pre&gt;[12-16 16:26:45] INFO&amp;nbsp; GenericApplicationContext [Thread-4]: Closing org.springframework.context.support.GenericApplicationContext@1923ca5: ...startup date [Wed Dec 16 16:26:42 MYT 2009]; root of context hierarchy&lt;br /&gt;[12-16 16:26:45] INFO&amp;nbsp; GenericApplicationContext [Thread-3]: Closing org.springframework.context.support.GenericApplicationContext@19b5217: ...startup date [Wed Dec 16 16:26:34 MYT 2009]; root of context hierarchy&lt;br /&gt;[12-16 16:26:45] INFO&amp;nbsp; HibernateSessionFactoryBean [Thread-4]: Closing Hibernate SessionFactory&lt;br /&gt;[12-16 16:26:45] INFO&amp;nbsp; HibernateSessionFactoryBean [Thread-3]: Closing Hibernate SessionFactory&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3449072605144531257?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3449072605144531257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3449072605144531257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3449072605144531257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3449072605144531257'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/12/3-spring-stuff-worth-sharing.html' title='3 Spring Stuff Worth Sharing'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-584383485070809997</id><published>2009-11-07T22:24:00.000-08:00</published><updated>2009-11-07T22:24:28.318-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Wireless Network disappeared after Ubuntu 9.10 (Karmic) upgrade</title><content type='html'>Upgraded to 9.10 this morning but funny thing was - wireless networking wasn't working anymore - ath_pci module is gone from the release.&lt;br /&gt;&lt;br /&gt;Fixed by loading the &lt;b&gt;ath5k&lt;/b&gt; module, as &lt;a href="http://www.thinkwiki.org/wiki/ThinkPad_11a/b/g_Wireless_LAN_Mini_Express_Adapter"&gt;suggested by the ThinkPad wiki&lt;/a&gt;. You can append it to &lt;tt&gt;/etc/modules&lt;/tt&gt; for it to be automatically loaded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-584383485070809997?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/584383485070809997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=584383485070809997' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/584383485070809997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/584383485070809997'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/11/wireless-network-disappeared-after.html' title='Wireless Network disappeared after Ubuntu 9.10 (Karmic) upgrade'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3121901175044176322</id><published>2009-07-23T09:13:00.000-07:00</published><updated>2009-07-23T20:59:08.516-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Measuring Your Engineers</title><content type='html'>To say that I am managing an Agile team is not entirely accurate, we are just trying to be agile. Anyway, skipping the story, the team's velocity increased more than 800% for the last 2 iterations, mainly due to management pressure. Put aside other reasons such as requirement gathering, design, headcount, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 1. Engineers are most probably working within their comfort zone.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For the past 3 months, I had passed/failed/extended the probation period of the engineers. During the session, they discussed with us their strength, weaknesses and areas for improvement.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 2. Most engineers highlighted that they're lacking some knowledge to perform better.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, last weekend, after having a discussion with the management, I was given a task - create KPIs to give engineers a direction as well as to provide management a way to measure their performance. So there are two things - &lt;span style="font-weight: bold;"&gt;KPIs&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Performance Review&lt;/span&gt;. The first thing that got into my mind was - how did my ex-company do it?&lt;br /&gt;&lt;br /&gt;In the support team that I worked in, we used a &lt;a href="http://www.joelonsoftware.com/articles/fog0000000038.html"&gt;ladder-based system&lt;/a&gt; where there were 4 skill levels defined with skills to achieve. We would also set KPIs such as "resolving 30 support cases with customer satisfaction above 75%" or "to be SCJP certified".  The progress, results and data would be presented to the management during our performance review. Trust me, people seldom stepped out the room wyith a happy face because the management loved to tell you where you did not do good enough.&lt;br /&gt;&lt;br /&gt;I was thinking of the ladder since then.&lt;br /&gt;&lt;br /&gt;I then looked into some blogs and Stack Overflow questions, such as &lt;a href="http://www.joelonsoftware.com/news/20020715.html"&gt;this&lt;/a&gt; (Joel), &lt;a href="http://www.joelonsoftware.com/articles/fog0000000070.html"&gt;this&lt;/a&gt;, &lt;a href="http://steve.yegge.googlepages.com/being-the-averagest"&gt;this&lt;/a&gt; (Steve Yegge), &lt;a href="http://stackoverflow.com/questions/15768/measuring-developer-performance"&gt;this&lt;/a&gt; and &lt;a href="http://stackoverflow.com/questions/14106/how-would-you-go-about-evaluating-a-programmer"&gt;this&lt;/a&gt;, which in general send the same message:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Management focuses too much on measuring the performance than improving the products and getting things done.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Something quite similar to this will be - timesheet and the reason I abolished it because it is irrelevant with the team velocity and business values. What does it mean then, shall we not measure the engineers at all? Your HR is certainly expecting some kind of metrics for her as a parameter to make salary adjustment.&lt;br /&gt;&lt;br /&gt;What shall we look into then? Let's start from things that we shall never use to measure an engineer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SLOC - Source Lines of Code, the dumbest ever metric. Good programmers write lesser lines.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Number of bug fixes - No way! The engineers would have figured out how to compromise this by writing more buggy code. I strongly against this just like how I disagree with giving points to bug fixes.&lt;/li&gt;&lt;li&gt;Hours logged - Timesheet is a waste of time.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I had like a 10-minute talk with the engineers yesterday to find out how they want to be evaluated and paid. I think this is important instead of me making decision and guesses based on how other software houses do it. It turned out that they want to be reviewed by the peers, by stories delivered, by code quality, and by having salary within different range they expect to be put an expectation on the skill set they possess.&lt;br /&gt;&lt;br /&gt;So here is my summary, the performance metrics will be generally based on &lt;span style="font-weight: bold;"&gt;the expectations, the results, and the feedbacks&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The rating from their team members.&lt;/li&gt;&lt;li&gt;The rating from their direct supervisor, basically this person also knows the agility, code quality, velocity, etc. of this person.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The total stories delivered.&lt;/li&gt;&lt;li&gt;The skill set, which KPIs can be related with this, not entirely though.&lt;/li&gt;&lt;/ul&gt;Are KPIs necessary? KPIs shall not be mandated, they have to be discussed and proposed by the individuals, based on their comfort level and see how far we want to go above it. If a KPI is not going to help an engineer to produce quality code and better product, drop it. Also, if one doesn't want to play this KPI game as he really has a clear idea about every thing he is doing, don't force him to change the way he handles and manages his job and directions.&lt;br /&gt;&lt;br /&gt;The last reminder is that, &lt;span style="font-weight: bold;"&gt;we shall not expect to have a perfect and fair formula that objectively measure and rate an engineer. Whether someone will be promoted or given a good salary shall be based on human judgments, as we are dealing with humans and humans make important decisions like you always do&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3121901175044176322?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3121901175044176322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3121901175044176322' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3121901175044176322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3121901175044176322'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/07/measuring-your-engineers.html' title='Measuring Your Engineers'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7500031507050853436</id><published>2009-07-10T18:27:00.000-07:00</published><updated>2009-07-10T18:50:02.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='unit-test'/><category scheme='http://www.blogger.com/atom/ns#' term='aop'/><title type='text'>Hibernate session issue during Spring tests</title><content type='html'>I reckon this is something good to share as it took me a few hours to get the problem resolved.&lt;br /&gt;&lt;br /&gt;We are using &lt;tt&gt;SpringJUnit4ClassRunner&lt;/tt&gt; for our DAO tests, the tests passed when they were run in Eclipse, but not in Maven. One of the test classes failed with &lt;tt&gt;HibernateSystemException&lt;/tt&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;org.springframework.orm.hibernate3.HibernateSystemException: Illegal attempt to associate a collection with two open sessions; nested exception is org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions&lt;/pre&gt;&lt;br /&gt;Google search gave me some clue about the problem had something to do with cascading style, transaction, and duplication but they didn't lead me anywhere. I broke at &lt;tt&gt;AbstractPersistentCollection.setCurrentSession&lt;/tt&gt; to find out that the session/session factory (DAOs are instances of &lt;tt&gt;HibernateDaoSupport&lt;/tt&gt;) assigned to one of the DAOs was different.&lt;br /&gt;&lt;br /&gt;A second look at the test class which had:&lt;br /&gt;&lt;pre&gt;@Autowired&lt;br /&gt;BillingInvoiceDao $;&lt;br /&gt;BillingOrderDao orderDao;&lt;br /&gt;BillingItemDao itemDao;&lt;br /&gt;MembershipDao membershipDao;&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;protected void setUpDataAccessObjects() {&lt;br /&gt;membershipDao = DataAccessObjectHelper.getDataAccessObject(MembershipDao.class);&lt;br /&gt;itemDao = DataAccessObjectHelper.getDataAccessObject(BillingItemDao.class);&lt;br /&gt;orderDao = DataAccessObjectHelper.getDataAccessObject(BillingOrderDao.class);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;I found out that BillingInvoiceDao was not a proxy instance but the other DAOs are. The log may explain something:&lt;br /&gt;&lt;pre&gt;[07-11 09:19:30] DEBUG AutowiredAnnotationBeanPostProcessor [main]: Autowiring by type from bean name 'itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest' to bean named 'billingInvoiceDao'&lt;br /&gt;[07-11 09:19:30] DEBUG DefaultListableBeanFactory [main]: Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'&lt;br /&gt;[07-11 09:19:30] DEBUG DefaultListableBeanFactory [main]: Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'&lt;br /&gt;[07-11 09:19:30] DEBUG AnnotationTransactionAttributeSource [main]: Adding transactional method [testCrud] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]&lt;br /&gt;[07-11 09:19:30] DEBUG AnnotationAwareAspectJAutoProxyCreator [main]: Creating implicit proxy for bean 'itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest' with 0 common interceptors and 1 specific interceptors&lt;br /&gt;[07-11 09:19:30] DEBUG JdkDynamicAopProxy [main]: Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest@17afcff]&lt;br /&gt;[07-11 09:19:30] DEBUG AnnotationTransactionAttributeSource [main]: Adding transactional method [testCrud] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]&lt;br /&gt;[07-11 09:19:30] DEBUG TransactionalTestExecutionListener [main]: Explicit transaction definition [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] found for test context [[TestContext@134b58c testClass = HibernateBillingInvoiceDaoTest, locations = array&lt;string&gt;['classpath:spring/dataAccessTestContext.xml', 'classpath:spring/dataAccessTestContext.billing.xml'], testInstance = itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest@17afcff, testMethod = testCrud@HibernateBillingInvoiceDaoTest, testException = [null]]]&lt;br /&gt;[07-11 09:19:30] DEBUG TransactionalTestExecutionListener [main]: Retrieved @TransactionConfiguration [@org.springframework.test.context.transaction.TransactionConfiguration(defaultRollback=true, transactionManager=mainTxManager)] for test class [class itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest]&lt;br /&gt;[07-11 09:19:30] DEBUG TransactionalTestExecutionListener [main]: Retrieved TransactionConfigurationAttributes [[TransactionConfigurationAttributes@ddc524 transactionManagerName = 'mainTxManager', defaultRollback = true]] for class [class itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest]&lt;br /&gt;[07-11 09:19:30] DEBUG DefaultListableBeanFactory [main]: Returning cached instance of singleton bean 'mainTxManager'&lt;br /&gt;[07-11 09:19:30] DEBUG TransactionalTestExecutionListener [main]: Executing @BeforeTransaction method [public void net.aflexi.cdn.core.test.AbstractDaoTest.setUpBeforeTransaction() throws java.lang.Exception] for test context [[TestContext@134b58c testClass = HibernateBillingInvoiceDaoTest, locations = array&lt;string&gt;['classpath:spring/dataAccessTestContext.xml', 'classpath:spring/dataAccessTestContext.billing.xml'], testInstance = itest.net.aflexi.cdn.billing.HibernateBillingInvoiceDaoTest@17afcff, testMethod = testCrud@HibernateBillingInvoiceDaoTest, testException = [null]]]&lt;br /&gt;[07-11 09:19:30] DEBUG DefaultListableBeanFactory [main]: Returning cached instance of singleton bean 'membershipDao'&lt;/string&gt;&lt;/string&gt;&lt;/pre&gt;&lt;br /&gt;That transaction propagation happened after autowiring of beans. The fix of my problem is to &lt;tt&gt;@Autowired&lt;/tt&gt; all DAOs (so that they are consistent) or assign them via the &lt;tt&gt;DataAccessObjectHelper&lt;/tt&gt; as shown in the snippet.&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7500031507050853436?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7500031507050853436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7500031507050853436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7500031507050853436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7500031507050853436'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/07/hibernate-session-issue-during-spring.html' title='Hibernate session issue during Spring tests'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5394019309420678111</id><published>2009-04-11T06:33:00.000-07:00</published><updated>2009-04-11T08:39:36.041-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>"Autoboxing" Array is Illegal</title><content type='html'>Wrote some array methods today then I had a question about auto-converting an int[] to Integer[] (auto-boxing)  while I was driving back home.&lt;br /&gt;&lt;br /&gt;For instance, this works,&lt;br /&gt;&lt;pre&gt;public static &lt;v&gt; V wrapper(V v, Class&lt;v&gt; clazz){&lt;br /&gt;return v;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int i = wrapper(1, Integer.class);&lt;/v&gt;&lt;/v&gt;&lt;/pre&gt;&lt;br /&gt;But this is not compilable,&lt;br /&gt;&lt;pre&gt;public static &lt;v&gt; V[] wrapperArray(V[] v, Class&lt;v&gt; clazz){&lt;br /&gt;return v;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int[] i2 = wrapperArray(i2, int.class);&lt;/v&gt;&lt;/v&gt;&lt;/pre&gt;&lt;br /&gt;&lt;tt&gt;int.class&lt;/tt&gt; will be auto-converted to &lt;tt&gt;Integer.class&lt;/tt&gt; but &lt;tt&gt;int[]&lt;/tt&gt; will not. I can't find the exact line in &lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html"&gt;JLS&lt;/a&gt; describing this, do leave a comment if you could.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5394019309420678111?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5394019309420678111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5394019309420678111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5394019309420678111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5394019309420678111'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/04/autoboxing-array-is-illegal.html' title='&quot;Autoboxing&quot; Array is Illegal'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-353432321243183874</id><published>2009-04-10T20:51:00.000-07:00</published><updated>2009-04-10T20:58:37.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Strange Maven Plugin Metadata Problem</title><content type='html'>Not too sure when, my &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin"&gt;Maven Eclipse plugin&lt;/a&gt; has been upgraded to 2.6 and probably due to some metadata "corruption", its dependencies were not downloaded, running it caused &lt;tt&gt;ClassNotFoundException&lt;/tt&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Building Whatever&lt;br /&gt;[INFO]    task-segment: [eclipse:eclipse]&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Preparing eclipse:eclipse&lt;br /&gt;...&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;this realm = app0.child-container[org.apache.maven.plugins:maven-eclipse-plugin:2.6]&lt;br /&gt;urls[0] = file:/home/yclian/.m2/repository/org/apache/maven/plugins/maven-eclipse-plugin/2.6/maven-eclipse-plugin-2.6.jar&lt;br /&gt;urls[1] = file:/home/yclian/.m2/repository/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar&lt;br /&gt;Number of imports: 10&lt;br /&gt;import: org.codehaus.classworlds.Entry@a6c57a42&lt;br /&gt;import: org.codehaus.classworlds.Entry@12f43f3b&lt;br /&gt;import: org.codehaus.classworlds.Entry@20025374&lt;br /&gt;import: org.codehaus.classworlds.Entry@f8e44ca4&lt;br /&gt;import: org.codehaus.classworlds.Entry@92758522&lt;br /&gt;import: org.codehaus.classworlds.Entry@ebf2705b&lt;br /&gt;import: org.codehaus.classworlds.Entry@bb25e54&lt;br /&gt;import: org.codehaus.classworlds.Entry@bece5185&lt;br /&gt;import: org.codehaus.classworlds.Entry@3fee8e37&lt;br /&gt;import: org.codehaus.classworlds.Entry@3fee19d8&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this realm = plexus.core&lt;br /&gt;urls[0] = file:/opt/maven-2/lib/maven-2.1.0-uber.jar&lt;br /&gt;Number of imports: 10&lt;br /&gt;import: org.codehaus.classworlds.Entry@a6c57a42&lt;br /&gt;import: org.codehaus.classworlds.Entry@12f43f3b&lt;br /&gt;import: org.codehaus.classworlds.Entry@20025374&lt;br /&gt;import: org.codehaus.classworlds.Entry@f8e44ca4&lt;br /&gt;import: org.codehaus.classworlds.Entry@92758522&lt;br /&gt;import: org.codehaus.classworlds.Entry@ebf2705b&lt;br /&gt;import: org.codehaus.classworlds.Entry@bb25e54&lt;br /&gt;import: org.codehaus.classworlds.Entry@bece5185&lt;br /&gt;import: org.codehaus.classworlds.Entry@3fee8e37&lt;br /&gt;import: org.codehaus.classworlds.Entry@3fee19d8&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[ERROR] BUILD ERROR&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Internal error in the plugin manager executing goal 'org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse': Unable to load the mojo 'org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse' in the plugin 'org.apache.maven.plugins:maven-eclipse-plugin'. A required class is missing: org/codehaus/plexus/resource/loader/ResourceNotFoundException&lt;br /&gt;org.codehaus.plexus.resource.loader.ResourceNotFoundException&lt;/pre&gt;&lt;br /&gt;Tried running Maven with the &lt;tt&gt;-cpu&lt;/tt&gt; argument but it didn't help. &lt;tt&gt;maven-metadata-central.xml&lt;/tt&gt; showed the latest as 2.5.1 and others got 2.6. Fixed by deleting metadata files then re-run Maven.&lt;br /&gt;&lt;br /&gt;Bah.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-353432321243183874?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/353432321243183874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=353432321243183874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/353432321243183874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/353432321243183874'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/04/strange-maven-plugin-metadata-problem.html' title='Strange Maven Plugin Metadata Problem'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7312959624407341128</id><published>2009-03-31T19:24:00.000-07:00</published><updated>2009-03-31T19:32:34.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>RTFL - Read the Fucking Logs</title><content type='html'>Read the fucking logs? Yes, it happened so many times, on so many guys. Something that I always try to avoid.&lt;br /&gt;&lt;br /&gt;Say, you hit into a problem, you looked into the log file, you could see a bunch of error messages and stacktrace, you read the first line, you didn't bother to read the second and further.&lt;br /&gt;&lt;br /&gt;You tried to change the configurations or something that you thought would make sense but the same (or new) error came out. You spent quite some time on it like an hour or a day.&lt;br /&gt;&lt;br /&gt;You asked me / your supervisor to look into it and they found clear error messages or indications somewhere down the error log. You felt sorry, you found yourself stupid to waste so much time, you wished to be in the hall of shame for that day.&lt;br /&gt;&lt;br /&gt;If this is a recurring habit of your, can you make "reading logs carefully" as a troubleshooting principle?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7312959624407341128?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7312959624407341128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7312959624407341128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7312959624407341128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7312959624407341128'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/03/rtfl-read-fucking-logs.html' title='RTFL - Read the Fucking Logs'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-6703415240466566866</id><published>2009-03-20T00:58:00.000-07:00</published><updated>2009-03-20T01:10:20.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='office'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><title type='text'>Some Particulars like Room Names in Aflexi</title><content type='html'>This is truly a random post. During the lunch time at Full House (NZX), I talked about red-tape/bureaucracy in corporates that I can't stand, then exchanges of some Oz slangs.&lt;br /&gt;&lt;br /&gt;When I got back to the office, I came across a blog titled "101 Guide to going to the Men's toilet in Sydney" in my ex-company's internal blog (we still maintain a good relationship basically).&lt;br /&gt;&lt;br /&gt;Here're a number of things I raised and discussed over in a meeting an hour ago with the team:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The developer's roster, tasks and deadlines.&lt;/li&gt;&lt;li&gt;The right ways to use the toilet.&lt;/li&gt;&lt;li&gt;The ashtray pot and your ciggy.&lt;/li&gt;&lt;li&gt;The cups and basin.&lt;/li&gt;&lt;li&gt;The room names.&lt;/li&gt;&lt;/ol&gt;Items 2 to 4 are small particulars but people neglect or find themselves resistant in conforming to social standards, if that're the right words to use, anyway. The Aflexi devhub in PJ, Taman Megah Emas (which I named it Aflexi Gold a while ago), has quite a number of rooms and 3 toilets. I'm thinking of giving them names (since 2 months ago but things got me stuck), like country's, city's, etc.&lt;br /&gt;&lt;br /&gt;How're rooms named in your office?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-6703415240466566866?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/6703415240466566866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=6703415240466566866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6703415240466566866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6703415240466566866'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/03/some-particulars-like-room-names-in.html' title='Some Particulars like Room Names in Aflexi'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4417151553716739886</id><published>2009-03-05T07:43:00.000-08:00</published><updated>2009-03-05T07:49:29.086-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>404 on Nexus</title><content type='html'>Was stuck for a few minutes as &lt;a href="http://nexus.sonatype.org/"&gt;Sonatype Nexus&lt;/a&gt; was reporting 404 while I tried to access a POM file. Expiring the cache (right clicking on the troubled repository) is the fix of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4417151553716739886?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4417151553716739886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4417151553716739886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4417151553716739886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4417151553716739886'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/03/404-on-nexus.html' title='404 on Nexus'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-2581912817821107524</id><published>2009-03-04T21:23:00.000-08:00</published><updated>2009-03-05T18:25:24.452-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Working on Branches and the Stable Trunk</title><content type='html'>I used to work on the &lt;a href="http://en.wikipedia.org/wiki/Trunk_%28software%29"&gt;trunk&lt;/a&gt; because for all the projects I worked on, it's either I was the sole developer or the team ensured that everyone code check-in has passed the local tests. Otherwise, we created (we still) branches for bug fixes, large code for new features, etc.&lt;br /&gt;&lt;br /&gt;About 2 months ago, I had a short &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29"&gt;git&lt;/a&gt; session with &lt;a href="http://twitter.com/kamal"&gt;Kamal&lt;/a&gt; and he shared with me the idea of &lt;a href="http://www.google.com/search?q=story+branch+agile"&gt;story/branch&lt;/a&gt;. And as my team started to grow with more dev guys, I feel the need of encouraging more branching and now this has become a rule. For a project with automated tests defined with CI set up, a stable trunk is guaranteed and this practice can fit very well into it.&lt;br /&gt;&lt;br /&gt;We don't use git but &lt;a href="http://en.wikipedia.org/wiki/Subversion_%28software%29"&gt;Subversion&lt;/a&gt; because that's how we started and we are still comfortable with it now (most of the time).&lt;br /&gt;&lt;br /&gt;If you have a working copy on trunk, here're some simple steps to switch to a branch (&lt;tt&gt;svn switch&lt;/tt&gt; won't work):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;svn cp https://repo/trunk https://repo/branches/module-version-storyname&lt;br /&gt;cd /path/to/trunk/working/copy&lt;br /&gt;svn diff &amp;gt; /tmp/diff&lt;br /&gt;svn co  https://repo/branches/module-version-storyname&lt;br /&gt;cd module-version-storyname&lt;br /&gt;patch -p0 &amp;lt; /tmp/diff&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-2581912817821107524?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/2581912817821107524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=2581912817821107524' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2581912817821107524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2581912817821107524'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/03/working-on-branches-and-stable-trunk.html' title='Working on Branches and the Stable Trunk'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5853536129711582764</id><published>2009-02-19T04:51:00.000-08:00</published><updated>2009-02-19T04:58:21.380-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Wireless Network not working on Ubuntu after Suspend/Hibernate</title><content type='html'>It never happened to me til about a month plus ago. Didn't bother to fix it 'til just now.&lt;br /&gt;&lt;br /&gt;It's a bug reported at &lt;a href="https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/53310"&gt;53310&lt;/a&gt;, and it's fixed (on my machine) by doing:&lt;br /&gt;&lt;pre&gt;modprobe -r ath_pci&lt;br /&gt;modprobe ath_pci&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5853536129711582764?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5853536129711582764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5853536129711582764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5853536129711582764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5853536129711582764'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/02/wireless-network-not-working-on-ubuntu.html' title='Wireless Network not working on Ubuntu after Suspend/Hibernate'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5096643898973420031</id><published>2009-02-18T19:41:00.000-08:00</published><updated>2009-02-18T20:12:16.781-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='support'/><title type='text'>Brush up your Support-Fu, can?</title><content type='html'>Wasted about an hour at the &lt;a href="http://www.pbebank.com/"&gt;Public Bank&lt;/a&gt; HQ this morning, more than 30 minutes on waiting, 2 minutes on getting confused and 5 minutes on getting an answer.&lt;br /&gt;&lt;br /&gt;Long story short, yes.&lt;br /&gt;&lt;br /&gt;I want to start a long term investment on a mutual fund that I selected and I do not have a saving account in this bank, which you will need to have $ transferred monthly to the investment account. I have my forms, my 500K bank draft (nuh, don't trust this) and my temporary IC (as I lost my purse a few days ago).&lt;br /&gt;&lt;br /&gt;There.. reached my turn to be served by this first customer service dude.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Dude A:&lt;/span&gt; So you want to open a saving account for that?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dude A:&lt;/span&gt; You will need a minimum of MYR 250. Can I have your IC please?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; I do not have an IC.. now. But I can show you my temporary IC.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dude A:&lt;/span&gt; I am sorry sir, we will need that otherwise the system won't pass you.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; So does it mean I have to wait 3 weeks before I come here?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dude A:&lt;/span&gt; Yes. I'm sorry.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; Options?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dude A:&lt;/span&gt; We need your IC, the system has to scan it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; And there's nothing I can do here anymore today, right?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dude A:&lt;/span&gt; Yes, I'm sorry.&lt;br /&gt;&lt;/blockquote&gt;I walked away then paused, and I was annoyed by not giving much details about how exactly it works. I spent my morning to be stuck in the jam, some time to find a parking, waited on the bench, and I got knocked out with a confused mind.&lt;br /&gt;&lt;br /&gt;I waited to be served again and this time (by a lady) I got my answer. To start an investment, you do not need a saving account, it's only for the convenience of not needing you to visit the bank to deposit $ for the investment every month. Basically, I could just start it by dumping all my 500K into it, which of course is not my plan. So there're a few options:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create the investment account, pass them my 500K.&lt;ol&gt;&lt;li&gt;Come back 3 weeks later to open a saving account, OR,&lt;/li&gt;&lt;li&gt;Come back every month to deposit your $.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Wait for 3 weeks to open both accounts and start the investment with your desired amount of $.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I have some Customer Service experience (I worked in both the &lt;a href="http://www.atlassian.com/"&gt;Atlassian&lt;/a&gt; and &lt;a href="http://www.mulesource.com/"&gt;MuleSource&lt;/a&gt; team) and there're a number of things that you have to avoid while handing a ticket / customer.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Never assume that the customers are smart. Like me, I was clueless. So, ask them questions.&lt;/li&gt;&lt;li&gt;Don't jump into solution too fast. Get the context right and make sure that both of you are on the same understanding.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Always give them a solution, if not, workarounds, still not, explain why.&lt;/li&gt;&lt;/ol&gt;Public Bank, you could lose me as a customer, I still have 3 weeks to think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5096643898973420031?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5096643898973420031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5096643898973420031' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5096643898973420031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5096643898973420031'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/02/brush-up-your-support-fu-can.html' title='Brush up your Support-Fu, can?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8549590457232008463</id><published>2009-02-15T16:58:00.000-08:00</published><updated>2009-02-15T17:02:00.518-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>InflaterIjputStream.class</title><content type='html'>&lt;pre&gt;Exception in thread "main" java.lang.NoClassDefFoundError:&lt;br /&gt;java/util/zip/InflaterInputStream&lt;br /&gt; at java.util.zip.ZipFile.getInputStream(ZipFile.java:212)&lt;br /&gt; at java.util.zip.ZipFile.getInputStream(ZipFile.java:180)&lt;br /&gt; at java.util.jar.JarFile.hasClassPathAttribute(JarFile.java:463)&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;In the &lt;tt&gt;rt.jar&lt;/tt&gt;, &lt;tt&gt;InflaterInputStream.class&lt;/tt&gt; was named &lt;tt&gt;InflaterIjputStream.class&lt;/tt&gt;. How could this happen? Fixed the issue by repackaging the zip.&lt;br /&gt;&lt;br /&gt;yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8549590457232008463?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8549590457232008463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8549590457232008463' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8549590457232008463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8549590457232008463'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/02/inflaterijputstreamclass.html' title='InflaterIjputStream.class'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4305295619067902313</id><published>2009-02-10T02:56:00.000-08:00</published><updated>2009-02-10T03:11:51.683-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>JVM failed with Segmentation Fault</title><content type='html'>This happened completely out of a sudden and truly random. The JVM that runs our business logic app died last night and could never be brought up anymore due to &lt;a href="http://en.wikipedia.org/wiki/Segmentation_fault"&gt;segmentation fault&lt;/a&gt;. (It suicided quietly)&lt;br /&gt;&lt;br /&gt;The last few lines via &lt;a href="http://linux.die.net/man/1/strace"&gt;strace&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;DEBUG DefaultListableBeanFactory [main]: Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'&lt;br /&gt;[02-10 10:22:30] DEBUG AnnotationTransactionAttributeSource [main]: Adding transactional method [createUser] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]&lt;br /&gt;) = ? ERESTARTSYS (To be restarted)&lt;br /&gt;+++ killed by SIGSEGV +++&lt;/pre&gt;&lt;br /&gt;It could just be a JVM bug (not exactly sure which, but suggested by John Raymond Wold, W_work in #java@irc.freenode.net) and upgrading to the newest version fixed the problem.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4305295619067902313?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4305295619067902313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4305295619067902313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4305295619067902313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4305295619067902313'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2009/02/jvm-failed-with-segmentation-fault.html' title='JVM failed with Segmentation Fault'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7751437016126729699</id><published>2008-12-18T16:11:00.000-08:00</published><updated>2008-12-18T16:20:47.289-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>My Maxis Broadband is Fast</title><content type='html'>It is, always. I use it 24/7, when I work in the morning, when I travel in the afternoon and when I'm home in the evening.&lt;br /&gt;&lt;br /&gt;It is crap when it's in &lt;a href="https://twitter.com/yclian/status/1043215807"&gt;Port Dickson&lt;/a&gt; or some &lt;a href="http://twitter.com/yclian/statuses/945727635"&gt;concrete buildings&lt;/a&gt; with poor signals, but not most of the time. I have also noticed the trend that it can go amazingly fast in the midnight til around 8am+ in the morning (so if you have a long connected connection, maybe you want to redial for a good speed), like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_T7lTXNh-_S8/SUrochTEbcI/AAAAAAAAAJg/7DPXY-B98-Q/s1600-h/my-maxis-is-fast.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 242px;" src="http://3.bp.blogspot.com/_T7lTXNh-_S8/SUrochTEbcI/AAAAAAAAAJg/7DPXY-B98-Q/s400/my-maxis-is-fast.png" alt="" id="BLOGGER_PHOTO_ID_5281289089717661122" border="0" /&gt;&lt;/a&gt;:)&lt;br /&gt;&lt;br /&gt;yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7751437016126729699?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7751437016126729699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7751437016126729699' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7751437016126729699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7751437016126729699'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/12/my-maxis-broadband-is-fast.html' title='My Maxis Broadband is Fast'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_T7lTXNh-_S8/SUrochTEbcI/AAAAAAAAAJg/7DPXY-B98-Q/s72-c/my-maxis-is-fast.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3923303508115876325</id><published>2008-12-11T19:11:00.000-08:00</published><updated>2008-12-11T19:18:25.471-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Upgrading/Uninstalling AIR Runtime on Linux</title><content type='html'>While upgrading my &lt;a href="http://labs.adobe.com/downloads/air_linux.html"&gt;AIR on Linux&lt;/a&gt; from Alpha to Beta, I hit into:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;An error occurred while installing Adobe AIR. Installation may not be allowed by your administrator. Please contact your administrator.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's not too &lt;a href="http://labs.adobe.com/wiki/index.php/AIR_for_Linux:Release_Notes"&gt;helpful&lt;/a&gt; so I guessed I would have to remove the older version before upgrading. You can't uninstall using the installer as it doesn't provide an uninstallation option, you have to look into your package manager, e.g.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;dpkg -S "*air*" | grep adobe&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The Alpha version appears as &lt;tt&gt;adobeair-enu&lt;/tt&gt; and Beta as &lt;tt&gt;adobeair1.0&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3923303508115876325?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3923303508115876325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3923303508115876325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3923303508115876325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3923303508115876325'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/12/upgradinguninstalling-air-runtime-on.html' title='Upgrading/Uninstalling AIR Runtime on Linux'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-2471433447302407049</id><published>2008-12-01T20:34:00.001-08:00</published><updated>2008-12-01T20:55:48.715-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unit-test'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Hudson SVN Revisions/Changes Went Out of Sync</title><content type='html'>A project in our Hudson had been stalled for 3 weeks, for its svn revisions/changes, and I had to do a manual &lt;tt&gt;svn update&lt;/tt&gt; in its workspace directory to make sure the build runs correctly. What exactly happened is that, Hudson was not checking out the &lt;tt&gt;HEAD&lt;/tt&gt; revisions of these modules but the old revisions before it ran into this problem, besides, the "Changes" page showed no information other than those builds that happened 3 weeks ago.&lt;br /&gt;&lt;br /&gt;So I thought there could be some state being held by it and I tried:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To turn off using SVN update but SVN checkout for every build.&lt;/li&gt;&lt;li&gt;To change the revision values in the &lt;tt&gt;svnexternals.txt&lt;/tt&gt;.&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;None of these helped 'til I changed the &lt;a href="http://fisheye4.atlassian.com/browse/%7Eraw,r=HEAD/hudson/trunk/www/javadoc/hudson/triggers/SCMTrigger.DescriptorImpl.html"&gt;&lt;tt&gt;synchronousPolling&lt;/tt&gt;&lt;/a&gt; in &lt;tt&gt;hudson.triggers.SCMTrigger.xml&lt;/tt&gt; from &lt;tt&gt;false&lt;/tt&gt; to &lt;tt&gt;true&lt;/tt&gt; and Hudson finally polled the latest revisions and updated the "Changes" page for the newly triggered build. This reset the state and behaviour (of polling all in one go)  and therefore resolved my problem.&lt;br /&gt;&lt;br /&gt;Just a tip if any of you ever hit into this.&lt;br /&gt;&lt;br /&gt;yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-2471433447302407049?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/2471433447302407049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=2471433447302407049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2471433447302407049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2471433447302407049'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/12/hudson-svn-revisionschanges-went-out-of.html' title='Hudson SVN Revisions/Changes Went Out of Sync'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8807127411677334644</id><published>2008-11-23T12:21:00.000-08:00</published><updated>2008-11-23T12:25:18.583-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Where is the log file of Eclipse TPTP Agent Controller?</title><content type='html'>I have a problem to use the integrated agent controller, which RAServer.sh reported that it has actually been running. Still finding and just learned that the logs are available at:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$TPTP_AC_HOME/config/servicelog.log&lt;/pre&gt;&lt;br /&gt;yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8807127411677334644?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8807127411677334644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8807127411677334644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8807127411677334644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8807127411677334644'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/11/where-is-log-file-of-eclipse-tptp-agent.html' title='Where is the log file of Eclipse TPTP Agent Controller?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1890873544649208183</id><published>2008-11-12T06:17:00.000-08:00</published><updated>2008-11-12T08:14:26.559-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Firefox works offline due to NetworkManager interfaces being inactive</title><content type='html'>There's one improvement in Ubuntu 8.10 which is causing me some problems - NetworkManager can now detect my HSDPA. But it doesn't work and here's the log:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Nov 12 22:32:40 kimmy pppd[9724]: Plugin /usr/lib/pppd/2.4.4/nm-pppd-plugin.so loaded.&lt;br /&gt;Nov 12 22:32:40 kimmy pppd[9724]: pppd 2.4.4 started by root, uid 0&lt;br /&gt;Nov 12 22:32:40 kimmy pppd[9724]: Using interface ppp0&lt;br /&gt;Nov 12 22:32:40 kimmy pppd[9724]: Connect: ppp0 &lt;--&gt; /dev/ttyUSB0&lt;br /&gt;Nov 12 22:32:40 kimmy NetworkManager: &lt;info&gt;  (ttyUSB0): device state change: 5 -&gt; 6&lt;br /&gt;Nov 12 22:32:40 kimmy pppd[9724]: CHAP authentication succeeded&lt;br /&gt;Nov 12 22:32:40 kimmy pppd[9724]: CHAP authentication succeeded&lt;br /&gt;Nov 12 22:32:40 kimmy NetworkManager: &lt;info&gt;  (ttyUSB0): device state change: 6 -&gt; 7&lt;br /&gt;Nov 12 22:32:40 kimmy kernel: [ 2143.619828] PPP BSD Compression module registered&lt;br /&gt;Nov 12 22:32:40 kimmy kernel: [ 2143.681813] PPP Deflate Compression module registered&lt;br /&gt;Nov 12 22:32:42 kimmy pppd[9724]: Modem hangup&lt;br /&gt;Nov 12 22:32:42 kimmy NetworkManager: &lt;info&gt;  (ttyUSB0): device state change: 7 -&gt; 9&lt;br /&gt;Nov 12 22:32:42 kimmy NetworkManager: &lt;debug&gt; [1226500362.016832] nm_serial_device_close(): Closing device 'ttyUSB0'&lt;br /&gt;Nov 12 22:32:42 kimmy pppd[9724]: Connection terminated.&lt;/debug&gt;&lt;/info&gt;&lt;/info&gt;&lt;/info&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then, the supposingly working gnome-ppp will start hanging up too and in order to bring it back to live, I have to run the &lt;tt&gt;vodafone-mobile-connect-card-driver-for-linux&lt;/tt&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Nov 12 22:34:03 kimmy pppd[9843]: pppd 2.4.4 started by yclian, uid 1000&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: using channel 7&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: Using interface ppp0&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: Connect: ppp0 &lt;--&gt; /dev/ttyUSB0&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: Warning - secret file /etc/ppp/pap-secrets has world and/or group access&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: sent [LCP ConfReq id=0x1 &lt;asyncmap&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [LCP ConfReq id=0x12 &lt;asyncmap&gt; &lt;auth&gt; &lt;magic&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: sent [LCP ConfRej id=0x12 &lt;magic&gt;]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [LCP ConfAck id=0x1 &lt;asyncmap&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [LCP ConfReq id=0x13 &lt;asyncmap&gt; &lt;auth&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: sent [LCP ConfAck id=0x13 &lt;asyncmap&gt; &lt;auth&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: sent [LCP EchoReq id=0x0 magic=0x0]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [LCP DiscReq id=0x14 magic=0xe0777e]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [CHAP Challenge id=0x1 &lt;5053860912aec751b049750c32c838e8&gt;, name = "UMTS_CHAP_SRVR"]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: sent [CHAP Response id=0x1 &lt;2fb0aedcf34cb0db311ad1a157c5be04&gt;, name = "admin"]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [LCP EchoRep id=0x0 magic=0xe0777e 00 00 00 00]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: rcvd [CHAP Success id=0x1 ""]&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: CHAP authentication succeeded&lt;br /&gt;Nov 12 22:34:03 kimmy pppd[9843]: CHAP authentication succeeded&lt;br /&gt;...&lt;br /&gt;Nov 12 22:34:08 kimmy pppd[9843]: local  IP address 121.120.201.243&lt;br /&gt;Nov 12 22:34:08 kimmy pppd[9843]: remote IP address 10.64.64.64&lt;br /&gt;Nov 12 22:34:08 kimmy pppd[9843]: primary   DNS address 58.71.136.10&lt;br /&gt;Nov 12 22:34:08 kimmy pppd[9843]: secondary DNS address 58.71.132.10&lt;br /&gt;Nov 12 22:34:08 kimmy pppd[9843]: Script /etc/ppp/ip-up started (pid 9845)&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/auth&gt;&lt;/asyncmap&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/auth&gt;&lt;/asyncmap&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/asyncmap&gt;&lt;/magic&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/magic&gt;&lt;/auth&gt;&lt;/asyncmap&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/asyncmap&gt;&lt;/pre&gt;&lt;br /&gt;Now, disconnecting it again, connecting with &lt;tt&gt;gnome-ppp&lt;/tt&gt; will start working:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Nov 12 22:34:24 kimmy pppd[9936]: pppd 2.4.4 started by yclian, uid 1000&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: using channel 8&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: Using interface ppp0&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: Connect: ppp0 &lt;--&gt; /dev/ttyUSB0&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: Warning - secret file /etc/ppp/pap-secrets has world and/or group access&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: sent [LCP ConfReq id=0x1 &lt;asyncmap&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [LCP ConfReq id=0x15 &lt;asyncmap&gt; &lt;auth&gt; &lt;magic&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: sent [LCP ConfRej id=0x15 &lt;magic&gt;]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [LCP ConfAck id=0x1 &lt;asyncmap&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [LCP ConfReq id=0x16 &lt;asyncmap&gt; &lt;auth&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: sent [LCP ConfAck id=0x16 &lt;asyncmap&gt; &lt;auth&gt; &lt;pcomp&gt; &lt;accomp&gt;]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: sent [LCP EchoReq id=0x0 magic=0x0]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [LCP DiscReq id=0x17 magic=0xe0cb68]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [CHAP Challenge id=0x1 &lt;7c2c8c8e00cabc94481272f65eb30ebb&gt;, name = "UMTS_CHAP_SRVR"]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: sent [CHAP Response id=0x1 &lt;a4c17afed5e7366824317e0877a3058f&gt;, name = "maxis"]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [LCP EchoRep id=0x0 magic=0xe0cb68 00 00 00 00]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: rcvd [CHAP Success id=0x1 ""]&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: CHAP authentication succeeded&lt;br /&gt;Nov 12 22:34:24 kimmy pppd[9936]: CHAP authentication succeeded&lt;br /&gt;...&lt;br /&gt;Nov 12 22:34:27 kimmy pppd[9936]: local  IP address 121.120.187.27&lt;br /&gt;Nov 12 22:34:27 kimmy pppd[9936]: remote IP address 10.64.64.64&lt;br /&gt;Nov 12 22:34:27 kimmy pppd[9936]: primary   DNS address 58.71.136.10&lt;br /&gt;Nov 12 22:34:27 kimmy pppd[9936]: secondary DNS address 58.71.132.10&lt;br /&gt;Nov 12 22:34:27 kimmy pppd[9936]: Script /etc/ppp/ip-up started (pid 9938)&lt;/a4c17afed5e7366824317e0877a3058f&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/auth&gt;&lt;/asyncmap&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/auth&gt;&lt;/asyncmap&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/asyncmap&gt;&lt;/magic&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/magic&gt;&lt;/auth&gt;&lt;/asyncmap&gt;&lt;/accomp&gt;&lt;/pcomp&gt;&lt;/asyncmap&gt;&lt;/pre&gt;&lt;br /&gt;That's not annoying enough.  NetworkManager now marks my network as inactive unless I'm connected either to &lt;tt&gt;eth0&lt;/tt&gt; or &lt;tt&gt;wifi0&lt;/tt&gt;, which I did not have to do in the past. The consequence? Every time when I start Firefox, it works offline.&lt;br /&gt;&lt;br /&gt;I found out that there're other users that are facing similar issue, like in &lt;a href="https://answers.launchpad.net/ubuntu/+source/firefox/+question/28829"&gt;question #28829&lt;/a&gt;. I did not use the &lt;tt&gt;NetworkManager.conf&lt;/tt&gt; workaround as suggested in the page since I'm not familiar with the dbus stuff, but looking at the file gave me a clue that running Firefox as root would fix the problem. That was right but who would want to do that? ;-)&lt;br /&gt;&lt;br /&gt;A better solution would definitely be altering Firefox settings. &lt;a href="https://answers.launchpad.net/ubuntu/+faq/96"&gt;Question #96&lt;/a&gt; suggests to set &lt;tt&gt;network.online&lt;/tt&gt; to &lt;tt&gt;true&lt;/tt&gt; but it already is! Then I saw &lt;span style="font-weight: bold;"&gt;&lt;tt&gt;toolkit.networkmanager.disable&lt;/tt&gt;&lt;/span&gt; and toggled it to &lt;span style="font-weight: bold;"&gt;&lt;tt&gt;true&lt;/tt&gt;&lt;/span&gt;, restarted Firefox and.. Yes, this is the solution, it disables Firefox from consulting the NetworkManager.&lt;br /&gt;&lt;br /&gt;Read the &lt;a href="http://kb.mozillazine.org/Toolkit.networkmanager.disable"&gt;knowledge base&lt;/a&gt; if you want to know more about it.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1890873544649208183?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1890873544649208183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1890873544649208183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1890873544649208183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1890873544649208183'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/11/firefox-works-offline-due-to.html' title='Firefox works offline due to NetworkManager interfaces being inactive'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4416304990511786698</id><published>2008-11-08T07:19:00.000-08:00</published><updated>2008-11-08T07:38:04.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='m$'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><title type='text'>Steve Ballmer is.. funny but great</title><content type='html'>Went to the &lt;a href="http://foss.my/"&gt;FOSS.my 2008&lt;/a&gt; and one of the sessions that I attended was Microsoft on Open Source and Silverlight. When the speaker, &lt;a href="http://www.linkedin.com/pub/1/946/051"&gt;Chris Levanes&lt;/a&gt;, talked about the open source involvement of Microsoft and their peguins and lab, &lt;a href="http://twitter.com/yclian/status/995922537"&gt;I remembered&lt;/a&gt; Steve Ballmer's "Linux is a cancer" comment. I found it irony, but.. then again, business is business and Ballmer said that like 7 years ago. The world has changed.&lt;br /&gt;&lt;br /&gt;Ballmer (the monkey boy that most guys would call) is a passionate guy and that's the quality he has. These videos are amusing and they will really make you to remember him.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=6304687408656696643&amp;amp;hl=en"&gt;Classic Ballmer's "developers" chant&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=-2992183880068262304&amp;amp;hl=en"&gt;Ballmer advertises Microsoft 1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=1274983729713522403&amp;amp;hl=en"&gt;Ballmer danced!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Now.. before we laugh at him, here're some facts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ballmer is the CEO of Microsoft.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ballmer is &lt;span style="font-style: italic;"&gt;fucking&lt;/span&gt; passionate, or, he can really express himself in a crazy manner.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ballmer is one of the richest men in the world.&lt;/li&gt;&lt;/ul&gt;Can you do better than him?&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4416304990511786698?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4416304990511786698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4416304990511786698' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4416304990511786698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4416304990511786698'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/11/steve-ballmer-is-funny-but-great.html' title='Steve Ballmer is.. funny but great'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8113167348324174321</id><published>2008-11-06T09:45:00.000-08:00</published><updated>2008-11-06T09:58:19.658-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Profiling a Remote Application in Eclipse</title><content type='html'>I came across &lt;a href="http://www.eclipse.org/tptp/home/documents/tutorials/profilingtool/profilingexample_32.html#4_2"&gt;this guide&lt;/a&gt; which mentioned about attaching the Eclipse profiler to a remote Java application. I was stuck for some hours, asked my question in #java and #eclipse but got no response.. then, realized that, the instructions are old!&lt;br /&gt;&lt;br /&gt;Instead, I visited the &lt;a href="http://www.eclipse.org/tptp/"&gt;TPTP site&lt;/a&gt;, downloaded the Agent Controller and followed the &lt;a href="http://www.eclipse.org/tptp/home/downloads/4.5.0/documents/installguide/agentcontroller_45/linux/getting_started.html"&gt;instructions in this page&lt;/a&gt; to get things up and running. Basically,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add &lt;tt&gt;$TPTP_AC_HOME/lib:$TPTP_AC_HOME/bin:$TPTP_AC_HOME/plugins/org.eclipse.tptp.javaprofiler&lt;/tt&gt; to &lt;tt&gt;$LD_LIBRARY_PATH&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Add &lt;tt&gt;$TPTP_AC_HOME/bin&lt;/tt&gt; to &lt;tt&gt;$PATH&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Run &lt;tt&gt;SetConfig.sh&lt;/tt&gt; to configure the AC&lt;/li&gt;&lt;li&gt;Run &lt;tt&gt;ACStart.sh&lt;/tt&gt; to start AC&lt;/li&gt;&lt;li&gt;Add &lt;tt&gt;'-agentlib:JPIBootLoader=JPIAgent:server=enabled;CGProf'&lt;/tt&gt; to your &lt;tt&gt;JAVA_OPTS&lt;/tt&gt; (&lt;tt&gt;ldd&lt;/tt&gt; and &lt;tt&gt;nm&lt;/tt&gt; are good commands)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start your Java application&lt;/li&gt;&lt;li&gt;Profile and hook into the application by selecting "Attach to Agent" in the Eclipse's dialog&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8113167348324174321?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8113167348324174321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8113167348324174321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8113167348324174321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8113167348324174321'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/11/profiling-remote-application-in-eclipse.html' title='Profiling a Remote Application in Eclipse'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-402481867820188372</id><published>2008-10-31T21:44:00.000-07:00</published><updated>2008-10-31T22:39:10.084-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ws'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>XML-RPC vs. SOAP vs. REST thoughts and Spring Beans</title><content type='html'>Recently I am working on the remote API side of my project, and the protocol that we chose is XML-RPC. Somewhere in two blogs returned by Google search suggested that REST &gt; XML-RPC &gt; SOAP. SOAP can only be considered for its wide enterprise adoption and protocol stack (with security management, transaction control, etc.) and therefore it is complicated. Yes, the person created XML-RPC wasn't an expert in XML but it's neat.&lt;br /&gt;&lt;br /&gt;Why not REST then? I used to work on design and technical issues of Mule ESB and I was exposed to REST of its sweetness (the simplicity, the CRUD stuff) before more people started to talk about it (now they talk about Cloud). I learned that SOAP is for SOA (Service Oriented Architecture) and REST is for ROA (Resource Oriented Architecture). They are two different paradigms, and the purpose and design of these layers are therefore different, e.g. you don't carry a service/RPC mindset when you create a REST API.&lt;br /&gt;&lt;br /&gt;So, no REST &lt;span style="font-style: italic;"&gt;for now&lt;/span&gt; as IMO it requires more effort to design a proper API. Never I'll create SOAP due to its complexity.&lt;br /&gt;&lt;br /&gt;What about &lt;a href="http://json-rpc.org/"&gt;JSON-RPC&lt;/a&gt;? I had a short discussion regarding this with &lt;a href="http://twitter.com/ditesh"&gt;@ditesh&lt;/a&gt; at #myoss@irc.freenode.net. I love JSON for its interoperability and speed (vs. XML parsing). But the available implementations turned me off pretty quickly, most of them stuck in year 2005~2007. For a publicly available remote API, a well-adopted and "mature" protocol is a much better  choice.&lt;br /&gt;&lt;br /&gt;What about the Spring beans stuff mentioned in the topic? I found the &lt;a href="http://ws.apache.org/xmlrpc/server.html"&gt;Apache XML-RPC server &lt;/a&gt;can't be integrated with Spring naturally (it has but not enough of bean property methods)  and the API is quite ugly, e.g. &lt;a href="http://ws.apache.org/xmlrpc/apidocs/org/apache/xmlrpc/metadata/XmlRpcSystemImpl.html#addSystemHandler%28org.apache.xmlrpc.server.PropertyHandlerMapping%29"&gt;&lt;tt&gt;XmlRpcSystemImpl.addSystemHandler()&lt;/tt&gt;&lt;/a&gt; takes a &lt;tt&gt;PropertyHandlerMapping&lt;/tt&gt;, why not &lt;tt&gt;XmlRpcListableHandlerMapping&lt;/tt&gt;?&lt;br /&gt;&lt;br /&gt;I took a similar approach suggested by Tomas Salfischberger in &lt;a href="http://www.celerity.nl/blog/2008/03/exporting-springbeans-with-xml-rpc/"&gt;his blog&lt;/a&gt; and here they are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An implementation of Spring's &lt;tt&gt;AbstractController&lt;/tt&gt;.&lt;/li&gt;&lt;li&gt;An extension of &lt;tt&gt;PropertyHandlerMapping&lt;/tt&gt;, this bean is used by the previous.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre style="overflow: scroll;"&gt;public class MyXmlRpcController extends AbstractController {&lt;br /&gt; private XmlRpcServletServer server = new XmlRpcServletServer();&lt;br /&gt; private boolean introspectionEnabled = false;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void initServletContext(ServletContext servletContext) {&lt;br /&gt;  super.initServletContext(servletContext);&lt;br /&gt;  if (this.introspectionEnabled) {&lt;br /&gt;   try {&lt;br /&gt;    XmlRpcSystemImpl.addSystemHandler((PropertyHandlerMapping) this.server.getHandlerMapping());&lt;br /&gt;   } catch (Exception e) {    &lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; @Override&lt;br /&gt; protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {&lt;br /&gt;  this.server.execute(request, response);&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt; @Required&lt;br /&gt; public void setHandlerMapping(XmlRpcHandlerMapping serverHandlerMapping) {&lt;br /&gt;  this.server.setHandlerMapping(serverHandlerMapping);&lt;br /&gt; }&lt;br /&gt; public void setIntrospectionEnabled(boolean introspectionEnabled) {&lt;br /&gt;  this.introspectionEnabled = introspectionEnabled;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class MyXmlRpcHandlerMapping extends PropertyHandlerMapping {&lt;br /&gt; private Map&lt;string, string=""&gt; serviceMap;&lt;br /&gt;&lt;br /&gt; public void init() throws XmlRpcException {&lt;br /&gt;  this.load(Thread.currentThread().getContextClassLoader(), serviceMap);&lt;br /&gt; }&lt;br /&gt; @Required&lt;br /&gt; public void setServicesMapping(Map&lt;string, string=""&gt; serviceMap) {&lt;br /&gt;  this.serviceMap = serviceMap;&lt;br /&gt; }&lt;br /&gt;}&lt;/string,&gt;&lt;/string,&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="overflow: scroll;"&gt;&amp;lt;bean id="xmlRpcHandlerMapping" class="my.MyXmlRpcHandlerMapping" init-method="init"&gt;&lt;br /&gt; &amp;lt;property name="servicesMapping"&gt;&lt;br /&gt;  &amp;lt;map&gt;&lt;br /&gt;   &amp;lt;entry key="membershipService" value="my.service.XmlRpcMembershipService"&gt;&amp;lt;/entry&gt;&lt;br /&gt;  &amp;lt;/map&gt;&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&amp;lt;bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;&lt;br /&gt; &amp;lt;property name="mappings"&gt;&lt;br /&gt;  &amp;lt;value&gt;/xmlrpc=xmlRpcController&amp;lt;/value&gt;&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&amp;lt;bean id="xmlRpcController" class="my.MyXmlRpcController"&gt;&lt;br /&gt; &amp;lt;property name="handlerMapping" ref="xmlRpcHandlerMapping"&gt;&amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="introspectionEnabled" value="true"&gt;&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-402481867820188372?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/402481867820188372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=402481867820188372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/402481867820188372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/402481867820188372'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/10/xml-rpc-vs-soap-vs-rest-thoughts-and.html' title='XML-RPC vs. SOAP vs. REST thoughts and Spring Beans'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3328416324045993441</id><published>2008-10-17T21:12:00.000-07:00</published><updated>2008-10-17T21:39:44.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><title type='text'>The guys behind the new Maybank2U, please read</title><content type='html'>Epic fail! For the past few days, I had been hearing people ranting about the new site in &lt;a href="http://search.twitter.com/search?q=maybank2u"&gt;Twitter&lt;/a&gt;, Facebook and my IM.&lt;br /&gt;&lt;br /&gt;I haven't been using my Maybank account (basically abandoning it unless there's a need to M2U to some friends for convenience sake, oh.. and, it has more ATM machines than HSBC that is true) for the past 2 months ever since I changed my job.&lt;br /&gt;&lt;br /&gt;As I am NOW doing some book keeping, as well as to experience the pain others are suffering, I convinced myself to log into the site. Clicking on "Transaction History", the cool Ajaxy waiting icon appeared and.. woohoo, a few 10 seconds later:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_T7lTXNh-_S8/SPlkOU80-fI/AAAAAAAAAIo/Ljy5bgzbVaI/s1600-h/screenshot53.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_T7lTXNh-_S8/SPlkOU80-fI/AAAAAAAAAIo/Ljy5bgzbVaI/s400/screenshot53.png" alt="" id="BLOGGER_PHOTO_ID_5258344237236550130" border="0" /&gt;&lt;/a&gt;Ah, &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ArrayIndexOutOfBoundsException.html"&gt;ArrayIndexOutOfBoundsException&lt;/a&gt;, caused by a &lt;a href="http://struts.apache.org/1.x/apidocs/org/apache/struts/tiles/taglib/InsertTag.html"&gt;JSP tag&lt;/a&gt;. I don't want to know what else they're doing with Struts and in the JSP, but surely, these guys wrote some shit to make almost every customer suffers.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3328416324045993441?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3328416324045993441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3328416324045993441' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3328416324045993441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3328416324045993441'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/10/guys-behind-new-maybank2u-please-read.html' title='The guys behind the new Maybank2U, please read'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_T7lTXNh-_S8/SPlkOU80-fI/AAAAAAAAAIo/Ljy5bgzbVaI/s72-c/screenshot53.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3594386702221577818</id><published>2008-10-13T01:42:00.000-07:00</published><updated>2008-10-13T02:39:22.732-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='meme'/><title type='text'>I love Java</title><content type='html'>Love? Love comes with struggles, frustrations, hate; it's unconditional. There's this "&lt;a href="http://foss.my/buzz/i-love-foss/"&gt;I Love *&lt;/a&gt;" meme initiated by the folks at foss.my and in supporting of it and to show my love to the programming language and its community:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_T7lTXNh-_S8/SPMUi-xPvsI/AAAAAAAAAIg/t9uf3erAN-I/s1600-h/foss-love-java.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 385px; height: 261px;" src="http://4.bp.blogspot.com/_T7lTXNh-_S8/SPMUi-xPvsI/AAAAAAAAAIg/t9uf3erAN-I/s400/foss-love-java.png" alt="" id="BLOGGER_PHOTO_ID_5256567781269159618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I love Java for how advanced it is, for the standards (see &lt;a href="http://en.wikipedia.org/wiki/Java_Community_Process"&gt;JCP and JSRs&lt;/a&gt;) that have been defined, for the &lt;a href="http://en.wikipedia.org/wiki/Java_Runtime_Environment#Support_for_dynamic_Languages"&gt;other languages&lt;/a&gt; that you can run on top of it, for its &lt;a href="http://repo1.maven.org/maven2"&gt;rich frameworks and libraries&lt;/a&gt;, ...&lt;br /&gt;&lt;br /&gt;I hate Java, for the same reasons too. :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; The Sun's Java Virtual Machine (runtime) is called HotSpot. It is released under &lt;a href="http://www.gnu.org/copyleft/gpl.html"&gt;GPL&lt;/a&gt;, it wasn't.. &lt;a href="http://www.sun.com/2006-1113/feature/story.jsp"&gt;before November 2006&lt;/a&gt;. Here is &lt;a href="http://en.wikipedia.org/wiki/List_of_Java_virtual_machines"&gt;a list of JVM implementations&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3594386702221577818?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3594386702221577818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3594386702221577818' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3594386702221577818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3594386702221577818'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/10/i-love-java.html' title='I love Java'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_T7lTXNh-_S8/SPMUi-xPvsI/AAAAAAAAAIg/t9uf3erAN-I/s72-c/foss-love-java.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3044697999456529266</id><published>2008-10-04T22:05:00.000-07:00</published><updated>2008-10-05T01:51:55.453-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='crap'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Let's complain about the local taxi service!</title><content type='html'>In a yumcha session last week, my friends told me that the taxi service in &lt;a href="http://www.google.com/search?q=malaysia+boleh"&gt;our country&lt;/a&gt; has recently been rated as the worst in the region. This morning, one of my friends shared &lt;a href="http://news.sg.msn.com/lifestyle/article.aspx?cp-documentid=1682889"&gt;this article&lt;/a&gt; in Facebook, which is on the same topic.&lt;br /&gt;&lt;br /&gt;The past 2 months, I have been driving frequently than I ever had before. I hate (hated, hate still) driving because it adds one more car to the already-busy traffic, it pollutes the environment, it causes fuel depletion too. For these reasons, I always took taxi last time (for years), because I didn't travel much.. I didn't feel the pain although I ranted about it sometimes.&lt;br /&gt;&lt;br /&gt;What're the problems? Two problems:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The taxi drivers never use the meter if you're traveling from one town to another. Say, Setapak to Mid Valley, Chow Kit to One Utama, KLCC to anywhere, etc.&lt;/li&gt;&lt;li&gt;Most Malaysians do not queue (esp. couples), I usually shout to stop them from taking my taxi.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I drive because I travel far these days and I got enough of being ripped off by the taxi drivers. But that doesn't solve the problem I faced and other people are facing. So, inspired by &lt;a href="http://www.openmalaysiablog.com/2008/08/lets-complain-a.html"&gt;OpenMalaysia's Yoon Kit&lt;/a&gt;, I decided to &lt;a href="http://e-aduan.kpdnhep.gov.my/"&gt;&lt;span style="font-weight: bold;"&gt;lodge a complain&lt;/span&gt; to the ministry of domestic trade and consumer affairs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Please &lt;a href="http://e-aduan.kpdnhep.gov.my/"&gt;join me&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_T7lTXNh-_S8/SOhQhDVn9OI/AAAAAAAAAHw/nZSOu-YC4-M/s1600-h/screenshot49.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_T7lTXNh-_S8/SOhQhDVn9OI/AAAAAAAAAHw/nZSOu-YC4-M/s400/screenshot49.png" alt="" id="BLOGGER_PHOTO_ID_5253537494089594082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The local taxi service has gotten out of control to the extent that we are now rated as the worst country in taxi service provision in the region. We're also featured in the MSN Singapore News&amp;lt;http://news.sg.msn.com/lifestyle/article.aspx?cp-documentid=1682889&amp;gt; too.&lt;br /&gt;&lt;br /&gt;I am a residence of Kuala Lumpur and the situation has become worse to me these days as I have to travel frequently than I ever had to, to/from Mid Valley, 1 Utama, KLCC, etc.&lt;br /&gt;&lt;br /&gt;The taxi drivers never follow the meter, every time I travel to/from these places, I have to bargain for a good price in order to get into the cab. At the first place, it is so wrong for them to break the rules, secondly, it has made me to look like a an idiot for so many times by walking from one taxi to another. There was once in Mid Valley that I had to try seven taxis.&lt;br /&gt;&lt;br /&gt;Another issue is that, most general passengers do not use the queue and taxi drivers just stop their car before the station when someone waves their hand at another end.&lt;br /&gt;&lt;br /&gt;Can someone do something about it? It's not just hurting the local consumers, it's also tarnishing the image of our country because tourists don't really love it too.&lt;/blockquote&gt;&lt;br /&gt;Act now!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;From @yoonkit:&lt;/span&gt; @yclian you may need to &lt;span style="font-weight: bold;"&gt;name specific taxi companies and events&lt;/span&gt;, otherwise they won't know how to react.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3044697999456529266?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3044697999456529266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3044697999456529266' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3044697999456529266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3044697999456529266'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/10/lets-complain-about-local-taxi-service.html' title='Let&apos;s complain about the local taxi service!'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_T7lTXNh-_S8/SOhQhDVn9OI/AAAAAAAAAHw/nZSOu-YC4-M/s72-c/screenshot49.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3378565675313630849</id><published>2008-09-23T22:51:00.000-07:00</published><updated>2010-08-11T01:22:22.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><title type='text'>Aflexi (CDN) Prelaunch</title><content type='html'>The CDN project that I am working on - &lt;a href="http://www.aflexi.net/"&gt;Aflexi&lt;/a&gt;, is now on prelaunch. There are two videos added to the website:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Webmasters - &lt;a href="#"&gt;http://www.aflexi.net/pages/webmasters&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Webhosts - &lt;a href="#"&gt;http://www.aflexi.net/pages/webhosts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Feel free to leave your comment there and &lt;a href="http://www.aflexi.net/tyfs/main/invitation?url=http%3A%2F%2Fwww.aflexi.net%2F"&gt;share with your friends&lt;/a&gt; about us too. :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Updated:&lt;/b&gt; Removed the links below as the videos are no longer there. &lt;a href="http://www.aflexi.net/products/publishers"&gt;Go here&lt;/a&gt; instead.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3378565675313630849?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3378565675313630849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3378565675313630849' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3378565675313630849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3378565675313630849'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/09/aflexi-prelaunch.html' title='Aflexi (CDN) Prelaunch'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-9121837203615353929</id><published>2008-09-18T08:06:00.000-07:00</published><updated>2008-09-18T08:16:40.706-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Unable to open this mailbox</title><content type='html'>I just set up courier-imap on my machine but I couldn't open the INBOX:&lt;br /&gt;&lt;pre&gt;2 SELECT INBOX&lt;br /&gt;2 NO Unable to open this mailbox.&lt;/pre&gt;I thought it would be a permission problem but the dirs are set with 700. I also read that it could be the server's date time, which didn't seem to be the case at all.. I then bumped into &lt;a href="http://ubuntuforums.org/showthread.php?t=758638"&gt;this thread&lt;/a&gt; in the Ubuntu forum to find out that I should have used &lt;tt&gt;maildirmake&lt;/tt&gt; command to create the maildir, bah.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-9121837203615353929?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/9121837203615353929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=9121837203615353929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/9121837203615353929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/9121837203615353929'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/09/unable-to-open-this-mailbox.html' title='Unable to open this mailbox'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1688477895958190610</id><published>2008-09-17T07:47:00.000-07:00</published><updated>2008-09-17T07:52:41.726-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Invitation to Bloggers Buff 2008</title><content type='html'>A blogging forum/workshop for Malaysians is back this year. Read more about it at &lt;a href="http://www.bloggersbuff.blogspot.com/"&gt;its website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1688477895958190610?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1688477895958190610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1688477895958190610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1688477895958190610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1688477895958190610'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/09/invitation-to-bloggers-buff-2008.html' title='Invitation to Bloggers Buff 2008'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4856602909115854409</id><published>2008-09-16T17:26:00.000-07:00</published><updated>2008-09-16T17:44:24.867-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><category scheme='http://www.blogger.com/atom/ns#' term='aop'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Seperating visual effects from HTML using jQuery</title><content type='html'>I remember reading Matt Ryall's blog on &lt;a href="http://www.mattryall.net/blog/2008/08/10-things-every-web-developer-should-know"&gt;10 things every web developer should know&lt;/a&gt;  a while back and I would like to highlight the clean code suggestion made there.&lt;br /&gt;&lt;br /&gt;I'm migrating the existing Aflexi website to Drupal and at one point I came across an existing code which.. is not too ugly but hard to be integrated into its &lt;a href="http://api.drupal.org/api/group/menu"&gt;Menu&lt;/a&gt; feature. The code has a few divs that jQuery uses to create &lt;a href="http://docs.jquery.com/Effects/slideDown"&gt;sliding effects&lt;/a&gt;, I could actually put them into the template &lt;tt&gt;page.tpl.php&lt;/tt&gt; but using jQuery to inject them at the end of page is certainly a better practice.&lt;br /&gt;&lt;br /&gt;So, in my &lt;tt&gt;template.php&lt;/tt&gt;, I have:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$js[] =&amp;lt;&amp;lt;JAVASCRIPT&lt;br /&gt;$('#nav').append('lots.of.divs'); // Here's the injection&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;  UiHelper.registerSlider('a.menu-1-1-2', '#sliderWso', '#pointerWso', 300);&lt;br /&gt;  ...&lt;br /&gt;});&lt;br /&gt;JAVASCRIPT;&lt;br /&gt;  drupal_add_js(join("\n",$js), 'inline');&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;By the way, I make the divs a one liner using:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo 'paste your html' | tr -d '\n'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then, talking about injection, this is brought into my attention as well - &lt;a href="http://code.google.com/p/jquery-aop/"&gt;jQuery-AOP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4856602909115854409?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4856602909115854409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4856602909115854409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4856602909115854409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4856602909115854409'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/09/seperating-visual-effects-from-html.html' title='Seperating visual effects from HTML using jQuery'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1562700004406048672</id><published>2008-08-16T23:06:00.000-07:00</published><updated>2008-08-16T23:17:48.928-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='m$'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><title type='text'>Victim of Silverlight, Thanks to NBCOlympics</title><content type='html'>I missed &lt;a href="http://www.sfgate.com/cgi-bin/article.cgi?f=/n/a/2008/08/15/sports/s233401D73.DTL&amp;amp;feed=rss.business"&gt;Phelps' incredible match&lt;/a&gt; which he historically tied Spitz's record. I then had to look for the replay online (it could be on the TV some time, but I'm not sure when).&lt;br /&gt;&lt;br /&gt;I bumped into the &lt;a href="http://www.nbcolympics.com/video/share.html?videoid=0816_HD_SWB_HL_L0673"&gt;NBC Olympics page&lt;/a&gt; but unfortunately the site doesn't support Linux users.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_T7lTXNh-_S8/SKfBHRZPVNI/AAAAAAAAAG4/_Ee-3xBC6ys/s1600-h/firefox-linux-unsupported.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_T7lTXNh-_S8/SKfBHRZPVNI/AAAAAAAAAG4/_Ee-3xBC6ys/s400/firefox-linux-unsupported.png" alt="" id="BLOGGER_PHOTO_ID_5235365422514001106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I wondered why, 'til I logged into a Windows machine to view it remotely and found out that the NBC site is using &lt;a href="http://silverlight.net/"&gt;&lt;span style="font-weight: bold;"&gt;Silverlight&lt;/span&gt;&lt;/a&gt;, bah. I have heard of &lt;a href="http://www.mono-project.com/Moonlight"&gt;Moonlight&lt;/a&gt; but I don't think I will invest any time now to find out how to get this video working on my machine. (Separation of concern, hey)&lt;br /&gt;&lt;br /&gt;If Microsoft wants to win this RIA game, they gotta make it work on the Linux platform.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1562700004406048672?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1562700004406048672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1562700004406048672' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1562700004406048672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1562700004406048672'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/08/victim-of-silverlight-thanks-to.html' title='Victim of Silverlight, Thanks to NBCOlympics'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_T7lTXNh-_S8/SKfBHRZPVNI/AAAAAAAAAG4/_Ee-3xBC6ys/s72-c/firefox-linux-unsupported.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1602738950165507856</id><published>2008-08-15T03:39:00.000-07:00</published><updated>2008-08-15T06:09:58.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='crap'/><title type='text'>Unprofessional Support-Fu, Let's Talk about It</title><content type='html'>&lt;a href="http://media-mobi.com/en/?play-2xr9et60xd1h24mfh6ljmoag29kfad22"&gt;Check this out&lt;/a&gt;. A 22-minute call from an angry customer to the Astro customer service. Most people would say that the customer was being unreasonable and having unbalanced hormones. But I have a different opinion -- that's very bad customer service by Astro.&lt;br /&gt;&lt;br /&gt;I am a nasty and very-nice customer, it all depends on the issue am having and how the personnel speaks to me (of course, the same to most people too). I always dial the hotlines whenever I have something to complain or to inquire or I feel that I need to talk a bit with someone on a good afternoon. Always, really. To the extent that my colleagues questioned me a few times if I was simply too free.&lt;br /&gt;&lt;br /&gt;At the same time, for the past 2 years, I worked on two support projects, providing technical support to customers around the globe. I was trained and I was also responsible to train new guys to come into this field.&lt;br /&gt;&lt;br /&gt;My experiences with TM and Astro were usually bad. And what would I say for this case? Terribly handled. This case could be resolved in 2 to 3 minutes and it was ridiculous to drag it 'til more than 22 minutes 31 seconds.&lt;br /&gt;&lt;br /&gt;To handle this emotional customer, Jeeva should:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Apologize for the misunderstanding ("that's your problem, I can't..")&lt;/li&gt;&lt;li&gt;Not question / argue with the customer, there's no rationality at another end dude. Be polite and say "I'm sorry" to calm her down, and bring her back to the point. What do the customers need? Solution.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Not keep quiet to dilly-dally the call.&lt;/li&gt;&lt;li&gt;Escalate! Or maybe not, because it would have been settled if Jeeva had better support-fu.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I always like the &lt;a href="http://blogs.atlassian.com/rebelutionary/archives/2007/11/parenthood_product_management_and_pain.html"&gt;Atlassian's core value #3&lt;/a&gt; - "&lt;span style="font-weight: bold;"&gt;Don't fuck the customer.&lt;/span&gt;" Seriously don't. If you ever want to do it, do it in the nice way.&lt;br /&gt;&lt;br /&gt;- yc, bloody hell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1602738950165507856?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1602738950165507856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1602738950165507856' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1602738950165507856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1602738950165507856'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/08/unprofessional-support-fu-lets-talk.html' title='Unprofessional Support-Fu, Let&apos;s Talk about It'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5475381326331276101</id><published>2008-08-02T17:22:00.000-07:00</published><updated>2008-08-02T17:28:20.927-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Can't Delete Recurring Events in Google Calendar</title><content type='html'>In my Google Calendar, I have a bunch of recurring events from a project calendar that were moved to my default calendar when the calendar was removed, strange. When I tried to delete them by selecting "All Events in the Series", it came back with an unhelpful error message: "An error has occurred. Please try again later."&lt;br /&gt;&lt;br /&gt;I followed the &lt;a href="http://groups.google.com/group/google-calendar-help-bugs/msg/4c7b7caa4b967c1c"&gt;suggestion in the mailing list&lt;/a&gt; and it managed to solve my problem. Basically,&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Export my calendar to an iCal file.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Delete my calendar / all events of it.&lt;/li&gt;&lt;li&gt;Import the iCal into my calendar.&lt;/li&gt;&lt;/ol&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5475381326331276101?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5475381326331276101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5475381326331276101' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5475381326331276101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5475381326331276101'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/08/cant-delete-recurring-events-in-google.html' title='Can&apos;t Delete Recurring Events in Google Calendar'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1472249740154049484</id><published>2008-07-30T16:13:00.000-07:00</published><updated>2008-09-16T17:45:18.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web-design'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Sliding down, Scriptaculous and jQuery</title><content type='html'>Haven't been hacking JavaScript "seriously" after a few years, I got myself back into doing it two days ago. I wanted a slide up/down effect on a panel when a button is hovered.&lt;br /&gt;&lt;br /&gt;I first came across the &lt;a href="http://github.com/madrobby/scriptaculous/wikis/effect-slidedown"&gt;Scriptaculous&lt;/a&gt; but &lt;a href="http://twitter.com/yclian/statuses/872068223"&gt;I wasn't satisfied with the size of the JS files&lt;/a&gt;, Scriptaculous+Prototype+jQuery, as I use &lt;a href="http://jquery.com/demo/thickbox/"&gt;Thickbox&lt;/a&gt; as well (too bad, &lt;a href="http://www.nickstakenburg.com/projects/lightview/"&gt;Lightview&lt;/a&gt; is not free).&lt;br /&gt;&lt;br /&gt;I received some questions in Twitter and Facebook about "why both?", so I knew I needed a change unless I had a good reason. I then spent a bit of time in the morning to read the &lt;a href="http://docs.jquery.com/Events/hover"&gt;jQuery's documentation&lt;/a&gt; and found out that it's easier to get this done with it.&lt;br /&gt;&lt;br /&gt;Here's the code comparison:&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;jQuery's Snip&lt;/h4&gt;&lt;pre&gt;jQuery(document).ready(function(){&lt;br /&gt;jQuery("#woPageSelector").hover( function(){ jQuery("#woPageSelectorContent").slideDown(300); }, function(){ jQuery("#woPageSelectorContent").slideUp(300); } );&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Scriptaculous' Snip&lt;/h4&gt;&lt;pre&gt;var mouseOverHandler = function(event) {&lt;br /&gt;$('wpPageSelectorContent').slideDown({duration: 0.5, queue: {position: 'end', scope: 'pageSelectorsPanel', limit: 2}});&lt;br /&gt;$('woPageSelector').stopObserving('mouseover', mouseOverHandler);&lt;br /&gt;document.observe('mouseover', mouseOutHandler);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var mouseOutHandler = function(event) {&lt;br /&gt;$('wpPageSelectorContent').slideUp({duration: 0.5, queue: {position: 'end', scope: 'pageSelectorsPanel', limit: 2}});&lt;br /&gt;$('wpPageSelector').observe('mouseover', mouseOverHandler);&lt;br /&gt;document.stopObserving('mouseover', mouseOutHandler);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$('wpPageSelector').observe('mouseover', mouseOverHandler);&lt;/pre&gt;&lt;br /&gt;By the way, if you really have to use Prototype and jQuery at the same time, you may want to &lt;a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries"&gt;read this page&lt;/a&gt; to prevent conflicts.&lt;br /&gt;&lt;br /&gt;- yc, woohoo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1472249740154049484?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1472249740154049484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1472249740154049484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1472249740154049484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1472249740154049484'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/sliding-down-scriptaculous-and-jquery.html' title='Sliding down, Scriptaculous and jQuery'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7395860932748760846</id><published>2008-07-27T04:43:00.000-07:00</published><updated>2008-07-27T22:23:31.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='barcampmalaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Second Day of BarCamp Malaysia - Awesome!</title><content type='html'>The second day of BarCamp was simply.. Awesome! I talked about being a newbie wireless user yesterday and I have another newbie experience today on OpenOffice Presentation. We are newbies in certain areas of our life at every single day to learn new things, aren't we?&lt;br /&gt;&lt;br /&gt;I started my day by attending a wireless network hacking session by the iTrain guys. A very great and rich session indeed, with a speaker who couldn't stop reminding us that he has a longer toy than us, he showed a number of tools to make wireless hacking easier. And not to forget, Linux is the best platform to launch attacks. It's a shame that the demo didn't work and the session dragged quite a while to make my slot left with 30 minutes time.&lt;br /&gt;&lt;br /&gt;Yes, my talk on CDN fell in the same lecture room. Being a big fan of Steve Jobs' style presentation, I made &lt;b&gt;&lt;a href="http://www.mediafire.com/?sharekey=732b240917e97380d5a101cf914073b4d3309e8610ee6f53"&gt;my slides&lt;/a&gt;&lt;/b&gt; as clean as possible with just keywords, although I didn't deliver a smooth one like his (hopefully next time), thanks God that the &lt;a href="http://twitter.com/yclian/statuses/869240657"&gt;decision to make the presentation short&lt;/a&gt; saved me from rushing given such limited time (of course, the reason wasn't to run into Ditesh's talk but to have more QnA and interactions).&lt;br /&gt;&lt;br /&gt;Followed by it, it was Talat's talk on "Hidden Impact of Higher Mathematics on the World Wide Web". Talat and his talk reminded me of the &lt;a href="http://www.imdb.com/title/tt0488604/"&gt;Oxford Murders&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After having our Subway lunch, I ran into (once again) the Lecture Room 1 as Kamal and Aizat planned to run a &lt;a href="http://en.wikipedia.org/wiki/Lightning_talk"&gt;ligthning talk&lt;/a&gt; session there. So, when I thought I would finish up my day all in Lecture Room 1, we got the news that &lt;a href="http://twitter.com/aizatto/statuses/869620614"&gt;the session got forked&lt;/a&gt; and we just merged with folks in another room.. which started with a talk on hiding &lt;s&gt;porn&lt;/s&gt; video files.&lt;br /&gt;&lt;br /&gt;It's so excited to see how much information people could share in that one hour time!&lt;br /&gt;&lt;br /&gt;- yc, in and out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7395860932748760846?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7395860932748760846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7395860932748760846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7395860932748760846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7395860932748760846'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/second-day-of-barcamp-malaysia-awesome.html' title='Second Day of BarCamp Malaysia - Awesome!'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7987495493745468966</id><published>2008-07-26T04:03:00.000-07:00</published><updated>2008-07-26T07:17:19.843-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='barcampmalaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>First Day of BarCamp Malaysia</title><content type='html'>Was ruined, by my own paranoia, which I will talk about it later.&lt;br /&gt;&lt;br /&gt;Quickly run through, my camping started from Gavin Bong's "Google Android" talk. A pure technical talk on Android which got us hanging to decide whether we shall go for this toy.&lt;br /&gt;&lt;br /&gt;The second and third talk that I attended fell in the same time in the schedule, Chee Seng "Flex and JRuby on Rails" and Yoon Kit's "The OpenMalaysiaBlog Story", attended just half of each of them. I liked how Yoon Kit's presented the stories in a mind-mapping-like diagram.&lt;br /&gt;&lt;br /&gt;As I slept pretty late last night, my brain wasn't in any good condition to absorb more knowledge, I ended up looking for my friend in a Silverlight's talk, by the Silverlight guy. I &lt;a href="http://blog.yclian.com/2007/09/micro-softening-arvo-sembang.html"&gt;blogged about Silverlight&lt;/a&gt; last year by the way. The product is quite interesting, slides were pretty, but the presentation was pretty screwed as the speaker came late and more than 50% of the slides were skipped.&lt;br /&gt;&lt;br /&gt;The fifth talk, "Mobile Future" by Henry from Nokia. This is the talk that got me (bored) to hook into the IRC to chat with the #myoss guys. What went wrong? Henry was not actually being at the wrong place but there were just too many technical guys being in the room to generate him some problems.&lt;br /&gt;&lt;br /&gt;IRC? I then realized that I have some applications running and they were trying to authenticate with servers and some of them were using plain text authentication. If they were ever sent, they were sent to the network set up by &lt;a href="http://blog.kagesenshi.org/"&gt;KageSenshi&lt;/a&gt;. Browsing is pretty safe on this laptop, as everything is tunneled over SSH to a server, but not other applications! I was not sure at all how they worked, but I could guess that the applications would check for availability of the servers before sending authentication information.&lt;br /&gt;&lt;br /&gt;Now, why waste time guessing if I could just run back home with a cab in 10 minutes? That's how I finished my camping today. Can't blame KageSenshi if he really got my passwords. ;-) Of course, the biggest mistake was ever telling him that it happened. That was really &lt;a href="http://twitter.com/yclian/statuses/868825410"&gt;a stupid ~20-minute&lt;/a&gt;, everything uses SOCKS now at my end and I feel &lt;a href="http://www.youtube.com/watch?v=laoq1eeIUxQ"&gt;fitter and happier&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm done, first-day Barcamp journey of a newbie wireless user.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7987495493745468966?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7987495493745468966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7987495493745468966' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7987495493745468966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7987495493745468966'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/first-day-of-barcamp.html' title='First Day of BarCamp Malaysia'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-608308452185957913</id><published>2008-07-25T11:31:00.000-07:00</published><updated>2008-07-25T11:41:45.135-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Things do Go Wrong Sometimes</title><content type='html'>Chuk Munn is a Sun Evangelist who I met last week, a comment from him in the Malaysian Java User Group lately, however, went very wrong and was found in strong disagreement by a number of us.&lt;br /&gt;&lt;br /&gt;It's &lt;a href="http://tech.groups.yahoo.com/group/myjug/message/7682"&gt;a topic on class-loading&lt;/a&gt; which he shared based on his past experience that "(you shall) never use a functionality from an open source project if it is available unless you absolutely have to."&lt;br /&gt;&lt;br /&gt;I'm not sure what he was trying to sell, maybe the &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/logging/overview.html"&gt;Java Logging API&lt;/a&gt; provided by the SDK versus &lt;a href="http://logging.apache.org/log4j/"&gt;Log4J&lt;/a&gt;. But certainly from me, I would rather put the blame on the container of not doing a good isolation work instead of blaming open source.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-608308452185957913?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/608308452185957913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=608308452185957913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/608308452185957913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/608308452185957913'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/things-do-go-wrong-sometimes.html' title='Things do Go Wrong Sometimes'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-6572250829018429128</id><published>2008-07-23T19:22:00.000-07:00</published><updated>2008-07-23T19:32:38.321-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Ubuntu Hardy Update Freezes during "Generating locales..."</title><content type='html'>I was upgrading a Ubuntu machine at work yesterday, it froze while it set up the locales:&lt;br /&gt;&lt;pre&gt;Setting up locales (2.7.9-4) ...&lt;br /&gt;Generating locales...&lt;br /&gt;en_AU.UTF-8...&lt;br /&gt;&lt;br /&gt;(you can go for a coffee now, like, taking a shower and drive down to the town to buy it from Starbucks)&lt;/pre&gt;&lt;br /&gt;I killed &lt;tt&gt;dpkg&lt;/tt&gt; and restarted the set up but it didn't help. More errors while after packages were being set up:&lt;br /&gt;&lt;pre&gt;perl: warning: Setting locale failed.&lt;/pre&gt;&lt;br /&gt;I didn't get a good response from the #ubuntu channel but some Googling got me to bump into this &lt;a href="http://ubuntuforums.org/showthread.php?t=865679"&gt;forum topic&lt;/a&gt;. There are a number of solutions being suggested in the topic, what worked for me was by booting into the recovery mode to run the package manager again.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-6572250829018429128?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/6572250829018429128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=6572250829018429128' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6572250829018429128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6572250829018429128'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/ubuntu-hardy-update-freezes-during.html' title='Ubuntu Hardy Update Freezes during &quot;Generating locales...&quot;'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3986758365591989557</id><published>2008-07-22T01:35:00.000-07:00</published><updated>2008-07-22T02:07:41.946-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>"Shutting down" the RMI Registry</title><content type='html'>This blog is a quick tip to shut down the RMI registry. Something I encountered just now while &lt;a href="http://mule.mulesource.org/jira/browse/MULE-3560"&gt;writing the &lt;tt&gt;tearDown()&lt;/tt&gt; method for a test case&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When a RMI registry has already been created (via &lt;tt&gt;LocateRegistry.createRegistry()&lt;/tt&gt;), re-creating it will give you an &lt;tt&gt;ExportException&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;java.rmi.server.ExportException: internal error: ObjID already in use&lt;br /&gt;    at sun.rmi.transport.ObjectTable.putTarget(ObjectTable.java:169)&lt;br /&gt;    at sun.rmi.transport.Transport.exportObject(Transport.java:74)&lt;br /&gt;    at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:229)&lt;br /&gt;    at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:393)&lt;br /&gt;    at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:129)&lt;br /&gt;    at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:190)&lt;br /&gt;    at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:92)&lt;br /&gt;    at sun.rmi.registry.RegistryImpl.&amp;lt;init&amp;gt;(RegistryImpl.java:78)&lt;br /&gt;    at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:186)&lt;br /&gt;    at org.mule.transport.rmi.RmiMessageReceiverTestCase.registerRmi(RmiMessageReceiverTestCase.java:126)&lt;/pre&gt;&lt;br /&gt;Yes, you can't create the same registry twice, therefore you may want to dispose the previous one after every test (not actually necessary, as you could just share the same instance for all tests). An RMI registry can be disposed with the &lt;tt&gt;UnicastRemoteObject.unexportObject()&lt;/tt&gt; method, by passing the &lt;tt&gt;Registry&lt;/tt&gt; object to the method argument. Take note that &lt;tt&gt;LocateRegistry.createRegistry()&lt;/tt&gt; and &lt;tt&gt;LocateRegistry.getRegistry()&lt;/tt&gt; give you a stub to the remote object as a different object, so please use the same reference returned from the &lt;tt&gt;createRegistry()&lt;/tt&gt; method.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3986758365591989557?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3986758365591989557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3986758365591989557' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3986758365591989557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3986758365591989557'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/shutting-down-rmi-registry.html' title='&quot;Shutting down&quot; the RMI Registry'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8673925942489629772</id><published>2008-07-21T08:12:00.000-07:00</published><updated>2008-07-21T08:34:06.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='myjug'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><title type='text'>A Networking Session with Sun / Java Evangelists</title><content type='html'>There was &lt;a href="http://tech.groups.yahoo.com/group/myjug/message/7636"&gt;an invitation sent to MyJUG&lt;/a&gt;, to a networking session with the Sun / Java Evangelists last Wednesday at Monash University. The turn-up wasn't that high and I reached there pretty late too, I guess everyone was pretty stuck at work or in the jam. Thanks Chee Seng for the ride, otherwise I would have stuck 'til the event had ended.&lt;br /&gt;&lt;br /&gt;Good to see familiar face like &lt;a href="http://www.bytebot.net/blog"&gt;Colin Charles&lt;/a&gt; (the MySQL guy) and Loke there, and finally met up with Monica Ng (the Marketing Communication Consultant of Sun). The evangelists in list anyway, were, Matt Thompson, Reginald Hutcherson, Lee Chuk Munn, Peter Karlsson, Colin and Naveen Asrani.&lt;br /&gt;&lt;br /&gt;Sitting alongside with the evangelists was fun. We started our technical conversation when Chee Seng introduced himself as a Flex guy. Chuk Munn and other folks started to bash Flex to promote &lt;a href="http://www.javafx.com/"&gt;JavaFx&lt;/a&gt;, something that &lt;a href="http://blog.yclian.com/2007/09/micro-softening-arvo-sembang.html"&gt;I did not show much interest on&lt;/a&gt; which I might give a try now after being told that the beta release will be a very fine product.&lt;br /&gt;&lt;br /&gt;We also touched on the performance enhancement of &lt;a href="http://java.sun.com/javase/downloads/ea/6u10/6u10beta.jsp"&gt;Java 6 SE Update 10&lt;/a&gt; as well as the new Open Solaris. We all left after some folks distributed the live CD of the OS.&lt;br /&gt;&lt;br /&gt;It would have been a greater event without the nearly 2-hour jam. Hopefully Sun will make it a weekend next time.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8673925942489629772?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8673925942489629772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8673925942489629772' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8673925942489629772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8673925942489629772'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/networking-session-with-sun-java.html' title='A Networking Session with Sun / Java Evangelists'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3269715947437287408</id><published>2008-07-21T08:04:00.000-07:00</published><updated>2008-07-21T09:05:36.422-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Catch Aflexi + CDN Talk in Barcamp Malaysia</title><content type='html'>Mentioned in &lt;a href="http://blog.yclian.com/2008/07/welcome-to-aflexi.html"&gt;my earlier blog&lt;/a&gt; that I will be presenting at &lt;a href="http://barcamp.my/blog/"&gt;Barcamp Malaysia&lt;/a&gt; this weekend (Sunday) on the topic "Content Delivery Network".&lt;br /&gt;&lt;br /&gt;The agenda shall go like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Problems of the current state of the Internet&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Introduction to CDN&lt;/li&gt;&lt;li&gt;Existing CDN Providers&lt;/li&gt;&lt;li&gt;Who use CDN?&lt;/li&gt;&lt;li&gt;Aflexi CDN model&lt;/li&gt;&lt;/ul&gt;I will put up the content of the slide as soon as I have completed it. Still fixing up stuff for prototype development here.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3269715947437287408?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3269715947437287408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3269715947437287408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3269715947437287408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3269715947437287408'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/catch-aflexi-cdn-talk-in-barcamp.html' title='Catch Aflexi + CDN Talk in Barcamp Malaysia'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1087624268268959279</id><published>2008-07-14T10:00:00.000-07:00</published><updated>2008-07-14T10:28:13.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><title type='text'>PropertyPlaceholderConfigurer.ignoreUnresolvablePlaceholders and my precious one hour</title><content type='html'>To speed up my prototyping process, I decided to use &lt;a href="http://mule.mulesource.org/"&gt;Mule&lt;/a&gt; to takecare of the integration of my core code with the persistence layer for me. Yes, basically I am lazy to write all the polling, updating, etc. This did not turn out good as I was stupidly assuming a startup problem a Mule issue and tried to fix it in the past 1 hour.&lt;br /&gt;&lt;br /&gt;So what was it about?&lt;br /&gt;&lt;br /&gt;I have a Mule configuration and also a Spring beans configuration which is used to configure datasource. &lt;tt&gt;PropertyPlaceholderConfigurer&lt;/tt&gt; is also defined in the Spring configuration to read a &lt;tt&gt;jdbc.properties&lt;/tt&gt; file and those properties will be filled into the datasource settings, e.g.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&amp;gt;&lt;br /&gt;&amp;lt;property name="driverClassName"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;${jdbc.driverClassName}&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property name="url"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;${jdbc.url}&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property name="username"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;${jdbc.username}&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property name="password"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;${jdbc.password}&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;br /&gt;Great, unit test goes easier now. Not yet.&lt;br /&gt;&lt;br /&gt;I have this JDBC query settings in my Mule configuration:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;jdbc:connector name="jdbcConnector" dataSource-ref="dataSource" pollingFrequency="5000"&amp;gt;&lt;br /&gt;&amp;lt;jdbc:query key="getSurrogateById" value="SELECT * FROM surrogate WHERE surrogateId=${header:test}" /&amp;gt;&lt;br /&gt;&amp;lt;/jdbc:connector&amp;gt;&lt;/pre&gt;&lt;br /&gt;Tried to start Mule, but it failed with this error:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;[07-15 00:47:34] ERROR AbstractConfigurationBuilder [main]: Configuration with "org.mule.config.spring.SpringXmlConfigurationBuilder" failed.&lt;br /&gt;org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'jdbcConnector' defined in null: Could not resolve placeholder 'header:test'&lt;br /&gt;at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:268)&lt;br /&gt;at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75)&lt;br /&gt;at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:554)&lt;br /&gt;at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:528)&lt;br /&gt;at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:363)&lt;br /&gt;at org.mule.config.spring.MuleApplicationContext.&amp;lt;init&amp;gt;(MuleApplicationContext.java:102)&amp;lt;/init&amp;gt;&lt;/pre&gt;&lt;br /&gt;Changing the Mule version didn't help (something stupid that I did), until I uncommented &lt;tt&gt;PropertyPlaceholderConfigurer&lt;/tt&gt;, Mule was able to start. That gave me the clue to look into the class (which I didn't have to as the stacktrace was obvious enough) to find out the &lt;tt&gt;ignoreUnresolvablePlaceholders&lt;/tt&gt; property.&lt;br /&gt;&lt;br /&gt;Bah.&lt;br /&gt;&lt;br /&gt;- yc, finished ranting&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1087624268268959279?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1087624268268959279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1087624268268959279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1087624268268959279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1087624268268959279'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/propertyplaceholderconfigurerignoreunre.html' title='PropertyPlaceholderConfigurer.ignoreUnresolvablePlaceholders and my precious one hour'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3352090135659465739</id><published>2008-07-08T01:50:00.000-07:00</published><updated>2008-07-08T01:58:47.682-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Configuring CNAME to SWURL</title><content type='html'>I just received a tweet about how did I configure www.yclian.com to point to yclian.swurl.com, something that I actually was stuck in a while. Here is a short blog about it.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Configure your DNS CNAME&lt;/span&gt;&lt;br /&gt;Create a new &lt;span style="font-style: italic;"&gt;CNAME&lt;/span&gt;, e.g. www, and point it to your SWURL's host, e.g. yclian.swurl.com.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Configure your SWURL&lt;/span&gt;&lt;br /&gt;Go to &lt;a href="http://www.swurl.com/settings"&gt;SWURL &gt; Settings&lt;/a&gt; and add set the &lt;span style="font-style: italic;"&gt;CNAME http://&lt;/span&gt; field to your new domain alias, e.g. www.yclian.com.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Clear enough? I actually found it from &lt;a href="http://swurl.swurl.com/ok_cnames_now_work_man_that_was_a_pain_138750.html"&gt;this conversation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3352090135659465739?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3352090135659465739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3352090135659465739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3352090135659465739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3352090135659465739'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/configuring-cname-to-swurl.html' title='Configuring CNAME to SWURL'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5098916470776362396</id><published>2008-07-07T04:02:00.001-07:00</published><updated>2008-07-07T04:17:01.734-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>How Generic Shall it Be?</title><content type='html'>I have been writing the protocol API using Java 1.5 these days. There are some tempting features to use, but I'm not sure how evil they will be.&lt;br /&gt;&lt;br /&gt;For instance, I use annotations to reflect clauses mentioned in the technical specifications:&lt;br /&gt;&lt;pre&gt;@TechnicalRecommendations("1.2.1.3")&lt;br /&gt;@PublishEvent(events={"UserNotification.EventType.ACCOUNT_CREATING", "UserNotification.EventType.ACCOUNT_CREATED"})&lt;br /&gt;public void createUser(User caller, User targetUser) throws PermissionException;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I also use the generic feature:&lt;br /&gt;&lt;pre&gt;public interface User&amp;lt;P extends Profile&amp;lt;?&gt; extends Entity&lt;br /&gt;public interface Profile&amp;lt;U extends User&amp;lt;?&gt;&gt; extends Entity&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That sounds a bit funny hey. I haven't yet found a good guide on how you should use generic smartly. Comments?&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5098916470776362396?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5098916470776362396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5098916470776362396' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5098916470776362396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5098916470776362396'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/how-generic-shall-it-be.html' title='How Generic Shall it Be?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8717334069648664166</id><published>2008-07-06T04:59:00.000-07:00</published><updated>2008-07-07T04:17:21.093-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Blog Ads == Sign of Immaturity</title><content type='html'>Feel free to disagree.&lt;br /&gt;&lt;br /&gt;I have never been a fan of putting blog ads in my blog, as you can see as well, I apply a plain and simple layout. This is due to one very fundamental belief that &lt;span style="font-weight: bold;"&gt;Web 2.0 is data driven&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I once stood up in a public forum to point out that, people should be utilizing tools to efficiently obtain information/data/feeds, web browser is just an option. One reason to go against using web browser to visit a blog or news site is the unnecessary download of images, JavaScript, stylesheets, etc.&lt;br /&gt;&lt;br /&gt;This belief has turned to an even-firm conviction as I started to use &lt;a href="http://yclian.swurl.com/"&gt;Swurl&lt;/a&gt; last week.&lt;br /&gt;&lt;br /&gt;It has been so many years, and it looks like people still need more time to adopt Web 2.0 in the "right" way. What about the ads companies? Maybe they have to find ways to inject ads into content when web/HTML presentation is abandoned.&lt;br /&gt;&lt;br /&gt;By the way, I made some DNS configurations, you can now reach &lt;span style="font-weight: bold;"&gt;me at yclian.com&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;My blog address is now:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.yclian.com/"&gt;http://blog.yclian.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;My Swurl page is at:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.yclian.com/"&gt;http://www.yclian.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;My (new) OpenID is at:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://id.yclian.com/me"&gt;http://id.yclian.com/me&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8717334069648664166?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8717334069648664166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8717334069648664166' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8717334069648664166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8717334069648664166'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/blog-ads-sign-of-immaturity.html' title='Blog Ads == Sign of Immaturity'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-704973598974578709</id><published>2008-07-04T19:57:00.000-07:00</published><updated>2008-07-04T20:15:04.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='aflexi'/><title type='text'>Welcome to Aflexi</title><content type='html'>Hi guys,&lt;br /&gt;&lt;br /&gt;I did not touch on this in &lt;a href="http://yclian.blogspot.com/2008/06/some-status-update.html"&gt;my status update&lt;/a&gt; a few weeks back. Anyway, here it is, I have left &lt;a href="http://www.customware.net/"&gt;CustomWare Asia Pacific&lt;/a&gt;, a company that I first joined after my undergraduate study and which certainly had shaped my career pretty well -- worked on Atlassian and MuleSource products.&lt;br /&gt;&lt;br /&gt;I am now starting a new business with my friends, a company called &lt;a href="http://www.aflexi.net/"&gt;Aflexi&lt;/a&gt;, with a goal to transform the current state of the Internet to a better one, with &lt;a href="http://en.wikipedia.org/wiki/Content_delivery_network"&gt;CDN&lt;/a&gt; (Content Delivery Network). I am holding the position of V.P. of Engineering and.. we're still working on the website, feel free to &lt;a href="http://www.twitter.com/aflexi"&gt;follow our Twitter here&lt;/a&gt;. Catch me in the &lt;a href="http://barcamp.my/"&gt;BarCamp Malaysia&lt;/a&gt; (first and ever) as well, there will be a session that I will be presenting CDN to the folks.&lt;br /&gt;&lt;br /&gt;Anyway, it is the birthday of Rob (founder/CEO of CustomWare) today, so.. happy birthday mate.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-704973598974578709?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/704973598974578709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=704973598974578709' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/704973598974578709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/704973598974578709'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/welcome-to-aflexi.html' title='Welcome to Aflexi'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1902895746678074010</id><published>2008-07-02T03:15:00.000-07:00</published><updated>2008-07-02T03:33:42.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='office'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>How opportunity is given to your team members? If you are given this common scenario.</title><content type='html'>Firstly, I am not facing such a problem now. The situation came into my mind and I was thinking about what would be the best solution(s), if it happens one day that I have to make such decision.&lt;br /&gt;&lt;br /&gt;I scrolled over my long list of MSN buddies, but I couldn't find the right people being in the right companies (true that, there's no perfect company and each company has its own culture) to answer my question. If there's any books that you can recommend, do let me know too.&lt;br /&gt;&lt;br /&gt;Here comes the question. Say, &lt;span style="font-weight: bold;"&gt;if you are a team leader who is running a small team and there is an opportunity which can only be given to only one team member&lt;/span&gt;. An opportunity could be, a chance to move to another project, or to lead a new sub-project in a team.&lt;br /&gt;&lt;br /&gt;Very common problem right? But I would like to know how differently people will handle this. Generally, the leader will short-list the potential ones from the team and make internal discussions with the superior and/or the candidates; or, instead of short-listing the guys, you make this information completely transparent to the team and let those who are interested to come back to you.&lt;br /&gt;&lt;br /&gt;I gave two suggestions above, but each comes with its own set problems. The first one could possibly kill the opportunities of others, the second one could generate more competition in the team, so..&lt;br /&gt;&lt;br /&gt;What will YOU do and suggest? And, what organization you are in? An open one? You may want to tell me how often do you share information with the team.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1902895746678074010?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1902895746678074010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1902895746678074010' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1902895746678074010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1902895746678074010'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/07/how-opportunity-is-given-to-your-team.html' title='How opportunity is given to your team members? If you are given this common scenario.'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3880663718169701817</id><published>2008-06-28T22:36:00.000-07:00</published><updated>2008-07-08T01:59:04.751-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Changing Context Path of Hudson</title><content type='html'>Just a quick tip for whoever wants to change the context path of Hudson stand-alone continuous integration server. &lt;a href="http://hudson.gotdns.com/wiki/display/HUDSON/Installation+and+Execution"&gt;It runs on Winstone&lt;/a&gt;, simply adds the &lt;tt&gt;--prefix=/${context.path}&lt;/tt&gt; to the start-up command.&lt;br /&gt;&lt;br /&gt;Yes, they named it "prefix".&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3880663718169701817?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3880663718169701817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3880663718169701817' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3880663718169701817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3880663718169701817'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/changing-context-path-of-hudson.html' title='Changing Context Path of Hudson'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1496944284410013970</id><published>2008-06-28T01:58:00.000-07:00</published><updated>2008-07-07T04:18:40.420-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>'publickey' SSH Authorization fails if 'authorized_keys' file is writable by non-owners</title><content type='html'>I didn't realize this. SSH kept prompting me to fill in password even though I forced it to use just '&lt;tt&gt;publickey&lt;/tt&gt;' authorization:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ ssh -i id_kimmy somewhere.com -v&lt;br /&gt;debug1: SSH2_MSG_SERVICE_REQUEST sent&lt;br /&gt;debug1: SSH2_MSG_SERVICE_ACCEPT received&lt;br /&gt;debug1: Authentications that can continue: publickey,password&lt;br /&gt;debug1: Next authentication method: publickey&lt;br /&gt;debug1: Offering public key: /home/yclian/.ssh/id_rsa&lt;br /&gt;debug1: Authentications that can continue: publickey,password&lt;br /&gt;debug1: Trying private key: /home/yclian/.ssh/identity&lt;br /&gt;debug1: Trying private key: /home/yclian/.ssh/id_dsa&lt;br /&gt;debug1: Next authentication method: password&lt;br /&gt;yclian@somewhere.com's password:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;ssh -i id_kimmy somewhere.com -o 'PreferredAuthentications publickey' -v&lt;br /&gt;debug1: SSH2_MSG_SERVICE_REQUEST sent&lt;br /&gt;debug1: SSH2_MSG_SERVICE_ACCEPT received&lt;br /&gt;debug1: Authentications that can continue: publickey,password&lt;br /&gt;debug1: Next authentication method: publickey&lt;br /&gt;debug1: Offering public key: /home/yclian/.ssh/id_rsa&lt;br /&gt;debug1: Authentications that can continue: publickey,password&lt;br /&gt;debug1: Trying private key: /home/yclian/.ssh/identity&lt;br /&gt;debug1: Trying private key: /home/yclian/.ssh/id_dsa&lt;br /&gt;debug1: No more authentication methods to try.&lt;br /&gt;Permission denied (publickey,password).&lt;/pre&gt;&lt;br /&gt;Fixed by revoking write permissions (&lt;tt&gt;chmod 700&lt;/tt&gt;) to the &lt;tt&gt;authrozied_keys&lt;/tt&gt; file. Very simple logic, brrr.&lt;br /&gt;&lt;br /&gt;Some links that I came across:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cvrti.utah.edu/%7Edustman/no-more-pw-ssh/"&gt;http://www.cvrti.utah.edu/~dustman/no-more-pw-ssh/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://kimmo.suominen.com/docs/ssh/"&gt;http://kimmo.suominen.com/docs/ssh/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html"&gt;http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1496944284410013970?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1496944284410013970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1496944284410013970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1496944284410013970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1496944284410013970'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/publickey-ssh-authorization-fails-if.html' title='&apos;publickey&apos; SSH Authorization fails if &apos;authorized_keys&apos; file is writable by non-owners'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-6985802557180412982</id><published>2008-06-27T05:31:00.000-07:00</published><updated>2008-07-07T04:17:57.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Maven does NOT support SOCKS for HTTP</title><content type='html'>I have a internal repository which can only be accessed through SOCKS, so I thought, if I set up a &lt;tt&gt;&amp;lt;proxy&amp;gt;&lt;/tt&gt; in &lt;tt&gt;settings.xml&lt;/tt&gt; with &lt;tt&gt;SOCKS_5&lt;/tt&gt; as its protocol, it shall work -- to download artifacts from the repository through the proxy. By the way, the documentation is not clear about what you should specify for the protocol. I used &lt;tt&gt;SOCKS_5&lt;/tt&gt; because &lt;a href="http://maven.apache.org/wagon/wagon-provider-api/apidocs/org/apache/maven/wagon/proxy/ProxyInfo.html"&gt;&lt;tt&gt;ProxyInfo&lt;/tt&gt;&lt;/a&gt; sounded right.&lt;br /&gt;&lt;br /&gt;After a few attempts, I realized from the error logs that Maven did not go through the SOCKS proxy I defined, it basically skipped it. I hooked my IDE to the process to for some debugging to realize that &lt;a href="http://maven.apache.org/wagon/"&gt;Wagon&lt;/a&gt; (the transport abstraction of Maven) chose to use &lt;a href="http://maven.apache.org/wagon/wagon-providers/wagon-http-lightweight/apidocs/org/apache/maven/wagon/providers/http/LightweightHttpWagon.html"&gt;&lt;tt&gt;LightweightHttpWagon&lt;/tt&gt;&lt;/a&gt; to download the artifacts and would only know how to deal with HTTP based proxy. Wagon chose it by looking up for &lt;a href="http://plexus.codehaus.org/"&gt;Plexus&lt;/a&gt; component with the &lt;tt&gt;role-hint&lt;/tt&gt; of &lt;tt&gt;http&lt;/tt&gt;, damn.&lt;br /&gt;&lt;br /&gt;I believe I could create a local repository by mounting the remote end using FUSE/&lt;tt&gt;sshfs&lt;/tt&gt;. I didn't anyway, I made &lt;a href="http://httpd.apache.org/"&gt;HTTPd&lt;/a&gt; to allow external connections to the repository with basic auth enabled (the server uses &lt;a href="http://archiva.apache.org/"&gt;Archiva&lt;/a&gt; anyway). That's quick and at least I wouldn't have to guess why &lt;tt&gt;scp&lt;/tt&gt; or &lt;tt&gt;file&lt;/tt&gt; wasn't working later.&lt;br /&gt;&lt;br /&gt;Playing with Maven is a pain, sometimes.. or most of the time if it doesn't work.&lt;br /&gt;&lt;br /&gt;P/S: If you can really make Maven to work with HTTP+SOCKS, let me know and tell me that I'm wrong.&lt;br /&gt;&lt;br /&gt;- yc&lt;/proxy&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-6985802557180412982?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/6985802557180412982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=6985802557180412982' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6985802557180412982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6985802557180412982'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/maven-does-not-support-socks-for-http.html' title='Maven does NOT support SOCKS for HTTP'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3747311915900599504</id><published>2008-06-16T05:14:00.000-07:00</published><updated>2008-07-07T04:18:55.354-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>WTF is wrong with RMI</title><content type='html'>&lt;p&gt;Yes, WTF is wrong with RMI. Taken from the "&lt;span class="nobr"&gt;&lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/rmi/getstart.doc.html" rel="nofollow"&gt;Getting Started using RMI&lt;/a&gt;&lt;/span&gt;" page:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; Before you start the rmiregistry, you must make sure that the shell or window in which you will run the registry either has no CLASSPATH set or has a CLASSPATH that does not include the path to any classes that you want downloaded to your client, including the stubs for your remote object implementation classes.&lt;/p&gt;  &lt;p&gt;If you start the rmiregistry, and it can find your stub classes in its CLASSPATH, it will ignore the server's java.rmi.server.codebase property, and as a result, your client(s) will not be able to download the stub code for your remote object. For an explanation of how code downloading works in RMI, please take a look at the tutorial on Dynamic code downloading using RMI. &lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;UPDATED: &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Omg :) That's documentation for 1.4.2. If you refer to &lt;a href="http://java.sun.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html"&gt;the latest one&lt;/a&gt;, it actually highlights on the classDir. So ultimately, my problem of not referring to a newer documentation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not paying much attention to these lines, it got me wasted a few valuable hours to get a simple example working. I have a &lt;tt&gt;Hello&lt;/tt&gt; interface and a &lt;tt&gt;HelloImpl&lt;/tt&gt; implementation with a main method in it to do the binding.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I kept getting either:&lt;/p&gt;&lt;pre&gt;java.lang.ClassNotFoundException: foo.Hello&lt;br /&gt;at java.net.URLClassLoader$1.run(URLClassLoader.java:200)&lt;br /&gt;at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;p&gt;and&lt;/p&gt;  &lt;div class="preformatted"&gt;&lt;div class="preformattedContent"&gt; &lt;pre&gt;java.lang.ClassNotFoundException: foo.HelloImpl_Stub&lt;br /&gt;at java.net.URLClassLoader$1.run(URLClassLoader.java:200)&lt;br /&gt;at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Whenever I ran:&lt;br /&gt;&lt;pre&gt;java -classpath classes/ foo.HelloImpl&lt;/pre&gt;&lt;p&gt;The error is misleading. It made me wondered why Java would complain about &lt;tt&gt;ClassNotFoundException&lt;/tt&gt; when those classes were in the classpath! To put that paragraph in bullet points:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Please set the &lt;tt&gt;CLASSPATH&lt;/tt&gt; variable before you run &lt;tt&gt;rmiregistry&lt;/tt&gt;, e.g.&lt;br /&gt;&lt;pre&gt;export CLASSPATH=classes/&lt;br /&gt;rmiregistry &amp;amp;&lt;br /&gt;java -classpath classes/ foo.HelloImpl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Or, please set the &lt;tt&gt;-Djava.rmi.server.codebase&lt;/tt&gt; system property to point to your classpath when you start your application, e.g.&lt;br /&gt;&lt;pre&gt;rmiregistry &amp;amp;&lt;br /&gt;java -Djava.rmi.server.codebase=file:classes/ -classpath classes/ foo.HelloImpl&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Yes, it was actually my problem of not reading the documentation clearly. But can't just the Java guys fix it so that it will pick up from the classpath without setting either the environment variable or system property?&lt;/p&gt;&lt;p&gt;- yc, rants!!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3747311915900599504?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3747311915900599504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3747311915900599504' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3747311915900599504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3747311915900599504'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/wtf-is-wrong-with-rmi.html' title='WTF is wrong with RMI'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7849047290472835943</id><published>2008-06-08T09:15:00.000-07:00</published><updated>2008-07-07T04:19:12.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Can't call method "value" on an undefined value at /usr/share/perl5/IO/Uncompress/RawInflate.pm line 64</title><content type='html'>I tried to install &lt;a href="http://www.socialtext.net/open/index.cgi?socialtext_open"&gt;SocialText Open&lt;/a&gt; about two weeks ago and it had then screwed up my CPAN. This is the error that showed whenever I tried to install a module:&lt;br /&gt;&lt;pre&gt;Can't call method "value" on an undefined value at /usr/share/perl5/IO/Uncompress/RawInflate.pm line 64&lt;/pre&gt;&lt;br /&gt;For not being a Perl user (I'm a Java guy after all and a Linux end-user), I went to #perl of irc.freenode.net to seek for some help and I was asked to raise a bug instead in the Ubuntu site. I didn't do it nor tried to fix it after that as I was stuck with other higher priority tasks.&lt;br /&gt;&lt;br /&gt;I have a little bit more time this afternoon so &lt;a href="http://www.google.com/search?q=Can%27t+call+method+%22value%22+on+an+undefined+value+at+%2Fusr%2Fshare%2Fperl5%2FIO%2FUncompress%2FRawInflate.pm+line+64"&gt;I asked Google for an answer&lt;/a&gt; and it appeared to have more results this time (two weeks ago, it had just two entries). That basically has concluded that this is a pretty new problem on Debian/Ubuntu.&lt;br /&gt;&lt;br /&gt;Removing &lt;tt&gt;libcompress-raw-zlib-perl&lt;/tt&gt; solved my problem, &lt;a href="http://nxadm.wordpress.com/2008/05/30/cpan-on-ubuntu-fails-on-bug-iouncompressrawinflatepm-solution/"&gt;as suggested by nxadm&lt;/a&gt;. You may also want to try other options provided by other blog readers if you hit into similiar issue.&lt;br /&gt;&lt;br /&gt;Good luck messing with Perl.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7849047290472835943?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7849047290472835943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7849047290472835943' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7849047290472835943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7849047290472835943'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/cant-call-method-value-on-undefined.html' title='Can&apos;t call method &quot;value&quot; on an undefined value at /usr/share/perl5/IO/Uncompress/RawInflate.pm line 64'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4729938056325059420</id><published>2008-06-07T03:09:00.000-07:00</published><updated>2008-07-07T04:19:26.884-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>PGP Signing and Encrypting Emails</title><content type='html'>In &lt;a href="http://www.customware.net/"&gt;our company&lt;/a&gt;, we use PGP to sign or sometimes encrypt emails due to the agreement with customers who demand high security. However, as for my personal mails, I have never put PGP into the equation.&lt;br /&gt;&lt;br /&gt;So I spent some time in the afternoon to set up PGP for my personal accounts (and got the chance to play around with revocation too). I got myself to set up &lt;a href="http://enigmail.mozdev.org/"&gt;Enigmail&lt;/a&gt; too, a Thunderbird extension to manage PGP keys and your mails with them. As a Linux user, I actually use &lt;a href="http://www.gnupg.org/"&gt;GnuPG&lt;/a&gt; more (and it works, I'm not sure why uploading keys to &lt;a href="http://pgp.mit.edu/"&gt;MIT server&lt;/a&gt; failed a few times on my browser and Enigmail) and here are the commands to share, for GnuPG and support for &lt;a href="http://www.openpgp.org/"&gt;OpenPGP&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;gpg --gen-key&lt;br /&gt;gpg --export yuenchi.lian@gmail.com &gt; yuenchi.lian@gmail.com.public.gpg&lt;br /&gt;gpg --export-secret-keys yuenchi.lian@gmail.com &gt; yuenchi.lian@gmail.com.private.gpg&lt;br /&gt;gpg --armor --export yuenchi.lian@gmail.com &gt; yuenchi.lian@gmail.com.pub.pgp&lt;br /&gt;gpg --armor --export-secret-keys yuenchi.lian@gmail.com &gt; yuenchi.lian@gmail.com.sec.pgp&lt;br /&gt;gpg --armor -a --export yuenchi.lian@gmail.com &gt; yuenchi.lian@gmail.com.pub.pgp.asc&lt;br /&gt;gpg --armor -a --export-secret-keys yuenchi.lian@gmail.com &gt; yuenchi.lian@gmail.com.sec.pgp.asc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Remember to protect these files, e.g. &lt;tt&gt;chmod 700 *&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;I will be digitally signing my emails from now on anyway and whenever necessary encrypt them. Here is my public key for &lt;tt&gt;yuenchi.lian@gmail.com&lt;/tt&gt;, &lt;a href="http://pgp.mit.edu:11371/pks/lookup?search=yuenchi.lian%40gmail.com&amp;amp;op=index"&gt;which you can also find in the MIT key server&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&lt;br /&gt;Version: PGP Key Server 0.9.6&lt;br /&gt;Comment: PGP public key for yuenchi.lian@gmail.com&lt;br /&gt;&lt;br /&gt;mQGiBEhKUl0RBAChtf+UhgLMq+yzN8J5rNQkl1T2fHBYeP7xELhqEw71bJ1mGx4i&lt;br /&gt;jQ2Ih524rlDgUsSPoAcArVTrN4Tvg7pG8W8XWGJqOh1L62UBYJhwKEmMOC3iQgKx&lt;br /&gt;Uk4N5Ldfum85yhRVZ+78LQuHJUR8OV4Oeg+ny/6d6fIfzru6jO4gBp/A7wCg0PNk&lt;br /&gt;yFyg/slc9Apq4klDhWvXs2UD/3ycSGQvZvd0u+hBgrg3nC40YJ5qUB/fkUYbPS8J&lt;br /&gt;WEi/kMfR9e9PLs3GTYssHFt7of6IgVgVBmJWeSSwT2ADIgs0EDfzIrmqiSL5DcXZ&lt;br /&gt;kBHZsaBRm8Q/qa/Rip1cXZwNuYFn5dfYK+GLbOCHDJO5JIfmYrTpXb+QE19Qcrg4&lt;br /&gt;AXtxBAChoTIAtAvG4thP4miKY5ohRLsLk3GPT7/NtzpplpbnWrA5m+KOypTGS3Cz&lt;br /&gt;UuRTekbB1cwyM6eS+3uXmW2JSI2LqXcHCIcU6fXzUFwSAUqHlNC2GI7TnYyNNqdT&lt;br /&gt;tw9/Zg1gApAumuGs8BmpDVOcki/9XdHZuBCGmwAFsGpU2SMQv7QmWXVlbi1DaGkg&lt;br /&gt;TGlhbiA8eXVlbmNoaS5saWFuQGdtYWlsLmNvbT6IYAQTEQIAIAUCSEpSXQIbAwYL&lt;br /&gt;CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEDonh/rtNGxvGeQAoMGSSIwcIt+wx2Oo&lt;br /&gt;2wR63Lv/Ot2pAJ4l086fL64CqGVUz5AHwKfpbyHLCbkCDQRISlJhEAgAvTprlG2K&lt;br /&gt;fSoiuRjLgS3wxXTxKcAm9sbMFAlsKd21lZyCSR6K8g1KYxqkBTIvygO8CSIt+mbU&lt;br /&gt;uNLZh6GTlpLmCGKANPwmP6AwO1Q3LVvI17MvWF9UwJ5K6q2RY52PggM/50vYAGVp&lt;br /&gt;Wold9Y9O6cfYWfpv47ShBh7J/FLvZ4u5yXkswnmDrjoS1XKJi06ExAySJ3aKFNF5&lt;br /&gt;+xBjgyYb/iqVFSG8eJc3ESfzde95Yt7nDFHWEr97DGVYHSj6XFq3To0XpYNxYRQz&lt;br /&gt;AxPmg49wnmkWIYSzxzcx4XjKj4DFalOm3EO4VAxqnfjUzhc5xdIjJ2SX6pAE2oiZ&lt;br /&gt;UJM5Ly7X4DEG3wADBQgAl9GaoLhIaxJx8Mp3hxK4ZBLYzbYSXa+kQbi/stpBbfxJ&lt;br /&gt;eaiRa0hS4rQ5BR2C9ADLNND6n1b0NEuaxu/MwjhBh1FPIh/WR8cJJVraaQulNaFt&lt;br /&gt;lyvevQ3gj4Hfdjd+SLTZC4GPjsG4HN1ff8QGu6lPxck9VJJVV4fENxjQFTi4Hj1D&lt;br /&gt;s+ATIGMy7jQ2/CsVpkfU3i/QICjegiiLzkTozHmzo6kNg3DDHscbyzDzgxMTRQtE&lt;br /&gt;4GYffDRD8KeJjt3wcF8X5zXsOIcYbOqq19pi8XaP4fQXHIqVWbstfprTRqUiuDu4&lt;br /&gt;RNVsg865jXIExBC9uo4zt2DS5/yflHNhLQyY+XH+f4hJBBgRAgAJBQJISlJhAhsM&lt;br /&gt;AAoJEDonh/rtNGxvlhMAn05pvdyvCYA1bO3I8wzRBAo0WBmHAKCL9MWzFb+essGZ&lt;br /&gt;zFm7O2D/hrNcnw==&lt;br /&gt;=Ot82&lt;br /&gt;-----END PGP PUBLIC KEY BLOCK-----&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have a question, where would be the best place to store my private keys? I actually had them packed in a protected zip and sent over the wire to somewhere. The &lt;a href="http://www.google.com/search?q=pgp+secret+key+backup"&gt;sites returned by Google&lt;/a&gt; suggest to do paper or disk backup.&lt;br /&gt;&lt;br /&gt;Now if every one in this world uses PGP and applications are built with its support, will people still be the victims of &lt;a href="http://en.wikipedia.org/wiki/Phishing"&gt;&lt;span style="text-decoration: underline;"&gt;phishing&lt;/span&gt;&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4729938056325059420?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4729938056325059420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4729938056325059420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4729938056325059420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4729938056325059420'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/pgp-signing-and-encrypting-emails.html' title='PGP Signing and Encrypting Emails'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1955247124620359228</id><published>2008-06-06T18:35:00.000-07:00</published><updated>2008-06-07T00:45:53.037-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='jug'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Some Status Update</title><content type='html'>Haven't been blogging much as I have been busy with some stuff lately, although I have been heavily blogging in &lt;a href="http://www.customware.net/"&gt;CustomWare&lt;/a&gt;'s intranet, like one blog or two blogs per day. This is a quick blog to update you about what I'm up to these days.&lt;br /&gt;&lt;br /&gt;We, the &lt;a href="http://www.my-jug.org/"&gt;Malaysian Java User Group&lt;/a&gt;, just had a meeting two weeks back and we want to keep this momentum up. Naresh has volunteered himself to speak on Spring and what we have to do right now is to bake when and where it will be.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://tech.groups.yahoo.com/group/myflex/"&gt;Malaysian Flex User Group&lt;/a&gt; had a "write a review for Flex builder 3 and win a free license" event not too long ago. &lt;a href="http://tech.groups.yahoo.com/group/myflex/message/144"&gt;I got one&lt;/a&gt;. :) &lt;a href="http://yclian.blogspot.com/2008/04/review-on-adobe-flex-builder-linux.html"&gt;Here is the review&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1955247124620359228?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1955247124620359228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1955247124620359228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1955247124620359228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1955247124620359228'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/06/some-status-update.html' title='Some Status Update'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4884978609999871305</id><published>2008-05-15T00:29:00.000-07:00</published><updated>2008-05-15T00:34:13.113-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='advertisement'/><title type='text'>Job-Ad: Hiring Geeks to Support an Open Source Middleware</title><content type='html'>Posting a job advertisement that I have just posted in &lt;a href="http://forum.lowyat.net/index.php?act=ST&amp;amp;f=119&amp;amp;t=696991"&gt;Lowyat.NET forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Hi guys,&lt;br /&gt;&lt;br /&gt;My company is looking for experienced technical guys (and girls of course) to support an &lt;b&gt;Open Source&lt;/b&gt; middleware product (Java-based). If you have strong enthusiasm in open source or you want to pick up challenges to learn a middleware in and out (so that you can write one yourself in future, I guess?), you may want to continue reading this. If you think you can do greater things than being a support engineer, you're out, go achieve your developer / architect dream.&lt;br /&gt;&lt;br /&gt;The primary nature is fairly simple. You will be one of our team members in covering support within a specific daily time-frame (yes, not 24x7 standby) for the global customers of this product. You will be receiving support tickets from the customers usually through portal (there could be other communication protocols) and reply to them within the defined SLA. No, you won't be picking up a phone call from a desktop customer then guide him how to install and uninstall an application (even if it happens, that's very-very rare). You will be dealing with project leads, developers, system administrators who have questions or problems with integrating the product with other systems (such as WMQ, Oracle DB, SOAP, etc.), using the API, etc.&lt;br /&gt;&lt;br /&gt;You are, of course, having other things to do in your job such as sharing knowledge with teams and customers through wiki or knowledge-base, writing extensions for the product, etc.&lt;br /&gt;&lt;br /&gt;The requirements?&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;Your attitude&lt;/b&gt;. Like I have mentioned at the introduction of this post, if you think you want to support this product, you should drop me an email. If you think a techie's capability is judged by the lines of code they have written or you think doing professional support is a shame, you are out.&lt;br /&gt;&lt;br /&gt;2. It requires you to have good understanding with &lt;b&gt;messaging and integration&lt;/b&gt;. I hope you have heard of &lt;a href="http://www.eaipatterns.com/" target="_blank"&gt;EAI patterns&lt;/a&gt; or MEP, have experience, or you are ready to learn them.&lt;br /&gt;&lt;br /&gt;3. &lt;b&gt;You learn things quick&lt;/b&gt;. Yes, it would be the best if you already have a few years experience in the industry, but one with experience could take 1 year to learn SOAP but a whizkid could take just 1 day. When a high severity ticket is filed, you will not be having your own sweet time to slwoly learn how to setup MBeans in JBoss, there is an SLA! So yes, you have to learn things quick.&lt;br /&gt;&lt;br /&gt;4. &lt;b&gt;You can communicate&lt;/b&gt;. Not just to have good command of English but you are able to deal with customers politely and professionally. You also need to be able to communicate with the internal teams efficiently. If you are a geek who will just be sitting down and segregate yourself with the world, this job doesn't suit you.&lt;br /&gt;&lt;br /&gt;If you think you are the person with the requirements mentioned above or you have a friend who is interested, drop me an email at &lt;b&gt;yuenchi.lian _AT_ customware.net&lt;/b&gt;. By the way, our office is located at Plaza Sentral of KL Sentral, the hub of public transportation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4884978609999871305?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4884978609999871305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4884978609999871305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4884978609999871305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4884978609999871305'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/05/hiring-geeks-to-support-open-source.html' title='Job-Ad: Hiring Geeks to Support an Open Source Middleware'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5618830205598459032</id><published>2008-04-26T22:57:00.000-07:00</published><updated>2008-07-07T04:19:37.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Hardy Heron</title><content type='html'>Left office with update manager on to upgrade my work machine "Nemesis" to &lt;a href="http://www.ubuntu.com/getubuntu/releasenotes/804"&gt;Hardy Heron&lt;/a&gt;. Gotta check it tomorrow. :-)&lt;br /&gt;&lt;pre&gt;$ lsb_release -a&lt;br /&gt;No LSB modules are available.&lt;br /&gt;Distributor ID: Ubuntu&lt;br /&gt;Description:    Ubuntu 8.04&lt;br /&gt;Release:        8.04&lt;br /&gt;Codename:       hardy&lt;/pre&gt;&lt;br /&gt;However, I have no luck on my home machine "Kate". I have filed a &lt;a href="https://bugs.launchpad.net/update-manager/+bug/222917"&gt;bug report&lt;/a&gt; at Launchpad and hopefully I can get some help from the community.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5618830205598459032?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5618830205598459032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5618830205598459032' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5618830205598459032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5618830205598459032'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/04/hardy-heron.html' title='Hardy Heron'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-2258407745880647204</id><published>2008-04-19T00:01:00.000-07:00</published><updated>2008-07-07T04:21:18.609-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>A Review on Adobe Flex Builder Linux Alpha 3</title><content type='html'>Initially when I started to write this review, I downloaded and set up Adobe Flex Builder Linux Alpha 2 on my Ubuntu machine, faced some troubles which some will be addressed at the Troubleshooting section. It was left with just three days for evaluation and I got stuck with work. By the time I had the time to start a proper review on it (by following the materials provided by Adobe), it was already expired. I had to &lt;a href="http://labs.adobe.com/technologies/flex/flexbuilder_linux/"&gt;download the Alpha 3&lt;/a&gt; instead, which was released on 31st of March.&lt;br /&gt;&lt;br /&gt;Just in case that you had the wrong idea, Adobe Flex Builder (I will call it the "general release" to avoid confusion), which can be obtained &lt;a href="http://www.adobe.com/products/flex/"&gt;from this address&lt;/a&gt;, is not the same project with the Linux release. They are both on two different projects, where the former follows the Flex product schedule; the latter at this stage is not a full release and not all features of the general release are implemented in it. Please read the &lt;a href="http://labs.adobe.com/technologies/flex/flexbuilder_linux/releasenotes.html"&gt;release notes&lt;/a&gt; of it for a list of supported and unsupported features.&lt;br /&gt;&lt;br /&gt;To give a short introduction about myself, I have no Flex technical experience prior to doing the review, knowing just general idea of it. However, I'm a supporter of the &lt;a href="http://groups.yahoo.com/group/myflex"&gt;MyFUG&lt;/a&gt; (Malaysian Flex User Group) and I attended most of their meetings.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Environment&lt;/h2&gt;Flex Builder is an add-on to &lt;a href="http://www.eclipse.org/"&gt;Eclipse IDE&lt;/a&gt;, a well-known IDE especially for Java-based development. The general release is a commercial add-on but is  completely free for educational purpose, it is also available free for 60 days evaluation. The Linux release however is release for evaluation purposes only and it has a fixed expiry date for each release. If you want to find out more about the price and licensing details of Flex Builder, please &lt;a href="http://www.adobe.com/products/flex/buy/#matrix"&gt;read this link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Eclipse is a mature, feature-rich and extensible IDE. Having Flex Builder to be an extension of it gives developers a very-well integrated environment for different kinds of development that could fall under the same project, e.g. developers can easily switch from Flex Development perspective to the Java Development perspective, etc.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Features&lt;/h2&gt;As you would have already read from the release notes, the Linux release doesn't support design view at this stage. It provides you with Flex SDK version 2 and 3, Flash Player, JSEclipse, Adobe AIR support and more others that you can read from the &lt;a href="http://labs.adobe.com/technologies/flex/flexbuilder_linux/releasenotes.html#new"&gt;What's New&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Without a Design View could actually be a big issue to some people, but given that Unix-based users generally love text more than GUI, it could just not be the case. Plus, writing Flex application using &lt;a href="http://en.wikipedia.org/wiki/Vi"&gt;vi editor&lt;/a&gt; can longer be that quick in comparison as the Flex Builder provides you with features such as content assistant, quick navigation to API source, etc.&lt;br /&gt;&lt;br /&gt;Followed the review guidelines, I developed a simple application with an &lt;a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/AdvancedDataGrid.html"&gt;advanced data grid&lt;/a&gt; (&lt;a href="http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Advanced_DataGrid"&gt;read also this&lt;/a&gt;) which its data is populated from a local XML file through the &lt;a href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/http/mxml/HTTPService.html"&gt;HTTP service&lt;/a&gt;. The advanced data grid is part of the &lt;a href="http://livedocs.adobe.com/flex/3/html/help.html?content=Part7_DataVis_1.html"&gt;Data Visualization&lt;/a&gt; which is shipped as a trial with the Linux release since Alpha 2, it therefore places a "Flex Data Visualization Trial" watermark in the UI as you can see from the screen-shot below. Another feature that comes as a trial is the &lt;a href="http://livedocs.adobe.com/flex/3/html/functest_components2_01.html"&gt;Automated Testing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_T7lTXNh-_S8/SAebyx9mm2I/AAAAAAAAAFc/exXlTeDKjCI/s1600-h/screenshot21.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_T7lTXNh-_S8/SAebyx9mm2I/AAAAAAAAAFc/exXlTeDKjCI/s400/screenshot21.png" alt="" id="BLOGGER_PHOTO_ID_5190288392275270498" border="0" /&gt;&lt;/a&gt;The solution to remove the watermark seems explained in &lt;a href="http://weblogs.macromedia.com/flexteam/archives/2007/12/flex_beta_3_rel.cfm"&gt;this blog entry&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Development&lt;/h2&gt;So you may question, how bad it is without the Design View. I wrote nearly 50 lines of code with not more than half of them are realizable in the general release via Design View, i.e. &lt;tt&gt;&amp;lt;mx:Application/&amp;gt;&lt;/tt&gt;, &lt;tt&gt;&amp;lt;mx:Panel/&amp;gt;&lt;/tt&gt; and &lt;tt&gt;&amp;lt;mx:AdvancedDataGrid/&amp;gt;&lt;/tt&gt;. The rest of the code is &lt;tt&gt;&amp;lt;mx:HTTPService/&amp;gt;&lt;/tt&gt; and action scripts. Therefore the answer is very subjective to the nature of the application which you are building. If it consists of a lot of UI components, the development can definitely be sped up with drag-and-drop and other features provided by the Design View.&lt;br /&gt;&lt;br /&gt;I am not too sure if the general release has the same behaviour (which I doubt no), content assistant does not work for advanced data grid. It turned out to be quite annoying, but knowing that Data Visualization is still at trial, we can safely say that it is not a bug.&lt;br /&gt;&lt;br /&gt;I am also very much concerned with having a Maven 2 plug-in for Flex development. There is a popular issue tracking this at &lt;a href="https://bugs.adobe.com/jira/browse/SDK-12730"&gt;SDK-12730&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Troubleshooting&lt;/h2&gt;I had some issues initially when I tried to install the Flex Builder on my system, which is an Ubuntu 7.10 Gutsy Gibbon running on a 64-bit machine. There were a few requirements mentioned in the release notes that I missed out the first two:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You need a 32-bit Java Virtual Machine, &lt;a href="http://java.sun.com/javase/downloads/"&gt;download from here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You need a 32-bit Eclipse, &lt;a href="http://www.eclipse.org/downloads/"&gt;download from here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;You need a 32-bit Flash player on a 32-bit Firefox, &lt;a href="http://ubuntuforums.org/showthread.php?p=1174435"&gt;read this&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;You will have to run &lt;tt&gt;update-alternatives&lt;/tt&gt; to replace the default &lt;tt&gt;java&lt;/tt&gt; executable, e.g.&lt;br /&gt;&lt;pre&gt;sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.5.0-32bit/jre/bin/java 50&lt;/pre&gt;I also hit into the following error when I was trying to start the installer with JRE6:&lt;br /&gt;&lt;pre&gt;Runtime link error - it appears that libXt got loaded before libXm,&lt;br /&gt;which is not allowed.&lt;br /&gt;Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)&lt;br /&gt;&lt;br /&gt;Stack Trace:&lt;br /&gt;java.lang.NoClassDefFoundError&lt;br /&gt; at sun.java2d.SunGraphicsEnvironment.addDirFonts(SunGraphicsEnvironment.java:722)&lt;br /&gt; at sun.java2d.SunGraphicsEnvironment.registerFontsInDir(SunGraphicsEnvironment.java:602)&lt;/pre&gt;&lt;br /&gt;The quick workaround to this is to set the &lt;tt&gt;AWT_TOOLKIT&lt;/tt&gt; environment variable with the value &lt;tt&gt;XToolkit&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Further Reading and Other Resources&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://livedocs.adobe.com/flex/"&gt;Flex Live Docs&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://examples.adobe.com/flex3/componentexplorer/explorer.html"&gt;Snippets&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/devnet/actionscript/articles/actionscript_tips.html"&gt;Action Script Tips&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/devnet/flex/articles/unit_testing.html"&gt;Automated Test&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-2258407745880647204?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/2258407745880647204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=2258407745880647204' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2258407745880647204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2258407745880647204'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/04/review-on-adobe-flex-builder-linux.html' title='A Review on Adobe Flex Builder Linux Alpha 3'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_T7lTXNh-_S8/SAebyx9mm2I/AAAAAAAAAFc/exXlTeDKjCI/s72-c/screenshot21.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-291773998931082248</id><published>2008-04-11T03:42:00.000-07:00</published><updated>2009-03-10T08:10:26.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='meme'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>I'm a Java guy</title><content type='html'>Learned from &lt;a href="http://blog.kagesenshi.org/2008/04/me-me.html"&gt;KageSenshi&lt;/a&gt; that, there is a meme happening at the &lt;a href="http://planet.fedoraproject.org/" rel="nofollow"&gt;Fedora Planet&lt;/a&gt;, that is to execute this command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head&lt;/pre&gt;&lt;br /&gt;Here's my result:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;yclian@nemesis:~$ history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head&lt;br /&gt;110 ls&lt;br /&gt;109 cd&lt;br /&gt;41 sudo&lt;br /&gt;39 svn&lt;br /&gt;37 mvn&lt;br /&gt;21 cat&lt;br /&gt;12 java&lt;br /&gt;10 $JAVA_HOME/bin/java&lt;br /&gt;9 find&lt;br /&gt;8 sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;tt&gt;svn&lt;/tt&gt;, &lt;tt&gt;mvn&lt;/tt&gt;, &lt;tt&gt;java&lt;/tt&gt;. What a &lt;b&gt;Java&lt;/b&gt; guy.&lt;br /&gt;&lt;br /&gt;It's your turn now. :-)&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-291773998931082248?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/291773998931082248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=291773998931082248' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/291773998931082248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/291773998931082248'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/04/im-java-guy.html' title='I&apos;m a Java guy'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7194276019255612860</id><published>2008-04-11T02:55:00.000-07:00</published><updated>2008-07-07T04:21:00.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>BridgeComponent.. OMG</title><content type='html'>In Mule, &lt;span class="nobr"&gt;&lt;a href="http://mule.mulesource.org/docs/apidocs/org/mule/components/simple/BridgeComponent.html" rel="nofollow"&gt;BridgeComponent&lt;/a&gt;&lt;/span&gt; is the root of a lot of evil if you do not pay enough of attention, for instance, you might be wondering why interceptor was not working then realized that BridgeComponent was the culprit!&lt;br /&gt;&lt;br /&gt;What is a BridgeComponent? According to the API documentation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;The BridgeComponent is a standard Mule component that enables a bridge between an inbound and outbound endpoints. Transformers can be used on the endpoints to convert the data being received in order to 'bridge' from one endpoint transport to another.&lt;br /&gt;&lt;br /&gt;When the BridgeComponent is used, it configures itself so that it will not actually be invoked, instead it tells Mule to bypass invocation of the component, which has a slight performance improvement. Note that because the component is never actually invoked any interceptors configured on the component will not be invoked either.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It is an implementation of the &lt;span class="nobr"&gt;&lt;a href="http://www.eaipatterns.com/MessagingBridge.html" rel="nofollow"&gt;Messaging Bridge&lt;/a&gt;&lt;/span&gt; pattern in integration. A messaging bridge is responsible to connect two different channels, it is smart because it has a big list of &lt;span class="nobr"&gt;&lt;a href="http://www.eaipatterns.com/ChannelAdapter.html" rel="nofollow"&gt;channel adapters&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Fair enough, the API documentation has warned you about interceptor. It's all your fault if you did not read it.&lt;br /&gt;&lt;br /&gt;I had been working on a &lt;span class="nobr"&gt;&lt;a href="http://mule.mulesource.org/docs/apidocs/org/mule/umo/routing/UMOResponseRouter.html" rel="nofollow"&gt;response router&lt;/a&gt;&lt;/span&gt; problem since morning, scratching my head since then, and in the end realized that the culprit of my unexpectation was the BridgeComponent. What is a response router? Basically, in Mule, a response router is used for request-reply scenario, where a request will be blocked until a response is formed (usually using an aggregator) from results of asynchronous calls. But what is the problem? When my client sent a request to Mule, it received a &lt;b&gt;&lt;tt&gt;null&lt;/tt&gt;&lt;/b&gt; response straight after the invocation, before the asynchronous calls were ever made.&lt;br /&gt;&lt;br /&gt;I had done a lot of debugging, drilling into the code to find out which part that I could have missed out, perhaps it would just be a missing property? Yes, there was a lot of WTFs. Until I did a full code search on &lt;tt&gt;"*ResponseRouter"&lt;/tt&gt; and noticed that &lt;span class="nobr"&gt;&lt;a href="http://mule.mulesource.org/docs/apidocs/org/mule/impl/model/DefaultMuleProxy.html" rel="nofollow"&gt;&lt;tt&gt;DefaultMuleProxy&lt;/tt&gt;&lt;/a&gt;&lt;/span&gt; was in the results..&lt;br /&gt;&lt;br /&gt;What had happened? The &lt;tt&gt;DefaultMuleProxy&lt;/tt&gt; is a proxy to a UMO component and it handles its lifecycle (start/stop), interceptors and message routing (which includes response router). When you use a BridgeComponent, request will be forwarded from the inbound to the outbound directly without invoking the UMO component, and thus the response router part will not be not taken care. As Mule dispatches messages asynchronously if ReplyTo is detected at the outbound, a null response will be returned. This explains why I was getting a &lt;tt&gt;null&lt;/tt&gt; response.&lt;br /&gt;&lt;br /&gt;So, please take note when you are using BridgeComponent!&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7194276019255612860?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7194276019255612860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7194276019255612860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7194276019255612860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7194276019255612860'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/04/bridgecomponent-omg.html' title='BridgeComponent.. OMG'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3074813469562218701</id><published>2008-03-30T03:28:00.000-07:00</published><updated>2008-03-30T03:32:44.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='brain'/><title type='text'>Art and Stance</title><content type='html'>&lt;div class="wiki-content"&gt;Heard this from a drama just now and it makes a lot of sense to me. &lt;em&gt;Architecture is an art, thus as an artist you should have your own stance&lt;/em&gt;. Put aside your boss' and customers' opinions.&lt;br /&gt;&lt;br /&gt;Likewise, software architecture is an art, your software is an artifact – a piece of art. Therefore, you design it and you justify each part of it.&lt;br /&gt;&lt;br /&gt;- yc         &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3074813469562218701?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3074813469562218701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3074813469562218701' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3074813469562218701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3074813469562218701'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/art-and-stance.html' title='Art and Stance'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-744540108955592474</id><published>2008-03-29T22:59:00.000-07:00</published><updated>2008-07-07T04:20:48.287-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='myjug'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>FOSS-SM April 2008 Meetup, Selenium Web Testing Tool</title><content type='html'>&lt;div class="wiki-content"&gt;I will be giving a presentation on &lt;span class="nobr"&gt;&lt;a href="http://selenium.openqa.org/" rel="nofollow"&gt;&lt;b&gt;Selenium&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; this Thursday at the &lt;a href="http://foss.org.my/"&gt;FOSS-SM&lt;/a&gt; meeting, more details can be found here:  &lt;ul&gt;&lt;li&gt;&lt;span class="nobr"&gt;&lt;a href="http://www.my-jug.org/calendar" rel="nofollow"&gt;http://www.my-jug.org/calendar&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="nobr"&gt;&lt;/span&gt;&lt;span class="nobr"&gt;&lt;a href="http://foss.org.my/projects/meetups/april-2008-meetup/myoss-april-2008-meetup-selenium-web-testing/view" rel="nofollow"&gt;http://foss.org.my/projects/meetups/april-2008-meetup/myoss-april-2008-meetup-selenium-web-testing/view&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Your support will definitely be appreciated, please join me to attend this.&lt;/p&gt;  &lt;p&gt;- yc&lt;/p&gt;         &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-744540108955592474?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/744540108955592474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=744540108955592474' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/744540108955592474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/744540108955592474'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/foss-sm-april-2008-meetup-selenium-web.html' title='FOSS-SM April 2008 Meetup, Selenium Web Testing Tool'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5423449745727376500</id><published>2008-03-28T17:53:00.000-07:00</published><updated>2008-07-07T04:20:17.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='earth'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>I'm Clean</title><content type='html'>Did you mean clean? My colleague David showed this to me when he was looking for my online profiles.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_T7lTXNh-_S8/R-2Tw-okVhI/AAAAAAAAAEw/9SIbtuO654c/s1600-h/screenshot9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_T7lTXNh-_S8/R-2Tw-okVhI/AAAAAAAAAEw/9SIbtuO654c/s400/screenshot9.png" alt="" id="BLOGGER_PHOTO_ID_5182961215829464594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Google gives 20,500 results for &lt;a href="http://www.google.com/search?q=yclian"&gt;yclian&lt;/a&gt;, 7,760 for &lt;a href="http://www.google.com/search?q=%22Yuen-Chi+Lian%22"&gt;"Yuen-Chi Lian"&lt;/a&gt;, 3,360 for &lt;a href="http://www.google.com/search?q=yuenqi"&gt;yuenqi&lt;/a&gt;, 1,060 for &lt;a href="http://www.google.com/search?q=yuenchi.lian"&gt;yuenchi.lian&lt;/a&gt;, 290 for &lt;a href="http://www.google.com/search?q=%22Lian+Yuen+Chi%22"&gt;"Lian Yuen Chi"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, you are urged to join the &lt;a href="http://www.earthhour.org/"&gt;Earth Hour&lt;/a&gt; at 8 - 9pm of your time tonight, read more about it from the link.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5423449745727376500?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5423449745727376500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5423449745727376500' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5423449745727376500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5423449745727376500'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/im-clean.html' title='I&apos;m Clean'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_T7lTXNh-_S8/R-2Tw-okVhI/AAAAAAAAAEw/9SIbtuO654c/s72-c/screenshot9.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1499275710316776600</id><published>2008-03-25T20:10:00.000-07:00</published><updated>2008-07-07T04:20:02.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fashion'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Fashion for Software/IT Guys?</title><content type='html'>The IT people generally prefer wearing t-shirt and jeans to work, at least that's what most of my IT friends prefer. In some companies, which professional dressing is required for Monday to Thursday (like mine), traditionally, guys will go for a simple sleeve and slack, girls will prefer chino/straight skirt. And they all like moderate colours (just not funky or too bright). Let's call this "standard" dressing.&lt;br /&gt;&lt;br /&gt;Especially in Malaysia, which is warm every day, people go with one-layer dressing, you hardly see someone with coat, cardigan, jumper, sweater, etc.&lt;br /&gt;&lt;br /&gt;If you wear something that's not within the standard, say, a short sleeve with a skinny/fit tee at the outside and a bright tie. Your colleagues will start questioning why you are wearing in this way, or telling you that you should be wearing in that way, blah and blah.&lt;br /&gt;&lt;br /&gt;I have recently changed my fashion style, &lt;a href="http://www.gqstyle.com/"&gt;GQstyle&lt;/a&gt; is my source of inspiration (no, I don't buy Paul Smith or Moschino, I can only afford around the price of &lt;a href="http://www.topman.com/"&gt;TopMan&lt;/a&gt;). I bought cardigans, new shoes, belts, ties, and braces.&lt;br /&gt;&lt;br /&gt;I don't agree that you wear simply because you just want to cover up some parts of your body, I believe I wear is to show who I am and how unashamed of my own ideas and mixtures. When I feel gloomy in the morning, I will pick light blue as the fashion of the day, it makes me looks brighter. When I can't think of something better for that day, I will just grab a cardigan to make myself to not look too plain.&lt;br /&gt;&lt;br /&gt;I always like to look at &lt;a href="http://gqstyle.com/TheCollections/Photos/Default.aspx?ShowID=4973&amp;amp;ImageIndex=13&amp;amp;ShowType=Mens"&gt;how the Paul Smith's models wear&lt;/a&gt;. I think IT guys can wear like them too. Don't you think so?&lt;br /&gt;&lt;br /&gt;- yc, geek.. talks about fashion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1499275710316776600?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1499275710316776600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1499275710316776600' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1499275710316776600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1499275710316776600'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/fashion-for-softwareit-guys.html' title='Fashion for Software/IT Guys?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1167510888504230595</id><published>2008-03-22T03:00:00.000-07:00</published><updated>2008-07-07T04:21:47.650-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='f1'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Dangerous Constructions</title><content type='html'>The Adrian Newey-penned RB4 was suspected in violation of the regulation about "dangerous constructions". It has now &lt;a href="http://www.autosport.com/news/report.php/id/65984"&gt;given green light by the FIA guys&lt;/a&gt; anyway.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Adrian_Newey"&gt;Adrian Newey&lt;/a&gt; is a Formula 1 technical icon, and that got me to think; To think about as a software designer or architect, have you ever designed a dangerous construction that performed godly. What can be classified as dangerous construction in software engineering?&lt;br /&gt;&lt;br /&gt;I have watched how ugly the suspension of RB4 turned in &lt;a href="http://youtube.com/watch?v=Cn4pi4skBsI"&gt;Melbourne&lt;/a&gt; and &lt;a href="http://youtube.com/watch?v=4YCBcNJoTws"&gt;Malaysia&lt;/a&gt;. Kind of scary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1167510888504230595?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1167510888504230595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1167510888504230595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1167510888504230595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1167510888504230595'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/dangerous-constructions.html' title='Dangerous Constructions'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8392857845379266557</id><published>2008-03-19T08:01:00.000-07:00</published><updated>2008-07-07T04:20:32.293-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='myjug'/><category scheme='http://www.blogger.com/atom/ns#' term='cop'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Qi4J on the 13th</title><content type='html'>Supported by the &lt;a href="http://www.my-jug.org/"&gt;Malaysian Java User Group&lt;/a&gt;, the FOSS-SM hosted the &lt;a href="http://foss.org.my/projects/meetups/march-2008-meetup/march-2008-meetup"&gt;March meet-up&lt;/a&gt; with the presence of &lt;a href="http://www.jroller.com/rickard/"&gt;Rickard Oberg&lt;/a&gt; on the topic of Composite Oriented Programming in Java using &lt;a href="http://www.qi4j.org/"&gt;&lt;span style="font-weight: bold;"&gt;Qi4J&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's a good occasion to meet Rickard in person and other JUG guys -- Edward, Bernie, KC., ..&lt;br /&gt;&lt;br /&gt;Qi4J in short is an implementation of Composited Oriented Programming (COP), an idea heavily influenced by the concept of Domain Driven Development (DDD). You can &lt;a href="http://www.qi4j.org/160.html"&gt;read more about its background from this page&lt;/a&gt;. Aspect Oriented Programming (AOP) and Dependency Injection (DI) are essential parts of Qi4J to achieve DDD (you might want to check &lt;a href="http://geekswithblogs.net/Podwysocki/archive/2008/01/13/118512.aspx"&gt;Matthew Podwysocki's blog&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;In Qi4J, you no longer think about objects but composites. A &lt;span style="font-weight: bold;"&gt;Composite&lt;/span&gt; is a collection of fragments, where a fragment can be a &lt;span style="font-weight: bold;"&gt;Mixin&lt;/span&gt; that holds the state of the composite, a &lt;span style="font-weight: bold;"&gt;Constraint&lt;/span&gt; that validates the usage, a &lt;span style="font-weight: bold;"&gt;Concern&lt;/span&gt; that handles contextual behaviour or a  &lt;span style="font-weight: bold;"&gt;SideEffect&lt;/span&gt; that is used for notification. Here are some resources to help you more with it:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://scm.ops4j.org/repos/ops4j/projects/qi4j/artwork/Brochure/Oredev%202007/"&gt;Qi4J Brochures and Diagrams&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.qi4j.org/33.html"&gt;Qi4J Concepts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I like the general idea personally, just like how I like AOP at the first time I got in touch with it. Clean code, domain centric, separation of concerns, and low coupling between components (that also promotes reusability).&lt;br /&gt;&lt;br /&gt;There are some concerns from the ground too, that,&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;It is Hackish&lt;/h2&gt;To some people, the framework looks completely like a hack to achieve something can not be originally done by Java. I beg to differ with that point, programming to me is a lively and creative area of computer science, with a good design and deep thoughts, we are actually leveraging the Java platform to introduce a new programming style. Just like how people use Spring and its &lt;tt&gt;applicationContext.xml&lt;/tt&gt; to do AOP.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Learning Curve and Adoption&lt;br /&gt;&lt;/h2&gt;Learning curve is a major concern too. The discussion focused on how long it would take for new and old Java programmers to adopt to this new programming style. My opinion is, what truly drives someone to do something to be different from the norm relies on how widespread and the quality of the new concept; as well as how conservative an individual would like to remain, a comfortability issue. Likewise, not everyone uses AOP, ORM, etc. because they do not see the point, accept the idea, or are comfortable with what they are currently doing. But certainly, Spring has a very good documentation and from the way I look at it, Qi4J is going to have one too. :-)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Performance&lt;/h2&gt;A realistic concern. I talked to Niclas and Edward (folks from Jayway, the core committers of Qi4J) after meeting. They shared with me that, which is also written in the website, Qi4J is not production ready. The product is still undergoing development and the team has not yet done any performance tuning. Take note that it doesn't even have a binary release at the moment. A more mature codebase should be ready by end of this year.&lt;br /&gt;&lt;br /&gt;I am ending this blog entry here. Like I said, I like the idea of it and Qi4J definitely worth revisiting at a later time and since it is an &lt;a href="http://www.ops4j.org/"&gt;&lt;span style="font-weight: bold;"&gt;OPS4J&lt;/span&gt;&lt;/a&gt; project, I will definitely find a time to contribute to the codebase.&lt;br /&gt;&lt;br /&gt;Lastly, please &lt;a href="http://www.my-jug.org/2008/03/11/Rickard+Oberg+on+Composite+Oriented+Programming+%28FOSS-SM+March+2008+Meetup%29"&gt;visit our JUG's blog&lt;/a&gt; for a list of other blogs that discuss about the meeting.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8392857845379266557?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8392857845379266557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8392857845379266557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8392857845379266557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8392857845379266557'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/qi4j-on-13th.html' title='Qi4J on the 13th'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-196941990719727441</id><published>2008-03-09T01:27:00.000-08:00</published><updated>2008-03-09T03:33:54.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>An Era Where People Express</title><content type='html'>I did not study the history of civilization and democracy in detail, all I have is from the high school. But I am certainly sure that the result of the &lt;a href="http://yclian.blogspot.com/2008/03/day-we-decide.html"&gt;12th general election yesterday&lt;/a&gt; has certainly marked a watershed in the history of Malaysia after half a century.&lt;br /&gt;&lt;br /&gt;One factor contributed to the setback of the ruling coalition is how the government stumbled badly on the issues of &lt;a href="http://www.globalvoicesonline.org/2007/07/13/malaysia-blogger-detained-by-police/"&gt;bloggers&lt;/a&gt;, &lt;a href="http://blog.limkitsiang.com/2007/11/23/an-indictment-of-malaysia%E2%80%99s-media/"&gt;Internet media&lt;/a&gt; and &lt;a href="http://colour-blind.org/wordpress/?p=363"&gt;street demonstration&lt;/a&gt;. They made a wrong move -- they tried to control, suppress, and ignore our voice.&lt;br /&gt;&lt;br /&gt;Web 2.0 should be called World 2.0 instead, as it redefines not just the Internet but the world in terms of learning, communication, collaboration, and business.  People are more &lt;a href="http://www.answers.com/main/ntquery?s=open+minded"&gt;open&lt;/a&gt;, open to discussion, open privacy boundary, open source, open API, ... They express.&lt;br /&gt;&lt;br /&gt;When you go online, you see the mood and state of mind of your friend from his MSN personal message or Facebook status. You read about his life, work and vision from his blog. You can see his social activities from his Flickr and Facebook photo tags. You are also invited to events to get into a closer touch with the people. Then, you learned that you are one of us, we want changes, we want our voice heard, and we dislike how authority controls and manipulates.&lt;br /&gt;&lt;br /&gt;Among our generations, there are still people who remain behind the times and you could be one of them. How are you repositioning yourself?&lt;br /&gt;&lt;br /&gt;In the city that I am living, a lot of people carry an MP3 player like I do in the train, but not many move with the music like I do. Let's move.&lt;br /&gt;&lt;br /&gt;- yc, expresses&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-196941990719727441?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/196941990719727441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=196941990719727441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/196941990719727441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/196941990719727441'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/era-where-people-express.html' title='An Era Where People Express'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-6212072744973226338</id><published>2008-03-07T20:10:00.000-08:00</published><updated>2008-03-07T20:20:52.507-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>The Day We Decide</title><content type='html'>If you are a Malaysian, you are supposed to know about this; if you are older than 21 y/o, you are one of us who can decide; if you are not a Malaysian, basically, today is the day of general election.&lt;br /&gt;&lt;br /&gt;I want a effective, fair and clean government, for the people.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://jyte.com/widget/claim/barisan-national-is-going-to-win-the-coming-election" style="border: 1px solid rgb(119, 119, 119); width: 400px; height: 60px;" scrolling="no"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-6212072744973226338?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/6212072744973226338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=6212072744973226338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6212072744973226338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6212072744973226338'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/day-we-decide.html' title='The Day We Decide'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3396496739245493531</id><published>2008-03-02T05:26:00.000-08:00</published><updated>2008-03-02T05:56:43.998-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Are you overworked, IT guys?</title><content type='html'>I have come across so many friends who are overworked by their employers, especially those from the IT field, the issue of underpaid sounds serious in Malaysia. I could be wrong, so feel free to drop a comment if you have other opinions.&lt;br /&gt;&lt;br /&gt;In Malaysia, our salary has been stagnant for years, and I believe that's part of the reason why it attracts foreign investors. When it comes to the argument of employees being overworked, there are two factors that we can look into:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Employees are not being efficient.&lt;/li&gt;&lt;li&gt;Management is being unreasonable, in terms of deadline and human resource.&lt;/li&gt;&lt;/ol&gt;Most of the time, both are valid. For an old-school manager who is not willing to adopt to new methodologies, his interest is to squeeze the most out from the project and his employees for a high ROI. Driven by this, he is likely to commit to an unreasonable deadline and cut down the cost by hiring just-sufficient (usually turned out to be not, due to inefficiency) human resources.&lt;br /&gt;&lt;br /&gt;Sounds familiar to you? I am happy that I am not working for this kind of company.&lt;br /&gt;&lt;br /&gt;In the end, the development team faces huge pressure, as the deadline comes closer it turns worse, and they stay late to work even on the weekends. Driven by this, the employees are no longer efficient and neither they are happy and motivated -- They will choose to leave.&lt;br /&gt;&lt;br /&gt;What will happen when they leave? The company has to hire and train new guys again, that's a terrible investment and due to their management style the company will forever be haunted by high turnover rates. And generally (yes, I say generally, not all, based on my experience) since most Asian companies share the same management style, the employees will end up in the same type of company and they will.. be forever unhappy until they are retired.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://jyte.com/widget/claim/you-are-overworked-and-your-employer-is-not-hiring-sufficient-human-resources" style="border: 1px solid rgb(119, 119, 119); width: 400px; height: 60px;" scrolling="no"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;I have created a Jyte claim: &lt;a href="http://jyte.com/cl/you-are-overworked-and-your-employer-is-not-hiring-sufficient-human-resources"&gt;You are overworked and your employer is not hiring sufficient human resources&lt;/a&gt;. When I'm writing this, one of my friends is making the decision to leave her company. Why? The project has to be delivered on April, but she has been working 7 days per week since late-January. On Friday, she was talking with me on MSN when she was still in the office, the time was 1am morning.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- yc, what do you feel?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3396496739245493531?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3396496739245493531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3396496739245493531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3396496739245493531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3396496739245493531'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/03/are-you-overworked-it-guys.html' title='Are you overworked, IT guys?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-3003024996762952882</id><published>2008-02-18T08:00:00.000-08:00</published><updated>2008-02-18T08:04:53.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jug'/><category scheme='http://www.blogger.com/atom/ns#' term='myjug'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Where the Malaysian Java User Group is heading to?</title><content type='html'>&lt;blockquote&gt;Not just the website, there are more things that you can do for the group, really. I am a believer of "&lt;span style="font-style: italic;"&gt;community for the people, by the people&lt;/span&gt;". The group will never work without a group of good leaders, active members and industry support. So here are a few suggestions:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;   Spread the words&lt;/li&gt;&lt;li&gt;   Be the committee&lt;/li&gt;&lt;li&gt;   Be the sponsor &lt;/li&gt;&lt;li&gt;   Keep an eye on us&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;...&lt;/blockquote&gt;&lt;br /&gt;I have just blogged about the direction of our JUG in the website: what we have been doing, what we can do, and what we will be doing. The blog can be found at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.my-jug.org/2008/02/19/Where+the+JUG+is+heading"&gt;http://www.my-jug.org/2008/02/19/Where+the+JUG+is+heading&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-3003024996762952882?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/3003024996762952882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=3003024996762952882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3003024996762952882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/3003024996762952882'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/02/where-malaysian-java-user-group-is.html' title='Where the Malaysian Java User Group is heading to?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4680581218756574062</id><published>2008-02-13T07:51:00.000-08:00</published><updated>2008-07-07T04:23:27.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>FOSS-SM February 2008 Meet-Up</title><content type='html'>I'm just back from the FOSS-SM (Free/Open Source Software Society of Malaysia) &lt;a href="http://foss.org.my/projects/meetups/february-2008-meetup/feburary-2008-meetup"&gt;meeting&lt;/a&gt;. Thanks Kenneth Wong (of &lt;a href="http://www.exoweb.net/"&gt;Exoweb&lt;/a&gt;) for giving us the presentation.&lt;br /&gt;&lt;br /&gt;Had some talks with the &lt;a href="http://malaysia.jayway.net/2.34d4d8bd1124126cc0580001412.html"&gt;Jayway&lt;/a&gt; folks, Niclas Hedhman and Edward Yakop, at the mamak after the meeting. Niclas mentioned a lot of names, and yes, I did not know who's Rickard Oberg (the creator of XDoclet and Webwork, the brain behind JBoss). Then I heard some stories about &lt;a href="http://www.joost.com/"&gt;Joost&lt;/a&gt; too.&lt;br /&gt;&lt;br /&gt;Next month, we might hear something from Rickard, on &lt;a href="http://www.qi4j.org/"&gt;Qi4J&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4680581218756574062?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4680581218756574062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4680581218756574062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4680581218756574062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4680581218756574062'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/02/foss-sm-february-2008-meet-up.html' title='FOSS-SM February 2008 Meet-Up'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1358419606678757613</id><published>2008-02-12T06:14:00.000-08:00</published><updated>2008-02-12T06:28:57.208-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><title type='text'>War is Peace</title><content type='html'>Anarchism is a cluster of doctrines and attitudes centered on the belief that government is both harmful and unnecessary.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_T7lTXNh-_S8/R7GrnK1clCI/AAAAAAAAAC0/v6c53vEeN2c/s1600-h/arnarchy.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_T7lTXNh-_S8/R7GrnK1clCI/AAAAAAAAAC0/v6c53vEeN2c/s320/arnarchy.png" alt="" id="BLOGGER_PHOTO_ID_5166098936982443042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Propagandha - War is Peace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Four more years of War is Peace, Ignorance is Stenght and Slavery is Freedom.&lt;br /&gt;Four more. May all your interventions be "Humanitarian".&lt;br /&gt;Four more years of pay-to-play politics, power and influence.&lt;br /&gt;Four more years of legalized bribery and served corporate interests.&lt;br /&gt;&lt;br /&gt;Vote for tweedle-dum or tweedle-dee&lt;br /&gt;And a framework of debate narrowed for you courtesy&lt;br /&gt;Of the ultra-rich and a media that filters&lt;br /&gt;But any voice that challenges their power&lt;br /&gt;(like Nader bounced in Boston by state-troppers&lt;br /&gt;Cos he don't speak for oil-xycoons and bankers, oh yeah&lt;br /&gt;Whose pursuit of happiness and liberty&lt;br /&gt;Demands a rhetoric of fear to be&lt;br /&gt;The litmus test for viable heirs to&lt;br /&gt;The phony drug-wars, the trumped-up rogue-states, the permance of a war-economy).&lt;br /&gt;&lt;br /&gt;I feel less hopeful and less human&lt;br /&gt;As I'm reduced to nothing more than&lt;br /&gt;Cheering on embassy bombings&lt;br /&gt;As the liars pave their way through&lt;br /&gt;&lt;br /&gt;Four more years of War is Peace, Ignorance is Stenght and Slavery is Freedom.&lt;br /&gt;Four more. May all your interventions be "Humanitarian".&lt;br /&gt;Four more years of pay-to-play politics, power and influence.&lt;br /&gt;Four more years of legalized bribery and served corporate interests.&lt;br /&gt;&lt;br /&gt;The lyrics above are copyrighted work of &lt;a href="http://www.propagandhi.com/"&gt;Propagandhi&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1358419606678757613?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1358419606678757613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1358419606678757613' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1358419606678757613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1358419606678757613'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/02/war-is-peace.html' title='War is Peace'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_T7lTXNh-_S8/R7GrnK1clCI/AAAAAAAAAC0/v6c53vEeN2c/s72-c/arnarchy.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-189236548530687499</id><published>2008-01-26T05:29:00.000-08:00</published><updated>2008-01-26T05:35:53.401-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Bring Down the Government</title><content type='html'>"You look so tired-unhappy, bring down the government, they don't.. they don't speak for us." - &lt;a href="http://www.google.com/search?q=Radiohead+No+Surprises+lyrics"&gt;No Surprises by Radiohead&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No matter how peaceful a demonstration is, the government considers it illegal and people are arrested. Aren't they there to speak for us?&lt;br /&gt;&lt;br /&gt;How can our voice be heard?&lt;br /&gt;&lt;br /&gt;- yc, with his final bellyache&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-189236548530687499?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/189236548530687499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=189236548530687499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/189236548530687499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/189236548530687499'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/01/bring-down-government.html' title='Bring Down the Government'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8662427066105226443</id><published>2008-01-13T21:50:00.000-08:00</published><updated>2008-03-30T03:31:35.606-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='unit-test'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>RE: Rethinking Software Development</title><content type='html'>My colleague David wrote a thoughtful blog about maximizing quality by increasing software development time, do &lt;a href="http://nuhk.blogspot.com/2008/01/rethinking-software-development.html"&gt;take a look at it here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test-Driven development&lt;/a&gt; (TDD) and &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;continuous integration&lt;/a&gt; (CI) are not new terms but they could be in Malaysia (generalizing based on the number of software engineers that I have met), or people (managers and developers) could just think they are something impractical in terms of meeting the project's deadline and such.&lt;br /&gt;&lt;br /&gt;They should find out about the "&lt;a href="http://www.ambysoft.com/essays/brokenTriangle.html"&gt;Broken Iron Triangle&lt;/a&gt;" too.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8662427066105226443?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8662427066105226443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8662427066105226443' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8662427066105226443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8662427066105226443'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/01/re-rethinking-software-development.html' title='RE: Rethinking Software Development'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-1443837299774083743</id><published>2008-01-12T08:39:00.000-08:00</published><updated>2008-01-12T08:53:10.561-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>AMBP (All Malaysian Bloggers Project) Gathering</title><content type='html'>The &lt;a href="http://www.allmalaysia.info"&gt;AMBP&lt;/a&gt; folks organized a bloggers' gathering this afternoon at the Starbucks of &lt;a href="http://www.midvalleygardens.com.my/"&gt;The Gardens, Mid Valley&lt;/a&gt;. I'm glad to meet &lt;a href="http://shazfx.blogspot.com/"&gt;Shaz&lt;/a&gt; again and other (old) &lt;a href="http://www.xfresh.com/"&gt;XFresh&lt;/a&gt; fellas, and oh yea.. my cousin &lt;a href="http://davidlian.blogspot.com/"&gt;David&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, couldn't really spot technical and political bloggers, but a number of teens, &lt;a href="http://www.google.com/search?q=blog+money"&gt;$ bloggers&lt;/a&gt;, cam-whores, camera geeks.&lt;br /&gt;&lt;br /&gt;You can read more about this event from &lt;a href="http://blogsearch.google.com/blogsearch?q=ambp+gathering"&gt;these blogs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-1443837299774083743?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/1443837299774083743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=1443837299774083743' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1443837299774083743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/1443837299774083743'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/01/ambp-all-malaysian-bloggers-project.html' title='AMBP (All Malaysian Bloggers Project) Gathering'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4816521141465219656</id><published>2008-01-04T00:53:00.000-08:00</published><updated>2008-01-04T01:03:29.062-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Back to Maven, No to Raven and BuildR</title><content type='html'>One of the &lt;a href="http://yclian.blogspot.com/2008/01/happy-new-year-and-things-to-look-into.html"&gt;TODOs&lt;/a&gt; I set for this year is to find out more about &lt;a href="http://raven.rubyforge.org/"&gt;&lt;span style="font-weight: bold;"&gt;Raven&lt;/span&gt;&lt;/a&gt; -- a Java build tool written in Ruby. The rationale behind such tool is that it provides you with a full scripting environment, unlike the XML-config-based Ant and Maven. With that, you won't miss any tiny single things that you need for your build -- it can go beyond the boundaries. With the latter, you will have to write &lt;a href="http://ant.apache.org/manual/tasksoverview.html"&gt;Ant task&lt;/a&gt; or &lt;a href="http://maven.apache.org/plugin-developers/index.html"&gt;Mojo&lt;/a&gt; (do you miss Jelly?).&lt;br /&gt;&lt;br /&gt;Half way through, I switched to &lt;a style="font-weight: bold;" href="http://incubator.apache.org/buildr/"&gt;BuildR&lt;/a&gt; -- just another build system written in Ruby, an Apache incubator project. One of the similarities of Raven and BuildR is they are both written on top of &lt;a href="http://rake.rubyforge.org/"&gt;Rake&lt;/a&gt; -- the Ruby 'Make'. I found it out from the source of &lt;a href="http://ode.apache.org/"&gt;Apache Ode&lt;/a&gt; actually.&lt;br /&gt;&lt;br /&gt;I have gone through some pain in the past 3 days in converting one of my projects (the &lt;a href="http://www.mulesource.org/display/JXTA"&gt;Mule JXTA transport&lt;/a&gt;) from Maven 2 (&lt;a href="http://fisheye.muleforge.org/browse/mule-transport-jxta/trunk/pom.xml?r=HEAD"&gt;&lt;span style="font-weight: bold;"&gt;pom.xml&lt;/span&gt;&lt;/a&gt;) to BuildR (&lt;a style="font-weight: bold;" href="http://fisheye.muleforge.org/browse/mule-transport-jxta/trunk/Rakefile?r=HEAD"&gt;Rakefile&lt;/a&gt;), such as,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Couldn't to connect to the project's repository, as HTTPS and Basic AUTH are unsupported. I have submitted a patch to the BuildR folks at &lt;a href="https://issues.apache.org/jira/browse/BUILDR-14"&gt;BUILDR-14&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Couldn't get my existing test cases to run, BuildR only considers "&lt;tt&gt;Test*&lt;/tt&gt;" and "&lt;tt&gt;*Test&lt;/tt&gt;" cases as valid JUnit test cases. You can fix this by modifying the &lt;tt&gt;test.rb&lt;/tt&gt; of it.&lt;/li&gt;&lt;li&gt;Transitive dependency management! People &lt;span style="font-weight: bold;"&gt;love and hate&lt;/span&gt; Maven because of this feature. It is currently not supported by BuildR 1.x (scheduled in 2.x I guess). And has Raven implemented it? I'm not sure but I came through &lt;a href="http://mriou.wordpress.com/2007/02/09/builds-and-transitive-dependencies/"&gt;an interesting blog&lt;/a&gt; by &lt;a href="http://www.oreillynet.com/pub/au/3263"&gt;Matthieu Riou&lt;/a&gt; which concludes to add this feature into Raven. Without it, I had to fill in all the dependencies into my Rakefile by referring to the classpath files generated by Maven. How ironic.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;IMO, these Ruby build tools are not as mature as Maven and it requires more scripting work to do what Maven can do for me at this stage, e.g. &lt;a href="http://maven.apache.org/plugins/maven-assembly-plugin/"&gt;assembly&lt;/a&gt;, &lt;a href="http://www.oreillynet.com/pub/au/3263"&gt;release&lt;/a&gt;, etc. I will also quote what &lt;a href="http://dchui.videntity.org/"&gt;David&lt;/a&gt; told me, which makes a lot of sense but could be controversial especially to some Makefile/Rakefile folks:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Why do you have to write code to build your code? You will end up doing more debugging."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So that's a no-no. The &lt;span style="font-style: italic;"&gt;de-facto&lt;/span&gt; build tool has got to be &lt;a style="font-weight: bold;" href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4816521141465219656?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4816521141465219656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4816521141465219656' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4816521141465219656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4816521141465219656'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/01/back-to-maven-no-to-raven-and-buildr.html' title='Back to Maven, No to Raven and BuildR'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5198823534279256288</id><published>2008-01-03T06:24:00.000-08:00</published><updated>2008-01-03T06:48:43.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Flash Mob?</title><content type='html'>It just so happened that I was there, coincidently or not. &lt;a href="http://gbpic.chinareviewnews.com/upload/200801/2/100532800.jpg"&gt;Click here&lt;/a&gt; for my picture.&lt;br /&gt;&lt;br /&gt;Read more from:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://arifabdull.wordpress.com/2008/01/02/that-flash-pulled-crowd-at-klcc/"&gt;Arif's blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pix-pixie.blogspot.com/2008/01/flash-mob-at-klcc.html"&gt;Med's blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fast0811.blogspot.com/2008/01/0103.html"&gt;The official site&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.guangming.com.my/node/19486?tid=3"&gt;Guang Ming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gb.chinareviewnews.com/doc/1005/3/2/7/100532797_2.html?coluid=91&amp;amp;kindid=2674&amp;amp;docid=100532797&amp;amp;mdate=0102111246"&gt;China Review News&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.laksou.com/ViewArticle.aspx?passer=MTMzNQ=="&gt;Lak Sou Magazine&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Or &lt;a href="http://www.google.com/search?q=klcc+flash+mob"&gt;Google&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5198823534279256288?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5198823534279256288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5198823534279256288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5198823534279256288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5198823534279256288'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/01/flash-mob.html' title='Flash Mob?'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-4013302122850008806</id><published>2008-01-01T01:55:00.000-08:00</published><updated>2008-01-01T02:03:37.723-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Happy New Year and Things to Look Into</title><content type='html'>Happy new year folks. This is a blog entry for me to write down a list of things to look into at the start of the year:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.osgi.org/osgi_technology/"&gt;OSGi&lt;/a&gt; - The dynamic module system.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://raven.rubyforge.org/"&gt;Raven&lt;/a&gt; - Java build tool in Ruby&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; - This doesn't need much introduction. Let's start from &lt;a href="http://tech.groups.yahoo.com/group/rest-discuss/"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rubyonrails.org/"&gt;RoR&lt;/a&gt; - Ruby on Rails web development.&lt;/li&gt;&lt;/ul&gt;When you're married with your job and a particular technology (like Java), it's not easy to spare time to explore the other areas and that sucks.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-4013302122850008806?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/4013302122850008806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=4013302122850008806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4013302122850008806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/4013302122850008806'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2008/01/happy-new-year-and-things-to-look-into.html' title='Happy New Year and Things to Look Into'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5748981575914384554</id><published>2007-12-30T01:19:00.000-08:00</published><updated>2007-12-30T02:03:42.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>3 Solutions to GNOME/VNC keyboard mapping issue</title><content type='html'>I am trying to connect to my workstation in the office via &lt;a href="http://www.realvnc.com/products/free/4.1/man/vncviewer.html"&gt;&lt;tt&gt;vncviewer&lt;/tt&gt;&lt;/a&gt; and I got scrambled keys in GNOME before I applied one of the fixes below. This has bugged me for more than a week and Google couldn't really give me a good answer until I searched for:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;asdf abfh vnc&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?q=asdf+abfh+vnc"&gt;Try&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It is a bug reported at &lt;a href="https://bugs.launchpad.net/ubuntu/+source/control-center/+bug/108928"&gt;#108928&lt;/a&gt; and duplicated at &lt;a href="https://bugs.launchpad.net/ubuntu/+source/vino/+bug/112955"&gt;#112955&lt;/a&gt;. Appears more like a GNOME issue than a VNC issue.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution #1: Use vnc4server -extension XFIXES&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No, I did not try this because I simply do not want to change my client. The workaround basically requires you to remove &lt;tt&gt;tightvncserver&lt;/tt&gt; and use &lt;tt&gt;vnc4server&lt;/tt&gt; instead. Refer to &lt;a href="https://bugs.launchpad.net/ubuntu/+source/control-center/+bug/108928/comments/15"&gt;this&lt;/a&gt; and &lt;a href="http://ubuntuforums.org/showpost.php?p=3037718&amp;amp;postcount=7"&gt;this&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution #2: Avoid executing gnome-session&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Instead of running gnome-session, run the following commands in your &lt;tt&gt;xstartup&lt;/tt&gt; script or manually in xterm:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;gnome-wm &amp;amp;&lt;br /&gt;gnome-panel &amp;amp;&lt;br /&gt;gnome-cups-icon &amp;amp;&lt;br /&gt;gnome-volume-manager &amp;amp;&lt;/pre&gt;&lt;br /&gt;Suggested by Randy at &lt;a href="https://bugs.launchpad.net/ubuntu/+source/vino/+bug/112955/comments/3"&gt;this link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution #3: Reset the keyboard layout via gconf-editor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This solution works the best in my opinion, suggested by Will at &lt;a href="https://bugs.launchpad.net/ubuntu/+source/vino/+bug/112955/comments/31"&gt;this link&lt;/a&gt;. Open up &lt;tt&gt;gconf-editor&lt;/tt&gt; in your X then navigate to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;desktop &gt; gnome &gt; peripherals &gt; keyboard &gt; kbd&lt;/pre&gt;&lt;br /&gt;You will probably be seeing empty value &lt;tt&gt;[]&lt;/tt&gt; or &lt;tt&gt;[us]&lt;/tt&gt; for the layouts. Enter anything say &lt;tt&gt;foo&lt;/tt&gt;, close the application and your problem should now be fixed.&lt;br /&gt;&lt;br /&gt;- yc, one problem in life down&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5748981575914384554?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5748981575914384554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5748981575914384554' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5748981575914384554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5748981575914384554'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/3-solutions-to-gnomevnc-keyboard.html' title='3 Solutions to GNOME/VNC keyboard mapping issue'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-6995014077356598222</id><published>2007-12-23T23:06:00.000-08:00</published><updated>2008-02-27T11:41:02.683-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ws'/><title type='text'>Quick Dive into CXF</title><content type='html'>&lt;span style="font-size:130%;"&gt;REST&lt;/span&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; is no longer a new term, you are probably falling too far behind if you haven't yet heard of it. Daniel Diephouse, the creator of &lt;a href="http://xfire.codehaus.org/"&gt;XFire&lt;/a&gt; (who is also now a &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=46578"&gt;Software Architect of MuleSource&lt;/a&gt;) wrote an interesting &lt;a href="http://searchsoa.techtarget.com/qna/0,289202,sid26_gci1270792,00.html"&gt;article&lt;/a&gt; about REST and SOA not too long ago, he sees REST as the next big trend in SOA.&lt;br /&gt;&lt;br /&gt;If you are into this and if you are a Java guy, you may also be aware of the &lt;a href="http://jcp.org/en/jsr/detail?id=311"&gt;JSR 311 - The JavaTM API for RESTful Web Services&lt;/a&gt; and the &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt; (implementation). You would have also been told that Apache &lt;a href="http://ws.apache.org/axis2/1_0/index.html"&gt;Axis 2.0&lt;/a&gt; and &lt;a href="http://cwiki.apache.org/CXF20DOC/restful-services.html"&gt;Apache CXF&lt;/a&gt; (Celtic XFire) supports REST.&lt;br /&gt;&lt;br /&gt;The rest of the blog entry, I will be sharing about how I toyed around with CXF, after taking a quick glance at it and learned how easy using it to write a Web-/REST- service.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Get a POM&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;modelversion&amp;gt;4.0.0&amp;lt;/modelversion&amp;gt;&lt;br /&gt; &amp;lt;groupId&amp;gt;sandbox&amp;lt;/groupId&amp;gt;&lt;br /&gt; &amp;lt;artifactId&amp;gt;apache-cxf&amp;lt;/artifactId&amp;gt;&lt;br /&gt; &amp;lt;version&amp;gt;2007.12.18&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;properties&amp;gt;&lt;br /&gt;     &amp;lt;cxf.version&amp;gt;2.1-incubator-SNAPSHOT&amp;lt;/cxf.version&amp;gt;&lt;br /&gt;     &amp;lt;spring.version&amp;gt;2.0.6&amp;lt;/spring.version&amp;gt;&lt;br /&gt; &amp;lt;/properties&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;repositories&amp;gt;&lt;br /&gt;     &amp;lt;repository&amp;gt;&lt;br /&gt;         &amp;lt;id&amp;gt;apache.incubating.releases&amp;lt;/id&amp;gt;&lt;br /&gt;         &amp;lt;name&amp;gt;Apache Incubating Release Distribution Repository&amp;lt;/name&amp;gt;&lt;br /&gt;         &amp;lt;url&amp;gt;http://people.apache.org/repo/m2-incubating-repository&amp;lt;/url&amp;gt;&lt;br /&gt;     &amp;lt;/repository&amp;gt;&lt;br /&gt;     &amp;lt;repository&amp;gt;&lt;br /&gt;         &amp;lt;id&amp;gt;apache.snapshot.releases&amp;lt;/id&amp;gt;&lt;br /&gt;         &amp;lt;name&amp;gt;Apache Snapshot Release Distribution Repository&amp;lt;/name&amp;gt;&lt;br /&gt;         &amp;lt;url&amp;gt;http://people.apache.org/repo/m2-snapshot-repository&amp;lt;/url&amp;gt;&lt;br /&gt;     &amp;lt;/repository&amp;gt;&lt;br /&gt; &amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;javax.xml.bind&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;jaxb-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;spring-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${spring.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;spring-beans&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${spring.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;spring-context&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${spring.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;spring-web&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${spring.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;log4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;log4j&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;1.2.14&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;!-- Depending on your requirements you may need more or less modules from cxf --&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-frontend-simple&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;             &amp;lt;!-- REST!! --&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-frontend-jaxrs&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-frontend-jaxws&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-databinding-aegis&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-transports-local&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-transports-http&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-transports-http-jetty&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-transports-jms&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-rt-management&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;cxf-common-utilities&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;!--dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;jersey&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;jersey&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;0.4-ea&amp;lt;/version&amp;gt;&lt;br /&gt;         &amp;lt;/dependency--&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;javax.ws.rs&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;jsr311-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;0.4&amp;lt;/version&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;     &amp;lt;dependency&amp;gt;&lt;br /&gt;         &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;         &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;         &amp;lt;version&amp;gt;3.8.2&amp;lt;/version&amp;gt;&lt;br /&gt;         &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;     &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;build&amp;gt;&lt;br /&gt;     &amp;lt;plugins&amp;gt;&lt;br /&gt;         &amp;lt;plugin&amp;gt;&lt;br /&gt;             &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;             &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;             &amp;lt;configuration&amp;gt;&lt;br /&gt;                 &amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;                 &amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;             &amp;lt;/configuration&amp;gt;&lt;br /&gt;         &amp;lt;/plugin&amp;gt;&lt;br /&gt;     &amp;lt;/plugins&amp;gt;&lt;br /&gt; &amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Write the Code&lt;/span&gt;&lt;br /&gt;Once you have built the project into your favourite IDE, start writing the code:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A service interface&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A service implementation&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A Java main class&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package sandbox.cxf.api;&lt;br /&gt;import javax.jws.WebParam;&lt;br /&gt;import javax.jws.WebService;&lt;br /&gt;&lt;br /&gt;import sandbox.cxf.resources.Author;&lt;br /&gt;import sandbox.cxf.resources.Message;&lt;br /&gt;&lt;br /&gt;@WebService(name = "sampleService")&lt;br /&gt;public interface SampleService {&lt;br /&gt;&lt;br /&gt; public Message getEcho(@WebParam(name="input") String string);&lt;br /&gt;...&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;package sandbox.cxf.services;&lt;br /&gt;import javax.jws.WebService;&lt;br /&gt;import javax.ws.rs.HttpMethod;&lt;br /&gt;import javax.ws.rs.UriParam;&lt;br /&gt;import javax.ws.rs.UriTemplate;&lt;br /&gt;&lt;br /&gt;import sandbox.cxf.api.SampleService;&lt;br /&gt;import sandbox.cxf.resources.Message;&lt;br /&gt;&lt;br /&gt;@UriTemplate("/sampleService")&lt;br /&gt;@WebService(endpointInterface="sandbox.cxf.api.SampleService", serviceName="defaultSampleService")&lt;br /&gt;public class DefaultSampleService implements SampleService{&lt;br /&gt;&lt;br /&gt; @HttpMethod("GET")&lt;br /&gt; @UriTemplate("/echo/{input}")&lt;br /&gt; public Message getEcho(@UriParam("input") String string){&lt;br /&gt; &lt;br /&gt;     System.out.println("Echoing message of " + string);&lt;br /&gt; &lt;br /&gt;     Message message = new Message();&lt;br /&gt;     message.setBody(string);&lt;br /&gt; &lt;br /&gt;     return message;&lt;br /&gt; }&lt;br /&gt;...&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;No &lt;tt&gt;*.properties&lt;/tt&gt; or &lt;tt&gt;*.xml&lt;/tt&gt; crap, this is how quickly you can configure and boot a SOAP and REST service:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SampleService sampleService = new DefaultSampleService();&lt;br /&gt;&lt;br /&gt;JaxWsServerFactoryBean wsServerfactoryBean = new JaxWsServerFactoryBean();&lt;br /&gt;wsServerfactoryBean.setServiceClass(SampleService.class);&lt;br /&gt;wsServerfactoryBean.setAddress("http://localhost:8081/sampleService");&lt;br /&gt;wsServerfactoryBean.setServiceBean(sampleService);&lt;br /&gt;wsServerfactoryBean.create();&lt;br /&gt;&lt;br /&gt;JAXRSServerFactoryBean restServerFactoryBean = new JAXRSServerFactoryBean();&lt;br /&gt;restServerFactoryBean.setResourceClasses(Message.class);&lt;br /&gt;restServerFactoryBean.setBindingId(JAXRSBindingFactory.JAXRS_BINDING_ID);&lt;br /&gt;restServerFactoryBean.setServiceBeans(sampleService);&lt;br /&gt;restServerFactoryBean.setAddress("http://localhost:8082/");&lt;br /&gt;restServerFactoryBean.create();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Add logging interceptors if you want some logging and debugging:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;wsServerfactoryBean.getInInterceptors().add(new LoggingInInterceptor());&lt;br /&gt;wsServerfactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Try Now&lt;/span&gt;&lt;br /&gt;Once you have done the above, try to access the services via browser, e.g.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;REST:&lt;/b&gt; http://localhost:8082/sampleService/echo/foobar&lt;br /&gt;&lt;pre&gt;&amp;lt;message&amp;gt;  &amp;lt;body&amp;gt;foobar&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SOAP:&lt;/b&gt; http://localhost:8081/sampleService/getEcho?input=foobar&lt;br /&gt;&lt;pre&gt;&amp;lt;soap:envelope soap="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;&lt;br /&gt; &amp;lt;soap:body&amp;gt;&lt;br /&gt;     &amp;lt;ns1:getechoresponse ns1="http://api.cxf.sandbox/"&amp;gt;&lt;br /&gt;         &amp;lt;ns2:message ns2="http://api.cxf.sandbox/"&amp;gt;&lt;br /&gt;             &amp;lt;body&amp;gt;foobar&amp;lt;/body&amp;gt;&lt;br /&gt;         &amp;lt;/ns2:Message&amp;gt;&lt;br /&gt;     &amp;lt;/ns1:getEchoResponse&amp;gt;&lt;br /&gt; &amp;lt;/soap:Body&amp;gt;&lt;br /&gt;&amp;lt;/soap:Envelope&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Isn't that quick? ;-)&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-6995014077356598222?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/6995014077356598222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=6995014077356598222' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6995014077356598222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/6995014077356598222'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/quick-dive-into-cxf.html' title='Quick Dive into CXF'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5802033683928886723</id><published>2007-12-17T02:48:00.000-08:00</published><updated>2007-12-17T03:01:49.974-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><title type='text'>Malaysia is not much open-source penetrated</title><content type='html'>Wandering around in Google, I found this list which I actually took a look a few months back:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://opensource.mampu.gov.my/soft_list.php"&gt;List of Open Source Software / Solutions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://www.mampu.gov.my/"&gt;MAMPU&lt;/a&gt;, the &lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;alaysian &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;dministration &lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;odernisation and &lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;anagement &lt;span style="font-weight: bold;"&gt;P&lt;/span&gt;lanning &lt;span style="font-weight: bold;"&gt;U&lt;/span&gt;nit, is appointed to implement the OSS initiative in the Malaysia public sector.&lt;br /&gt;&lt;br /&gt;Of course, I am happy to see such move taken by our government, but I feel like there are still a lot of works to do.&lt;br /&gt;&lt;br /&gt;I give my support to the folks at &lt;a href="http://www.openmalaysiablog.com/"&gt;Open Malaysia&lt;/a&gt; too.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5802033683928886723?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5802033683928886723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5802033683928886723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5802033683928886723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5802033683928886723'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/malaysia-is-not-much-open-source.html' title='Malaysia is not much open-source penetrated'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-683595338645158730</id><published>2007-12-14T23:32:00.000-08:00</published><updated>2007-12-15T08:34:56.436-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='competition'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='holiday'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>I thought I was Recharged</title><content type='html'>For a moment, I thought I was recharged after a cool holiday with some church kids in the past 4 days.. but now, being back to the real world, I feel so tired again.&lt;br /&gt;&lt;br /&gt;One exciting news to share about is that I won a place (not the top-3 though, I heard) in the &lt;a href="http://yclian.blogspot.com/2007/08/re-egenting-programming-competition.html"&gt;eGenting programming competition&lt;/a&gt;. And I'm on my way to attend the presentation night in an hour time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Updated:&lt;/span&gt; I got a merit, not too bad. I believe it's the rich use of Java APIs (&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html"&gt;&lt;tt&gt;Pattern&lt;/tt&gt;&lt;/a&gt;, &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html"&gt;&lt;tt&gt;Comparable&lt;/tt&gt;&lt;/a&gt;, &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html"&gt;&lt;tt&gt;Collections&lt;/tt&gt;&lt;/a&gt;) on the merge-sort question that made me one of the winners.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But there are more bullshit than good news, all thanks to GPRS (&lt;a href="http://yuenqi.blogspot.com/2006/02/jen.html"&gt;little Jen&lt;/a&gt; doesn't support 3G). See:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jeffooi.com/2007/12/its_isa.php"&gt;Jeff Ooi - ISA Shopping&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://polytikus.com/2007/12/13/isa/"&gt;Li Tsin - ISA&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;We have just set up a series of polls in our company (internal wiki) for the "Best of 2007". Now I wonder, what're the "Best of 2007" in Malaysia and how're you going to end yours.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-683595338645158730?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/683595338645158730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=683595338645158730' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/683595338645158730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/683595338645158730'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/i-thought-i-was-recharged.html' title='I thought I was Recharged'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-882854343198375681</id><published>2007-12-09T05:19:00.000-08:00</published><updated>2007-12-09T05:41:20.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Human Rights Day</title><content type='html'>&lt;i&gt;"When lawyers and the rakyat fail to march just because the police prefer to arrest people rather than protect them - the nation loses big time...&lt;br /&gt;&lt;br /&gt;This is our right to march peacefully on the street. We can’t let them take it away from us."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;10th of December is the &lt;a href="http://en.wikipedia.org/wiki/Human_Rights_Day"&gt;Human Rights Day&lt;/a&gt;, the Malaysian government, however, hasn't been respecting it much and arresting the people happened to peacefully walk today.&lt;br /&gt;&lt;br /&gt;The quote above is taken from &lt;a href="http://polytikus.com/2007/12/09/illegal-assemblies"&gt;Li Tsin's recent entry&lt;/a&gt;, do check it out. More stories in &lt;a href="http://www.jeffooi.com/2007/12/cos_ouitnumber_people_5_to_1.php"&gt;Jeff Ooi's blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-882854343198375681?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/882854343198375681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=882854343198375681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/882854343198375681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/882854343198375681'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/when-lawyers-and-rakyat-fail-to-march.html' title='Human Rights Day'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-2589480370953308927</id><published>2007-12-05T02:14:00.000-08:00</published><updated>2007-12-05T02:24:45.387-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><title type='text'>A little bit of 'target jsr14'</title><content type='html'>I was taking a look at the Mule's &lt;a href="http://mule.mulesource.org/display/CXF"&gt;CXF transport&lt;/a&gt; which requires Java 5.0. While doing that, I ranted about the &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html"&gt;annotations&lt;/a&gt; feature to one of my colleagues (I simply do not like the idea that having "&lt;tt&gt;@Override&lt;/tt&gt;" in my code stops my 1.4 compiler, why not "&lt;tt&gt;// @Override&lt;/tt&gt;").&lt;br /&gt;&lt;br /&gt;I then read about this article -- &lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp02277.html"&gt;Using Java 5 language features in earlier JDKs&lt;/a&gt; which mentions about the jsr14 (oh, I haven't tried it before, really). Specifying "&lt;a href="http://jcp.org/en/jsr/detail?id=14"&gt;jsr14&lt;/a&gt;" as your target VM version is a workaround of having 1.5 source to run on earlier JVM, however, it is not recommended by Sun, not supported, and not documented. Refer to this document for &lt;a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/javac.html#options"&gt;supported target values&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For that case, I wasn't too surprised that I can't read much about its details with a few Google search attempts.&lt;br /&gt;&lt;br /&gt;These are what I have tried:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Vector;&lt;br /&gt;&lt;br /&gt;public class Source{&lt;br /&gt;&lt;br /&gt;private List&lt;string&gt; foo = null;&lt;br /&gt;&lt;br /&gt;public List&lt;string&gt; getFoo(){&lt;br /&gt;return this.foo;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setFoo(List&lt;string&gt; foo){&lt;br /&gt;this.foo = new ArrayList&lt;string&gt;(foo);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Deprecated&lt;br /&gt;public String toString(){&lt;br /&gt;return "Foobar always!";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args)&lt;br /&gt; throws Exception{&lt;br /&gt;&lt;br /&gt;Method method = Source.class.getMethod("toString", new Class[]{});&lt;br /&gt;if(method.isAnnotationPresent(Deprecated.class)){&lt;br /&gt;   System.out.println("toString is deprecated! :-|");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;List&lt;string&gt; foo = new Vector&lt;string&gt;();&lt;br /&gt;foo.add("Foo");&lt;br /&gt;foo.add("Bar");&lt;br /&gt;&lt;br /&gt;Source src = new Source();&lt;br /&gt;src.setFoo(foo);&lt;br /&gt;&lt;br /&gt;for(String fooElement: src.getFoo()){&lt;br /&gt; System.out.println(fooElement);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Deprecated has a &lt;tt&gt;@Retention(RetentionPolicy.RUNTIME)&lt;/tt&gt; (see &lt;a href="http://findarticles.com/p/articles/mi_zddvs/is_200604/ai_n19415029/pg_1"&gt;An Overview of Java 5's Annotations&lt;/a&gt;). Then, compiled with 1.5:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/opt/java1.5/bin/javac -verbose Source.java -source 1.5 -target 1.5&lt;br /&gt;[parsing started Source.java]&lt;br /&gt;[parsing completed 39ms]&lt;br /&gt;[search path for source files: [.]]&lt;br /&gt;[search path for class files: [/usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/jsse.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/jce.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/charsets.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/sunjce_provider.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/localedata.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/sunpkcs11.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/dnsns.jar, .]]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/reflect/Method.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/ArrayList.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/List.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/Vector.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Object.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/String.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Exception.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Deprecated.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/Annotation.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/Retention.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/RetentionPolicy.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/Target.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/ElementType.class)]&lt;br /&gt;[checking Source]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/Collection.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/AbstractList.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/AbstractCollection.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Iterable.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Throwable.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Class.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/NoSuchMethodException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/SecurityException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/reflect/AccessibleObject.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/System.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/io/PrintStream.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/io/FilterOutputStream.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/io/OutputStream.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Error.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/RuntimeException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/Iterator.class)]&lt;br /&gt;[wrote Source.class]&lt;br /&gt;[total 335ms]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Running using 1.4:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/opt/j2sdk1.4/bin/java Source&lt;br /&gt;Exception in thread "main" java.lang.UnsupportedClassVersionError: Source (Unsupported major.minor version 49.0)&lt;br /&gt;   at java.lang.ClassLoader.defineClass0(Native Method)&lt;br /&gt;   at java.lang.ClassLoader.defineClass(ClassLoader.java:539)&lt;br /&gt;   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)&lt;br /&gt;   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)&lt;br /&gt;   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)&lt;br /&gt;   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)&lt;br /&gt;   at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)&lt;br /&gt;   at java.lang.ClassLoader.loadClass(ClassLoader.java:289)&lt;br /&gt;   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)&lt;br /&gt;   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)&lt;br /&gt;   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Recompile with jsr14:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/opt/java1.5/bin/javac -verbose Source.java -source 1.5 -target jsr14&lt;br /&gt;[parsing started Source.java]&lt;br /&gt;[parsing completed 47ms]&lt;br /&gt;[search path for source files: [.]]&lt;br /&gt;[search path for class files: [/usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/jsse.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/jce.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/charsets.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/sunjce_provider.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/localedata.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/sunpkcs11.jar, /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/ext/dnsns.jar, .]]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/reflect/Method.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/ArrayList.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/List.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/Vector.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Object.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/String.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Exception.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Deprecated.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/Annotation.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/Retention.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/RetentionPolicy.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/Target.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/annotation/ElementType.class)]&lt;br /&gt;[checking Source]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/Collection.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/AbstractList.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/AbstractCollection.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Iterable.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Throwable.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Class.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/NoSuchMethodException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/SecurityException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/reflect/AccessibleObject.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/System.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/io/PrintStream.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/io/FilterOutputStream.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/io/OutputStream.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/Error.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/RuntimeException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/NoClassDefFoundError.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/LinkageError.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/lang/ClassNotFoundException.class)]&lt;br /&gt;[loading /usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/rt.jar(java/util/Iterator.class)]&lt;br /&gt;[wrote Source.class]&lt;br /&gt;[total 366ms]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Re-run with 1.4:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/opt/j2sdk1.4/bin/java Source Exception in thread "main" java.lang.NoClassDefFoundError&lt;br /&gt;   at Source.class$(Source.java:26)&lt;br /&gt;   at Source.main(Source.java:27)&lt;br /&gt;Caused by: java.lang.ClassNotFoundException: java.lang.Deprecated&lt;br /&gt;   at java.net.URLClassLoader$1.run(URLClassLoader.java:199)&lt;br /&gt;   at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)&lt;br /&gt;   at java.lang.ClassLoader.loadClass(ClassLoader.java:289)&lt;br /&gt;   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)&lt;br /&gt;   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)&lt;br /&gt;   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)&lt;br /&gt;   at java.lang.Class.forName0(Native Method)&lt;br /&gt;   at java.lang.Class.forName(Class.java:141)&lt;br /&gt;   ... 2 more&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ouchhh :(&lt;br /&gt;&lt;br /&gt;Get rid of &lt;tt&gt;Deprecated.class&lt;/tt&gt; from code, recompile and run:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/opt/j2sdk1.4/bin/java Source&lt;br /&gt;Foo&lt;br /&gt;Bar&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pfffft? ;)&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-2589480370953308927?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/2589480370953308927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=2589480370953308927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2589480370953308927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2589480370953308927'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/little-bit-of-target-jsr14.html' title='A little bit of &apos;target jsr14&apos;'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5757766578427658728</id><published>2007-12-03T18:39:00.000-08:00</published><updated>2007-12-03T18:48:20.179-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><title type='text'>JIRA Transport 1.0 Released</title><content type='html'>I have released my &lt;a href="http://www.muleforge.org"&gt;MuleForge&lt;/a&gt; project -- &lt;a href="http://mule.mulesource.org/display/JIRA"&gt;JIRA Transport&lt;/a&gt; yesterday. The transport enables easy integration of &lt;a href="http://mule.mulesource.org"&gt;Mule&lt;/a&gt; (the leading open source ESB) with JIRA, and at this version, it has yet to support message receiving.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mulesource.org/display/JIRA"&gt;&lt;span style="font-weight: bold;"&gt;Click here&lt;/span&gt;&lt;/a&gt; to find out more about it.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5757766578427658728?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5757766578427658728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5757766578427658728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5757766578427658728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5757766578427658728'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/12/jira-transport-10-released.html' title='JIRA Transport 1.0 Released'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-2127709130408978173</id><published>2007-11-28T18:03:00.000-08:00</published><updated>2007-11-28T18:10:06.180-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='unit-test'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><title type='text'>For the Green</title><content type='html'>Wrote a blog entry about being puzzled by &lt;a href="http://www.google.com/search?q=static+methods+are+evil"&gt;static methods&lt;/a&gt; and tearing down &lt;tt&gt;MuleManager&lt;/tt&gt; in a failed test.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mulesource.org/display/JIRA/2007/11/28/For+the+Green"&gt;Read this link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Wrote a &lt;a href="http://svn.mule-transport-jira.muleforge.org/browse/mule-transport-jira/trunk/src/main/java/org/mule/providers/jira/ConstantsHelper.java"&gt;&lt;tt&gt;ConstantsHelper&lt;/tt&gt;&lt;/a&gt; class too for &lt;tt&gt;Constants&lt;/tt&gt;, although it doesn't sound necessary.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-2127709130408978173?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/2127709130408978173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=2127709130408978173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2127709130408978173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/2127709130408978173'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/11/for-green.html' title='For the Green'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-8311873573138778828</id><published>2007-11-26T22:57:00.001-08:00</published><updated>2007-11-26T23:10:21.980-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><title type='text'>One of the many problems of OpenID</title><content type='html'>I have just come back from a short trip, which has given me some space off work and had some time to start thinking about getting things done.&lt;br /&gt;&lt;br /&gt;So, one of the very first actions is to get into &lt;a href="http://www.issuesdone.com/"&gt;Issues Done&lt;/a&gt; then realized I could not login as my &lt;a href="http://en.wikipedia.org/wiki/Openid"&gt;OpenID&lt;/a&gt; server -- &lt;a href="http://www.videntity.org/"&gt;Videntity&lt;/a&gt; is either down or gone.&lt;br /&gt;&lt;br /&gt;Stefan Brands wrote a good entry to discuss about the problems of and with OpenID. Do &lt;a href="http://www.idcorner.org/?p=161"&gt;check it out&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The model of OpenID suggests a decentralized approach which arguably is its strength and at the same time its biggest weakness. The service is no longer dependent on just the service provider but also the external authentication service provided by a third party.&lt;br /&gt;&lt;br /&gt;Ideally, if all servers are available, everything works in yours and the dreams' favor. But at this moment, I am totally prohibited to enter any of my sites registered under my OpenID. How bad it is?&lt;br /&gt;&lt;br /&gt;- yc, pffft&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-8311873573138778828?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/8311873573138778828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=8311873573138778828' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8311873573138778828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/8311873573138778828'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/11/one-of-many-problems-of-openid.html' title='One of the many problems of OpenID'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5269441772724303749</id><published>2007-11-13T06:52:00.000-08:00</published><updated>2007-11-13T07:33:11.977-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='lament'/><title type='text'>From Nightwish to Nightmare</title><content type='html'>I had two visits to Aussie. Every time, I brought back a Nightwish album for my sister.&lt;br /&gt;&lt;br /&gt;In year 2006, I bought &lt;a href="http://en.wikipedia.org/wiki/Highest_Hopes"&gt;Highest Hope&lt;/a&gt; when I was in the Melbourne city; In year 2007, I bought &lt;a href="http://en.wikipedia.org/wiki/End_of_an_Era"&gt;End of an Era&lt;/a&gt; from somewhere near QvB.&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/7/72/Highesthopes.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 224px; height: 224px;" src="http://upload.wikimedia.org/wikipedia/en/7/72/Highesthopes.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/thumb/f/fd/Endofanera.jpg/434px-Endofanera.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 163px; height: 224px;" src="http://upload.wikimedia.org/wikipedia/en/thumb/f/fd/Endofanera.jpg/434px-Endofanera.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The departure (an expel actually) of &lt;a href="http://en.wikipedia.org/wiki/Tarja_Turunen"&gt;Tarja Tarunen&lt;/a&gt; shocked me, it was during my Uni final semester. Early this year, &lt;a href="http://en.wikipedia.org/wiki/Anette_Olzon"&gt;Anette Olzon&lt;/a&gt; joined as a replacement of her, but I didn't really have the time to check her out. 'til lately, my sister dug up their new songs and videos (via YouTube) and she kept expressing her sad feeling to me.&lt;br /&gt;&lt;br /&gt;I could understand and neither I could tolerate the way &lt;a href="http://www.youtube.com/watch?v=M0wC2U7zeAg"&gt;Anette screwed up the beautiful Wishmaster&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It simply doesn't work. Tarja is a talented musician and an opera performer but Anette is.. Whatever she is, I am not here to whine but to say that -- not every thing is replaceable, let's call this a new band.&lt;br /&gt;&lt;br /&gt;- yc, missing Tarja&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5269441772724303749?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5269441772724303749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5269441772724303749' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5269441772724303749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5269441772724303749'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/11/from-nightwish-to-nightmare.html' title='From Nightwish to Nightmare'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-5614917318270847653</id><published>2007-11-11T05:28:00.000-08:00</published><updated>2007-11-11T07:00:23.224-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politic'/><category scheme='http://www.blogger.com/atom/ns#' term='malaysia'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Demonstation, a Display of Democracy</title><content type='html'>You could hardly see a mass &lt;span style="font-style: italic;"&gt;peaceful&lt;/span&gt; demonstration in Malaysia. And it happened yesterday:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://www.flickr.com/photos/yclian/1963088303/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2328/1963088303_740a845580_o.jpg" alt="Crowd to Palace" height="640" width="480" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jeffooi.com/2007/11/how_they_painted_it_yellow.php"&gt;Jeff Ooi - Screenshots - How They Painted it Yellow&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jeffooi.com/2007/11/clean_up.php"&gt;Jeff Ooi - Screenshots - Paint it Yellow&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://afp.google.com/article/ALeqM5hjPDihN0Zq11GePycuf6WhFWiPgw"&gt;AFP - Malaysian opposition slams government over protest clampdown&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Our government wasn't happy and this is what spoken by our deputy Prime Minister:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;"If they (the Opposition during the Bersih rally on Saturday) can gather 10,000 people, the Government through Barisan Nasional can gather even more people.&lt;br /&gt;&lt;br /&gt;"But what is the use if such demonstrations only lead to the possibility of ruining what &lt;span style="font-weight: bold;"&gt;we have built&lt;/span&gt; for the country?" he said.&lt;/blockquote&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;I wasn't there because of the opposition. I was there because I could see that the country needs a change and what &lt;span style="font-weight: bold;"&gt;they have built&lt;/span&gt; so far are &lt;span style="font-style: italic;"&gt;shame&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;corruption, stupidity&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;ruining freedom&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;democracy&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flickr.com/photos/yclian/tags/bersih/"&gt;Pictures at Flickr&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- yc, pffft&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-5614917318270847653?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/5614917318270847653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=5614917318270847653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5614917318270847653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/5614917318270847653'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/11/demonstation-display-of-democracy.html' title='Demonstation, a Display of Democracy'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9189811149336712938.post-7630354876266012864</id><published>2007-11-02T09:05:00.000-07:00</published><updated>2007-11-03T22:30:43.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='fwd'/><title type='text'>How to be successful at Integration</title><content type='html'>This whitepaper, written by the CTO of &lt;a href="http://www.customware.net/"&gt;my company&lt;/a&gt; -- Robert Castaneda, gives a pretty clear introduction on what integration is.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.customware.net/repository/display/CustomWare/Whitepaper+-+How+to+be+succesful+at+Integration"&gt;Whitepaper - How to be successful at Integration&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You may love the pictures.&lt;br /&gt;&lt;br /&gt;- yc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9189811149336712938-7630354876266012864?l=blog.yclian.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.yclian.com/feeds/7630354876266012864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9189811149336712938&amp;postID=7630354876266012864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7630354876266012864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9189811149336712938/posts/default/7630354876266012864'/><link rel='alternate' type='text/html' href='http://blog.yclian.com/2007/11/how-to-be-successful-at-integration.html' title='How to be successful at Integration'/><author><name>Yuen-Chi Lian</name><uri>http://www.blogger.com/profile/00962882447601829374</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
