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

<channel>
	<title>When a dog.barks()...</title>
	<atom:link href="http://livingash.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://livingash.wordpress.com</link>
	<description>All of a sudden, I got a bunch of stack traces ...</description>
	<lastBuildDate>Sat, 23 Feb 2008 13:52:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='livingash.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>When a dog.barks()...</title>
		<link>http://livingash.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://livingash.wordpress.com/osd.xml" title="When a dog.barks()..." />
	<atom:link rel='hub' href='http://livingash.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Trick of the Day: Adding Flickr to WordPress Blog?</title>
		<link>http://livingash.wordpress.com/2008/02/23/trick-of-the-day-adding-flickr-to-wordpress-blog/</link>
		<comments>http://livingash.wordpress.com/2008/02/23/trick-of-the-day-adding-flickr-to-wordpress-blog/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 13:45:14 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Wordpress Flickr Widget]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/?p=30</guid>
		<description><![CDATA[It was supposed to be an easy task that shouldn&#8217;t take me more than a minute as described by the official documentation Using the Flickr Widget. Go to Presentation &#62; Widgets. Drag the Flickr widget onto the sidebar. Open the configuration dialog. Give it a title and a RSS feed URL you copied from the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=30&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It was supposed to be an easy task that shouldn&#8217;t take me more than a minute as described by the official documentation <a href="http://faq.wordpress.com/2006/12/24/using-the-flickr-widget/">Using the Flickr Widget</a>.</p>
<ol>
<li>Go to Presentation &gt; Widgets.</li>
<li>Drag the Flickr widget onto the sidebar.</li>
<li>Open the configuration dialog. Give it a title and a RSS feed URL you copied from the Flickr your album&#8217;s page or a specific set&#8217;s page.</li>
<li>Save changes. Sit back and enjoy.</li>
</ol>
<p>But I can <b>only see titles of photos</b> displayed in the widget but not photos. It happens that the Flickr widget WordPress.com installed only works with RSS 2.0 and Flickr has changed its default RSS feed format to Atom RSS. <b>So to make the widget work you have to make Flickr gives you RSS 2.0 feed.</b></p>
<p>It took me a while to figure out how to do it. <b>Simple append &amp;format=rss2 to the end of RSS feed URL</b> you copy from the Flickr page.</p>
<p><b>Example</b><br />
URL copied from Flickr:</p>
<p>http://api.flickr.com/services/feeds/photoset.gne?</p>
<p>set=XXXXX&amp;nsid=XXXX@N06〈=en-us<br />
Modify it as<br />
&gt;&gt; http://api.flickr.com/services/feeds/photoset.gne?<br />
set=XXXXX&amp;nsid=XXXX@N06〈=en-us<b>&amp;format=rss2</b></p>
<p>There is <a href="http://en.forums.wordpress.com/topic.php?id=21437&amp;replies=5">WordPress forum post</a> talking about the issue. It first suggested that you can find the URL for RSS 2.0 feed by looking at the source of Flickr page. I am not sure if you can found it early this year when things are in the middle of transition. But today I look into it I only found 1 URL for Atom RSS feed. The last post said Flickr has restored to give RSS 2.0 feed that the widget should works again. Well, it doesn&#8217;t work for me so may be Flickr has changed their mind again.</p>
<p>If you are interested in how I am inspired to find the solution, go visit <a href="http://www.flickr.com/services/feeds/">Flickr Services &gt; Feeds</a>.</p>
<p>Anyway. Enjoy~</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/30/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/30/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=30&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2008/02/23/trick-of-the-day-adding-flickr-to-wordpress-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>
	</item>
		<item>
		<title>Lock your developers up in a room!</title>
		<link>http://livingash.wordpress.com/2008/02/01/lock-your-developers-up-in-a-room/</link>
		<comments>http://livingash.wordpress.com/2008/02/01/lock-your-developers-up-in-a-room/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 10:17:01 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/?p=29</guid>
		<description><![CDATA[Just today my boss came to me and asked if it would be a good idea to create a private zone in our new office for developers so that they can be properly shielded from chatter and noise all around the office and work happily, productively and creatively. &#8220;YES&#8221; I said without a second thought. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=29&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just today my boss came to me and asked if it would be a good idea to create a private zone in our new office for developers so that they can be properly shielded from chatter and noise all around the office and work happily, productively and creatively. &#8220;YES&#8221; I said without a second thought. But the question I am thinking in my mind is far from having a room or some sort of sound absorbing materials placed around the zone developer&#8217;s working in.</p>
<p>Is a dedicated <b>room </b>for developers <b>matters</b>?<br />
Or <b>the way</b> we let developers <b>doing their job matters</b>?</p>
<p>I say the latter. We want to be in a room because we are getting most of our job done happily and productively when we work alone.</p>
<p><b>WE ARE BEST AT WORK WHEN BEING ALONE.</b></p>
<p>A room is only one of the factors that makes this happen.</p>
<p>This might sounds like a statement in the favor of people who have the excellent capability and interest sitting in front of a computer all day long without speaking a word. But one one is an exception. All right, you are not a lonely guy. You might be socially active. You may be welcome by everyone. You love making new friends. You love talking to the others . You love helping the others out. You just love everybody (/hug). But the work-alone-is-the-best principle would still applies to you. Why?</p>
<p><b>Multi-tasking makes people slow and stupid</b>, as suggested by Walter Kirn in his article &#8220;<a href="http://www.theatlantic.com/doc/200711/multitasking">The Autumn of Multi-tasker</a>&#8220;. It is not necessary any physical tasks to be assigned to one to cause the problem. Just anything such as chatter, phone calls, emails and instant messages that derails people&#8217;s mind can do the harm. They blow away your new ideas and short term memories, keeping you start over and over again the thinking process in order to finish the works at hand.</p>
<p>Experiments executed by authors of the famous book <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.amazon.com/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1201860580&amp;sr=8-1">Peopleware</a> have proven the negative relationship between productivity and office noise level. Guys at <a href="http://www.37signals.com">37Signals</a> have even<a href="http://www.37signals.com/svn/archives2/getting_real_the_alone_time_zone.php"> suggested that you should setup a rule</a> requiring every one in your team to work alone for a certain period of time everyday. So that every one can get his work done happily and effectively while still keeping the communication between team members.</p>
<p>So locking up your developers in a room will probably do good to your company. You keep these mind workers concentrated on their creation works at least with a physical mean. The bottom line is, however, you have to honor the rule of silence. If the room is nothing more than a room and developers are still getting interrupted in numerous different ways other than nearby chatter and calls, you might have been send the developers into prisons.</p>
<p>Believe it or not, if you lock a team of developers up in a room with computers and leave them for a sufficient long time, they will either give you a master piece of software, or a completed work of Shakespeare <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/29/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/29/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=29&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2008/02/01/lock-your-developers-up-in-a-room/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>
	</item>
		<item>
		<title>Start small. Move frequent.</title>
		<link>http://livingash.wordpress.com/2007/09/04/start-small-move-frequent/</link>
		<comments>http://livingash.wordpress.com/2007/09/04/start-small-move-frequent/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 18:58:07 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/09/04/start-small-move-frequent/</guid>
		<description><![CDATA[Days ago my colleague forwarded me a post from Jason Fried at 37 signals, the company who created Ruby on Rail, talking about the story of how they designed and implemented a new product feature. It&#8217;s inspiring. To me, it recalls of two lessons I&#8217;ve been taking for long during my development career: small problems [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=24&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://livingash.files.wordpress.com/2007/09/kansas-evolution.jpg?w=420" alt="kansas-evolution.jpg" /></p>
<p>Days ago my colleague forwarded me <a href="http://www.37signals.com/svn/posts/583-design-decisions-highrise-import">a post from Jason Fried</a> at 37 signals, the company who created <a href="http://rubyonrails.org/">Ruby on Rail</a>, talking about the story of how they designed and implemented a new product feature. It&#8217;s inspiring. To me, it recalls of two lessons I&#8217;ve been taking for long during my development career: small problems over big problem, small solutions over big solution.</p>
<h4>People love GENERIC stuffs</h4>
<p>It is always a habit of people, essentially developers, to think big ahead. But why? Cos it is commonly believed that every body can do small solutions but only the smarts can think big stuffs &#8211; designs crafted to &#8220;potentially&#8221;do many things ahead with minimal amount of effort. So physicists have been working for hundreds of years on a unified theory to describe the world. So process designers and theorists have been dumping standards of business process flows that claimed to fits organizations from small local firms to international enterprises. So we developers work to death for generic classes, abstract implementations, standards, frameworks.</p>
<p>It&#8217;s just a shame to let your fellows found that you have duplicated logics or codes in your development work. Even sometimes the things in common are only bean properties of identical names. It&#8217;s just not a pretty if you don&#8217;t implements as many functions as you can with minimal number of lines of codes. The name &#8220;generic&#8221; just rocks. People creating generic things are stars.</p>
<p>Last but not least, money matters. The more generic a design is, the more likely it is offering functions people need. More need more money. So you boss love it. And you should love creating it.</p>
<h4>It&#8217;s all basic instinct to love big and generic things. But should you?</h4>
<p>Suppose you are going to design and implement a little library systems that let the staffs borrow and return books in a self help manner with a browser. Okay, let&#8217;s write the story down first&#8230;</p>
<p><em> &#8220;User can borrow and return books&#8221;.</em></p>
<p>What do you need to implement it?</p>
<ul>
<li> <strong>Book </strong>- The model representing a book.</li>
<li> <strong>BookManager </strong>- Service class providing borrow and return operations.</li>
<li> <strong>BookDAO </strong>- Data access component for saving the data to a database.</li>
</ul>
<p>Simple enough, right? &#8220;It must be too simple. I must have missed something.&#8221; You said to yourself.</p>
<p>Oh&#8230; oh&#8230;. but wait. People borrow &#8220;things&#8221;. There are many assets in your company are borrowed and returned frequently and yet your company still don&#8217;t have a system to manage it. Notebooks, VCR, projectors, salary (Yes, you can borrow your next month&#8217;s salary &gt;&lt;b). Genius, perhaps you can expand it a little bit to make the design capable of handling these things as well, potentially. Let&#8217;s do it.</p>
<ul>
<li><strong>Resource </strong>- Interface decorating any &#8220;things&#8221; that are allowed to be borrowed and returned.</li>
<li><strong>AbstractResource </strong>implements <strong>AbstractBorrowableResource </strong>- A default yet abstract implementation.</li>
<li><strong>Book </strong>extends <strong>AbstractResource </strong>- Implementation for book.</li>
<li><strong>ResourceManager </strong>- Interface defining a service that handles operations related to borrows and returns.</li>
<li><strong>AbstractResourceManager </strong>implements <strong>AbstractResource </strong>- Implementation of service for others to extend and implement the real stuff.</li>
<li><strong>BookManager </strong>extends <strong>AbstractResourceManager </strong>- Implementation for book service.</li>
<li><strong>ResourceDAO </strong>- Interface. You know what it is. I am lazy.</li>
<li><strong>AbstractResourceDAO </strong>implements <strong>ResourceDAO </strong>- I guess you know.</li>
<li><strong>BookDAO </strong>extends AbstractResourceDAO &#8211; Cough~ Cough.</li>
</ul>
<p>Looks great now. You now got an extensible hierarchy, interface driven. What else do you need? Yay~ Yay. Modules.</p>
<p>It is generally good to separate the API and actual implementations so that when people code in parallel without caring if you are in a fighting hard to get your implementations compiled. With API extracted the API itself might be reused in other projects as well, though you can&#8217;t think of what sort of projects would like to include it at the moment. Yes, it is generally good. So you do it in 2 modules: resource-api, resource-code. Out of luck your favorite IDE you-know-which does not support well multi modules development so you spend quite a time figuring out the right way to do it. To meet the deadline you work sleeplessly for days. Finally God blessed you this brave code monkey you got all the things sticked together.</p>
<p>Your manager shows up as you get out of Alice&#8217;s rabbit hole, a week behind schedule. He is so highly educated he decided to not to comment on your smelling body. You showed him your work. Nothing happens&#8230; Oh I mean bugs. A week later the system is put into production. Staff can now borrow and return books on their own. Managers no longer need to worry about where do their most valuable books go. A year after, people are still borrowing and returning books. You, on the other side, still live as a sleepless code monkey. No other project cares about the API library except the system itself.</p>
<p>It won&#8217;t be fun at all if I tell you what&#8217;s behind the story. I might have amplified part of it a bit. But most of it are borrowed from real stories. Oh, borrow.</p>
<h4>You should love them. But be pragmatic&#8230;</h4>
<p>You should love big and generic things &amp; ideas. It&#8217;s basic instinct. You can&#8217;t control yourself not to love them. There are, however, reasons why you should do more small solutions rather than a few big solutions when you layout your development.</p>
<ol>
<li><strong>Real value comes from real things<br />
</strong>Real values of thing only show when the thing becomes real. This is specially true when it comes to user usability. Unless you know well now to generalize an implementation as you might have do it before, it is likely to be a waste of effort to make things generalized before users told the value. You better save your effort on other more practical and valuable targets, or to take a rest.</li>
<li><strong>User don&#8217;t care!<br />
</strong>User don&#8217;t care if you are providing generic features or implementations. They just want their job done. They borrow books. They borrow equipments. They won&#8217;t care if the things they borrow are under the name of &#8220;resource&#8221;. I&#8217;ve seen many times applications implemented a so generic way that attempt to do almost everything related to its target scope end up getting users lost in configuration hell and navigation maze. It&#8217;s often no single user knows the whole application. If user have need to do common things in a more effective way, they will let you know when they use it. Make it work first, then the real patterns show up when your users get their hands on it.</li>
<li><strong>More rolls more wins</strong><br />
This is what one of my favorite book <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.amazon.com/Max-Strategy-Buisnessman-Stuck-Airport/dp/0688153828/ref=pd_bbs_sr_1/002-3290234-8641660?ie=UTF8&amp;s=books&amp;qid=1188551146&amp;sr=8-1"><strong>The Max Strategy: How A Buisnessman Got Stuck At An Airport</strong></a> suggests. Do more small solutions. Join and refactor only when need. By giving more chances the market and users accesses your new ideas, you make more chances of getting success.</li>
<li><strong>Diversify risk </strong><br />
Unless God hates you, or Murphy blesses you, you are less likely to get all the small solutions go wrong. One big solution, go wrong often. Even it has the same chance of going wrong as that of small solutions on average, big solutions still bears bigger risk. As big solution takes more time to develop, you know the result late. That said, as the deadline is close, you got little room to fix it or place an alternative in time.</li>
<li><strong>  Duplicates != Evils </strong><br />
Duplicated codes or logics are not evils. They are when first, you never have the idea in mind to refactor it whenever you can spare time or need to do it. Second, they are removed through generalization in an unusable way. That said, they are generalized only because you want to generalize them. Not for value or need. Things look common are not necessary duplicates of each other. Take a real close look. They might just looks similar to each other.</li>
<li><strong>Geek you can always refactor</strong><br />
As long as you follows common good programming practices, say properly organize your packages and encapsulate logics, test driven, you can always refactor to capture the commons.</li>
<li><strong>Lesson from the mother nature<br />
</strong>Look at your body. If you ever considered it as one of the finest creation from God, then learn from it. It evolves over time from very simple and small structures to an integrated and multi-function structure today.</li>
</ol>
<h4>Genius-free development</h4>
<p>I admit that there are genius in this world who can create master pieces with few iterations. When I was in college taking an A.I course, I worked with a guy to build an expert system for identifying whales as an assignment. He took the job of engine development while I took the front-end part. For days this guy sit in front of the computer, rarely types but spent most of the time meditating while I kept muddling through tons of compilation errors and bugs by his side. Finally he compiled his codes and run the engine. Almost no error pop during the process except a few minor typo. It just runs, smooth and quick. The guy is a real genius.</p>
<p>I am not genius. I believe 99.99% of us are not either. But we can still build big successful solutions. Starts small. Move frequent. Be iterative. It might take more steps then genius do. But for the rest of us, it could be perhaps the shortest path we could take towards success.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=24&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/09/04/start-small-move-frequent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/09/kansas-evolution.jpg" medium="image">
			<media:title type="html">kansas-evolution.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>How many things you need to build a web application in Java?</title>
		<link>http://livingash.wordpress.com/2007/08/17/how-many-things-you-need-to-build-a-web-application-in-java/</link>
		<comments>http://livingash.wordpress.com/2007/08/17/how-many-things-you-need-to-build-a-web-application-in-java/#comments</comments>
		<pubDate>Fri, 17 Aug 2007 09:01:37 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/08/17/how-many-things-you-need-to-build-a-web-application-in-java/</guid>
		<description><![CDATA[I mean a structured one here. You can of course build a site simply by putting a bunch of JSPs together into a Tomcat. But the result is nothing more than a collection of interlinked dynamic pages, not an application. A structured application should be with easy to read, easy to maintain, extend and refactor [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=19&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I mean a structured one here.</p>
<p>You can of course build a site simply by putting a bunch of JSPs together into a Tomcat. But the result is nothing more than a collection of interlinked dynamic pages, not an application. A structured application should be with easy to read, easy to maintain, extend and refactor in a logical manner.</p>
<p>I didn&#8217;t quite realize this question until recently I am assigned a few new developers and decided to layout a web application skeleton by picking some bullet-proven frameworks and technologies on the market, in Java camp of course, to let our developers to work productively without getting stuck with traps our development team have muddled through in the past. This is my finalized shopping list.</p>
<p><img src="http://livingash.files.wordpress.com/2007/08/java-stack.jpg?w=420" alt="java-stack.jpg" /></p>
<p>The stack is huge. Scary enough to hold people back from writing their first web application in Java, after completing their hello-world course. Not to mention the initial lengthy and error-prone setup procedure one need to go through to get all stuff running together &#8230; Eclipse WTP, Maven, Spring, Acegi, Hibernate, Tomcat, Blahlala&#8230;.</p>
<p>15 items on my menu. Holy.</p>
<p>I love Java. It is still my favorite programming language today. It let me build fantastic application to serve people around the world without caring much about the m$ stuffs &amp; hacks. But when it comes to the web, the slope one need to climb so huge that if you are new to these you will be exhausted before making any fun from building your first application. I could be proud of the number of skills I mastered. Yet I would enjoy more if my application can do more for the users, improves in a rapid rate to catch up user&#8217;s need and make them happier. Flying is fun. Crafting the aircraft to fly is definitely another issue.</p>
<p>If today some one turn to me and ask &#8220;I want to write a web application. Where should I start?&#8221;. Try to <a href="http://www.rubyonrails.org/">Ruby on Rails</a> my friend. Get a text editor and <a href="http://instantrails.rubyforge.org/wiki/wiki.pl">Instant Rails</a>, you are off to go.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=19&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/08/17/how-many-things-you-need-to-build-a-web-application-in-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/08/java-stack.jpg" medium="image">
			<media:title type="html">java-stack.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Struts 2 and Sun Micro&#8217;s tools.jar in Eclipse WTP</title>
		<link>http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/</link>
		<comments>http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 03:05:53 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/</guid>
		<description><![CDATA[A few days ago I setup my first Maven 2 enabled struts 2.0 WTP project. After an hour of muddling through the Eclipse IDE setup with WTP plus Maven, I soon ran into another trouble when I built the project in Eclipse. Maven told me that it missed the com.sun tools artifact that it couldn&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=16&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A few days ago I setup my first Maven 2 enabled struts 2.0 WTP project. After an hour of muddling through the Eclipse IDE setup with WTP plus Maven, I soon ran into another trouble when I built the project in Eclipse. Maven told me that it missed the com.sun tools artifact that it couldn&#8217;t build the project.</p>
<p><strong>Missing dependency tools.jar</strong><br />
<code><br />
8/13/07 5:58:51 PM CST: Missing:<br />
1) com.sun:tools:jar:1.5.0<br />
Try downloading the file manually from the project website.<br />
Then, install it using the command:<br />
mvn install:install-file -DgroupId=com.sun -DartifactId=tools \<br />
-Dversion=1.5.0 -Dpackaging=jar -Dfile=/path/to/file<br />
Path to dependency:<br />
1) tutorial:tutorial4:war:1.0-SNAPSHOT<br />
2) org.apache.struts:struts2-core:jar:2.0.5<br />
3) com.sun:tools:jar:1.5.0<br />
1 required artifact is missing.<br />
for artifact:<br />
tutorial:tutorial4:war:1.0-SNAPSHOT<br />
from the specified remote repositories:<br />
central (http://repo1.maven.org/maven2)<br />
</code></p>
<p>Huh? It misses the tools.jar from Sun&#8217;s JDK.</p>
<p><strong>Murders &#8211; Mr. profile &#8220;default-tools&#8221; &amp;</strong><strong> Mr. Sun Micro the JDK</strong><strong>  </strong></p>
<p>I soon dig out that it is the struts2-core artifact has a dependency on Sun&#8217;s tools.jar.  A profile named &#8220;default-tools.jar&#8221; declared the dependency on the tools.jar, which is activated when you are running the maven operation with Sun&#8217;s JDK. This is what you can see from struts2-core&#8217;s pom.<br />
<code><br />
&lt;profile&gt;<br />
&lt;id&gt;default-tools.jar&lt;/id&gt;<br />
&lt;activation&gt;<br />
&lt;property&gt;<br />
&lt;name&gt;java.vendor&lt;/name&gt;<br />
&lt;value&gt;Sun Microsystems Inc.&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/activation&gt;<br />
&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;com.sun&lt;/groupId&gt;<br />
&lt;artifactId&gt;tools&lt;/artifactId&gt;<br />
&lt;version&gt;1.5.0&lt;/version&gt;<br />
&lt;scope&gt;system&lt;/scope&gt;<br />
&lt;systemPath&gt;${java.home}/../lib/tools.jar&lt;/systemPath&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/profile&gt;<br />
</code></p>
<p>Yet strange enough, I had no problem running the build with my command prompt. It only matters when running in Eclipse. To be exact, there was no problem when I manually triggered the building process by &#8220;Run as Maven2 Build&#8221; with the pom. But when Eclipse builds the project automatically, say after a clean, the error pops.</p>
<p>Adding the tools.jar to Eclipse&#8217;s JDK runtime does not help. Nonetheless this does look like a good practice so I give it up.</p>
<p>So what have went wrong? The profile try to look up the tools.jar by back stepping from the directory <code>java.home</code>, where it is the home directory of running Java process automatically deduced and set by Maven. If <code>java.home</code> points to a JDK, the path works as JDK comes with a tools.jar in the lib/ folder. But if <code>java.home</code> points to a JRE instead, the path should fail as JRE doesn&#8217;t bring along the tools.jar. When I start Eclipse, I could have started it by either a JRE or a JDK as I simply doubled clicked the shortcut to it on my desktop. The remaining problem is, isn&#8217;t it Eclipse is running the Maven 2 Builder with my configured JDK in the project? So I make the shots.</p>
<p><strong>Starting Eclipse with -vm Option</strong></p>
<p>The configuration free classic way to start Eclipse with desired VM.</p>
<p><code>$&gt;eclipse -vm "C:\Program Files\Java\jdk1.6.0_01\bin"</code></p>
<p>Wow! It works. Okay, give it another shot.</p>
<p><strong>Making JDK/bin the First Element in %PATH%</strong><br />
<code><br />
$&gt;set PATH=C:\Program Files\Java\jdk1.6.0_01\bin;%PATH%<br />
$&gt;eclipse<br />
</code></p>
<p>Jesus! it works again.</p>
<p><strong>Conclusion?</strong></p>
<p>It looks like the when Eclipse is told to call the maven build manually with a pom.xml it, it executes with the configured JDK&#8217;s path. But when it comes to execute the Maven 2 Builder, it uses the Java process which starts the Eclipse instead. So if the Eclipse&#8217;s started with a Sun Micro JRE, it misses the tools.jar for struts2-core. Other JDK/JRE doesn&#8217;t matter, however, as the tools.jar or equivalent are usually on the classpath already.</p>
<p>Is it a behavior of Eclipse or just that of the M2Eclipse plug-in? I haven&#8217;t figured out yet. May be I just messed all the things up by accident (or luck). If anyone know what&#8217;s really inside, let me know <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=16&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>
	</item>
		<item>
		<title>Back to the future! When Eclispe WTP 2.0 meets Maven 2&#8230;</title>
		<link>http://livingash.wordpress.com/2007/08/13/back-to-the-future-when-eclispe-wtp-20-meets-maven-2/</link>
		<comments>http://livingash.wordpress.com/2007/08/13/back-to-the-future-when-eclispe-wtp-20-meets-maven-2/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 06:58:42 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/08/13/back-to-the-future-when-eclispe-wtp-20-meets-maven-2/</guid>
		<description><![CDATA[I have been using Eclipse3.2 with WTP 1.5 plus Maven 2 for product development. My history of using WTP can actually dated back to its early beta version 0.7, to the days I have to manually edit the projects files to change the project&#8217;s web content folder to places other than WebContent/. It&#8217;s buggy all [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=12&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been using Eclipse3.2 with WTP 1.5 plus Maven 2 for product development. My history of using WTP can actually dated back to its early beta version 0.7, to the days I have to manually edit the projects files to change the project&#8217;s web content folder to places other than WebContent/. It&#8217;s buggy all along the way but have been constantly improving. When <a href="http://blogs.reucon.com/srt/2007/07/05/using_maven_with_intellij_idea_7_0.html">2.0</a> is out, I installed at once and start setting it up with my Maven 2 environment.</p>
<p><strong>Maven project first? Or Eclipse project first?</strong></p>
<p>Recalls me the old humor &#8220;Which came 1st chicken or egg?&#8221;. Someone have even setup a whole site for it (<a href="http://www.whichcame1st.com/">http://www.whichcame1st.com/</a>). Um? Cough! Cough &#8230; let&#8217;s back to our topic. The first decision to make on setting up the maven enabled project, is to decide where to start first.</p>
<p><strong>Maven first &#8211; the official way &#8230; boom!</strong><em><br />
</em></p>
<p>Maven comes with a plug-in that helps generate a eclipse WTP project that fits the standard maven project structure and dependency management practices. In theory all you need to do is executing a mvn command with desired WTP version specified. In practices it never works for me, from WTP 0.7 to 1.5. The Eclipse will either told you that there something wrong with the project&#8217;s WTP meta or the classpath. Okay, sorry guys I know I am sort of moron don&#8217;t know how to fix a cook. But even if you managed to get it loaded into Eclipse without any error, you might not like the way maven is brought into your eclipse either. It brings the necessary dependencies into your project by listing all into the classpath statistically. Here&#8217;s a grep:<br />
<code><br />
&lt;classpathentry kind="var" path="M2_REPO/ognl/ognl/2.6.9/ognl-2.6.9.jar"/&gt;<br />
&lt;classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/2.0.1/spring-core-2.0.1.jar"/&gt;<br />
&lt;classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.1.1/commons-fileupload-1.1.1.jar"/&gt;<br />
</code></p>
<p>Not to mention the variable M2_REPO. This approach probably means you have to re-generate the classpath again every time you updates the dependencies of the project. I haven&#8217;t figured out if the plug-in is smart enough to merge changes if it founds a .classpath file on its way. But if it didn&#8217;t, god bless you my friend.</p>
<p>Most important of all, the plug-in does not support 2.0 by the day of writing. So boom!</p>
<p>How about if I generate the maven project first, not with the wtp plugin of course, then import into Eclipse and make it a WTP project? Looks feasible. As with Eclipse 3.3 you can add facets to the project through the user interface. If a project is not initially a WTP project, you can turn it into by adding the WTP facet. Our team has once used this technique to save a WTP project which loses its WTP nature after passing through the CVS as the component settings are by default not carried along.</p>
<p>So I do it. For unknown reason my Eclipse don&#8217;t like it, there&#8217;s no facet configuration option show up in the project properties dialog at all that I found no way of adding the facet. Again, boom! Time to go the other way.</p>
<p><strong>Eclipse first &#8211; the alternative official way? &#8230; boom! boom!</strong><em> </em></p>
<p>This is my thought: create a WTP project with structure conform to maven project structure then make it maven enabled with the M2Eclipse plug-in. It should work. At least this is the way I do the setup previously with Eclipse WTP 1.5, which runs on a 3.2 core.</p>
<p>Improvements on products, you know, often comes with more validations to prevent users from making serious mistakes that could turn the product into error reporting service. This is obviously true with the new 3.3, it no longer accepts &#8220;/&#8221; or &#8220;\&#8221; in resource name. That means you can specify the web content directory as src/main/webapp and Java source directory as src/main/java according to maven conventions.</p>
<p><img src="http://livingash.files.wordpress.com/2007/08/wtp1.jpg?w=420" alt="wtp1.jpg" /></p>
<p>I don&#8217;t know why they do so. Perhaps the folks at Eclipse don&#8217;t like things not placed on the first level. I give up this approach anyway.</p>
<p><strong>Craft by Hand. Dirty. But it works!</strong></p>
<p>Yes it is a hack. It&#8217;s not smart at all. I did it with WTP 0.7. Now I do it again with WTP 2.0. Well well, it works. Here&#8217;s the approach I take:</p>
<ol>
<li>Open a eclipse, create a reference &#8220;Dynamic Web Application&#8221; project.</li>
<li>Generate a standard maven project with default archetype</li>
<li>Copy all necessary Eclipse settings files to the maven project and modify these files to make them fits the project.</li>
</ol>
<p>If you plan to follow the instructions in below to setup a Maven 2 WTP project, make sure the following are done to save your effort later on:</p>
<ol>
<li>Eclipse 3.3 with WTP 2.0 installed.</li>
<li>M2Eclipse plug-in installed (<a href="http://m2eclipse.codehaus.org/">http://m2eclipse.codehaus.org/</a>)</li>
<li>A servlet container runtime, could be Tomcat or anything supported, is configured.</li>
</ol>
<p>Ready? Let&#8217;s do it.</p>
<p><u>Step 1: Create a reference WTP Project</u></p>
<p>Simple huh?</p>
<ol>
<li>Open eclipse.</li>
<li>New project &gt; Project &#8230; &gt; Web &gt; Dynamic Web Project.</li>
<li>Name project. Select target runtime. Click Finish.</li>
<li>Close eclipse.</li>
</ol>
<p><u>Step 2: Create a maven project</u></p>
<ol>
<li>Do it with maven archetype.<br />
<code>mvn archetype:create -DgroupId=com.mycompany -DartifactId=my-war</code></li>
<li>Add the following folders:
<ol>
<li>src/main/webapp</li>
</ol>
</li>
<li>You might want to add the following folders as well:
<ol>
<li>src/main/resources</li>
<li>src/test/resources</li>
</ol>
</li>
</ol>
<p><u>Step 3: Copy Eclipse files</u></p>
<p>Copy the following files from the reference eclipse project to maven project.</p>
<ol>
<li>.project (file)</li>
<li>.classpath (file)</li>
<li>.settings (folder)</li>
</ol>
<p><u>Step 4: Edit project setting</u></p>
<ol>
<li>Edit .project.</li>
<li>Find <code>&lt;name&gt;${project-name}&lt;/name&gt;</code> under <code>&lt;projectDescription&gt;</code></li>
<li>Change <code>${project-name}</code> you would like to have with your project. It is recommended that you name your project in only characters, digits, hyper and underscore only, although not strictly required.</li>
</ol>
<p><u>Step 5: Edit classpath</u></p>
<ol>
<li>Edit file .classpath.</li>
<li>Find<code> &lt;classpathentry kind="src" path="src"/&gt;</code></li>
<li>Change to <code>&lt;classpathentry kind="src" path="src/main/java"/&gt;</code></li>
</ol>
<p><u>Step 6: Edit WTP component setting</u></p>
<ol>
<li>Edit file .settings/org.eclipse.wst.common.component. It should looks like:<br />
<code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;project-modules id="moduleCoreId" project-version="1.5.0"&gt;<br />
&lt;wb-module deploy-name="${deploy-name}"&gt;<br />
&lt;wb-resource deploy-path="/" source-path="${webcontent-path}"/&gt;<br />
&lt;wb-resource deploy-path="/WEB-INF/classes" source-path="${source-path}"/&gt;<br />
&lt;property name="context-root" value="${context-root}"/&gt;<br />
&lt;property name="java-output-path" value="build/classes"/&gt;<br />
&lt;/wb-module&gt;<br />
&lt;/project-modules&gt;</code></li>
<li>Set <code>${deploy-name}</code> to your desired deploy-name. This name have no effect on the app&#8217;s accessing URL It usually only serves as a meaningful label in servlet container&#8217;s administration console.</li>
<li>Set <code>${webcontent-path}</code> to <code>/src/main/webapp</code></li>
<li>Set <code>${source-path}</code> to <code>/src/main/java</code></li>
<li>Set <code>${context-root}</code> to the path you want the application to be accessed. Say, &#8220;my-app&#8221;. Then you app will be accessed through http://localhost:8080/my-app. It is usually good to follow the convention that you can name it with the project name, as long as your project name fits URL naming limitations.</li>
</ol>
<p><u>Step 7: Import project into Eclipse</u></p>
<ol>
<li>Open eclipse.</li>
<li>File &gt; Import &gt; General &gt; Existing projects into eclipse.</li>
<li>Browse the directory where your maven project is located. Click Finish.</li>
</ol>
<p><u>Step 8: Post configuration</u></p>
<p>Nearly done. Just a few more steps to make maven works smoothly with WTP. Make sure that you have M2Eclipse installed before you go.</p>
<ol>
<li><strong>Enable Maven support</strong><br />
On the project context menu, select Maven 2 &gt; Enable.</li>
<li><strong>Include Maven Dependency to Web Library</strong><br />
Project properties &gt; J2EE Module Dependencies&gt; Tick &#8220;Maven2 Dependencies&#8221;.</li>
<li><strong>Add additional maven source paths.</strong><br />
By default the project only have src/main/java in the source folder list. Maven directory structure, however, comes with multiple useful source folders. Add them to the list as well:</p>
<ol>
<li>src/main/resources</li>
<li>src/test/java</li>
<li>src/test/resources</li>
</ol>
</li>
<li><strong>Set order for libraries</strong><br />
Project properties &gt; Java Build Path &gt; Order and Export, set order as: src/main/java, Maven 2 Dependencies, Web App Libraries, blahalala&#8230;</li>
<li><strong>Set order for builders</strong><br />
Project properties &gt; Java Build Path &gt; Builders, set order as: Maven 2 Project Builder, blahalala&#8230;</li>
</ol>
<p><u>Step 9: Ready! Set! Go!</u></p>
<p>Clean your project. Let it build automatically. You might need a eclipse restart or a few more rounds of clean if not all the things work out immediately.</p>
<p>This is how I get my first Struts 2 tutorial running with Eclipse WTP 2.0.</p>
<p><img src="http://livingash.files.wordpress.com/2007/08/wtp2.jpg?w=420" alt="wtp2.jpg" /></p>
<p><strong>The Rebel</strong></p>
<p>It is heard that Intellj IDEA 7 comes with out-of-the-box support to Maven. I will try it out soon to see if it really works as advertised. Before that, if you are interested you might take a look at Stefan Reuter&#8217;s post <a href="http://blogs.reucon.com/srt/2007/07/05/using_maven_with_intellij_idea_7_0.html">Using Maven with IntelliJ Idea 7.0</a>.</p>
<p>If you know better anyway to do the integration, please let me know. I seriously looking for better methods <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=12&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/08/13/back-to-the-future-when-eclispe-wtp-20-meets-maven-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/08/wtp1.jpg" medium="image">
			<media:title type="html">wtp1.jpg</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/08/wtp2.jpg" medium="image">
			<media:title type="html">wtp2.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Code by the road</title>
		<link>http://livingash.wordpress.com/2007/08/01/code-by-the-road/</link>
		<comments>http://livingash.wordpress.com/2007/08/01/code-by-the-road/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 06:45:35 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/08/01/code-by-the-road/</guid>
		<description><![CDATA[Today is my first day in my company&#8217;s new China office. Our China office was located at a science park quite a distance away from major cities around. The facilities are on average acceptable. The place is quiet and well suit for works requirement mental peace and isolation. Our staff there are most happy with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=8&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today is my first day in my company&#8217;s new China office.</p>
<p><img src="http://livingash.files.wordpress.com/2007/08/060731-tokyowakees-11-thumb.jpg?w=420" alt="060731-tokyowakees-11-thumb.jpg" /></p>
<p>Our China office was located at a science park quite a distance away from major cities around. The facilities are on average acceptable. The place is quiet and well suit for works requirement mental peace and isolation. Our staff there are most happy with it. It is, however, too distant for major cities that we have had great difficulties in recruiting people. People often prefers to work at locations near to their home. Even if you are willing to pay more, you can hardly get a few more people willing to come to work. Money can buy almost every thing but a few. Leisure time is of no doubt one of those. This is especially true when there are plenty of job supplies in the market like China.</p>
<p>So eventually we decided to move, for the sake of our long term growth. The place could be good setting up factories but surely not for a software house to which thoughtful labor is the most important asset we considered. It should be a good move, in theory. Yet Yogi Berr&#8217;s quote shows its power to me once again, &#8220;<strong>In theory there&#8217;s no difference between theory and practice. But, in practice, there is</strong>&#8220;. Our new office environment is shocking. God please forgive me this little nervous moron.</p>
<p>The new office is, um, by the road. It is not physically by the road. After all, it is an apartment 18 floors high from the ground. It&#8217;s right next to a busy road crossing. It&#8217;s not air-conditioned that we have to keep the windows and doors open maintain proper ventilation under a 33 degree temperature. We have lots of &#8220;fresh&#8221; air from road, with plenty of noise as bonus. Every minute you can feel clearly how many heavy vehicles has passed through the road below. As every time they do, doors and the floor shake. You can easily measure how hot the outdoor is by counting the frequency the drivers blow their horn. Definitely we are giving the term &#8220;labor intensive industry&#8221; a whole new face, packing 16 people in less than 800 square foot.</p>
<p>If ever this looks like I am making a complaint about the work place, sorry but yes I do, from the point of view of team productivity.</p>
<p>Weeks ago I read articles discussing factors affecting an office&#8217;s productivity. To dig out the key factors, the researchers carried out a game named &#8220;<strong>Coding War Game</strong>&#8220;. The rules are simple. A pair of developers from the same organization is chosen to perform the same piece of work. They work against each other. They do all the work from designing, coding, and testing according to the fixed specification with the same language and computers of identical configuration. When they are done, time and the result of acceptance tests are recorded.</p>
<p>There are tons of figures and findings produced by the game. I&#8217;m not going to list all but a few here:</p>
<ul>
<li><strong>People in a noisy environment are more likely to produce more defects</strong> than those in a quiet environment do.</li>
<li><strong>Language, years of experience, salary</strong> surprisingly has <strong>little effect on productivity</strong>.</li>
<li><strong>Dedicated square foot per person matters</strong>. Well, it&#8217;s just a repeat of the first finding in terms of space. Noise level is always inversely proportional to space.</li>
</ul>
<p>Put it this way. <strong>If some day I have my own kids, I just won&#8217;t let them do their homework in front of a TV</strong>. You might feel yourself like a code warrior on the road. But you end up spending most of your time fighting the defects you produced than critical business problem you are assigned to solve.</p>
<p>May be one of you would tell me that if you concentrate enough on your work, noise or heat does no harm to you. You are even becoming superior to the others cos you have proven your ability to live with a difficult environment. Right, when I was a kid, Mum used to tell me that if you have a peaceful mind you feel cool even under a hot sun. It&#8217;s true but not necessary. You can do it don&#8217;t mean you always have to. It comes at a cost. It consumes your concentration. You can spent the effort to other more valuable things than keeping yourself cool when you don&#8217;t have to. If I were a monk, I might not not care these at all putting myself into deep concentration thinking about life. But forgive me Buddha, I can&#8217;t earn pennies with a peaceful mind. I won&#8217;t like to hire a team of monk for making money either.</p>
<p>I still recalled the statement in book &#8220;Peopleware&#8221; talking about management. It said <strong>the manager&#8217;s function is not to make people work, but to make it possible for people to work.</strong> I agree this from the bottom of my heart. The first and biggest challenge ahead, as I soon realized when I stepped into the new &#8220;office&#8221;, is to build a better office.</p>
<p>I will seriously consider the idea of having a high quality headphone in our developers&#8217; tool kit. At least one for myself <img src='http://s1.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><img src="http://livingash.files.wordpress.com/2007/08/ath_w5000_case.jpg?w=420" alt="a Technica Headphone." /></p>
<p>Every success starts with a dream right? See my dream, visually : )<br />
P.S. Sell your ice-creams by the road, not your code please.</p>
<p><img src="http://livingash.files.wordpress.com/2007/08/panostationleaderoffice.jpg?w=420" alt="panostationleaderoffice.jpg" /></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=8&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/08/01/code-by-the-road/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/08/060731-tokyowakees-11-thumb.jpg" medium="image">
			<media:title type="html">060731-tokyowakees-11-thumb.jpg</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/08/ath_w5000_case.jpg" medium="image">
			<media:title type="html">a Technica Headphone.</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/08/panostationleaderoffice.jpg" medium="image">
			<media:title type="html">panostationleaderoffice.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Read a user story, write a user story</title>
		<link>http://livingash.wordpress.com/2007/07/25/read-a-user-story-write-a-user-story/</link>
		<comments>http://livingash.wordpress.com/2007/07/25/read-a-user-story-write-a-user-story/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 13:18:29 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/07/25/read-a-user-story-write-a-user-story/</guid>
		<description><![CDATA[After the last user story workshop, I start to work on my user story based project plan. All right, 47 cards. &#8220;Should be good and easy to start huh?&#8221; I said to myself. I opened up my word editor then started to read and type the stories written on cards one by one. It&#8217;s not [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=6&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After the last user story workshop, I start to work on my user story based project plan. All right, 47 cards. &#8220;Should be good and easy to start huh?&#8221; I said to myself. I opened up my word editor then started to read and type the stories written on cards one by one.</p>
<p>It&#8217;s not a easy job. Well, at least not as easy as what my XP book has shown me. It took me almost 5 hours to come up with the first processed list of user stories. When I finally sit back with a sign of relief, I begin to think: what&#8217;s standing in my way to get a set of nicely forged user stories?</p>
<blockquote><p><strong>User Stories Duplicates </strong></p>
<p>Duplicates matters. Perhaps it is the way I ran the collection of user stories in my last workshop matters. I was running out of the 2 hour limit I set that I can only managed to tell every body wrote the stories down on their own then I collected them. There was no discussion at all and thus there no chance for me at all to try to remove the duplicates by utilizing the power of group. Some popular stories show themselves on the cards for 3 times or more. Lucky that I have only 47 cards I am still able to remove the duplicates properly. But I surely will goes into trouble of running out of memory if the number grows beyond a hundred.</p></blockquote>
<blockquote><p><strong>Greedy Writing Style </strong></p>
<p>If you are letting people do the writings on their own, you can never avoid people writing their wishes in a greedy way. I see bullets, arrows, slashes every few stories I read. A user writes to me as follows:</p>
<blockquote><p>Implementation consultant<br />
- Input network/system config.<br />
- Edit/View assigned customer profile.<br />
- Can edit/view only when the case is not closed.<br />
- Get/download license.</p></blockquote>
<p>If Santa ever let me write my only Christmas wish on a tiny note card, I will probably write:</p>
<ul>
<li>Wish 1a: A new car.</li>
<li>Wish 1b: Sword of a thousand truth.</li>
<li>Wish 1c: More wishes.</li>
</ul>
<p>The story could has split into 4 smaller and more digestible stories.</p>
<p><strong>Missing important business parts </strong></p>
<p>Our application need to support our partners reselling products and services. But it is never clear that if in the presence of a reseller our application, or even our own company&#8217;s identity, should never be shown to the customers. This definition, however, makes a difference when its comes to serve and support the customer, and to handle the transaction flow between customer and the application. When I came to the stories, I was stuck.</p></blockquote>
<p>Then I come up with some thoughts in mind on how to do it better next time:</p>
<blockquote><p><strong>Let your users discuss</strong></p>
<p>Perhaps the best way to remove duplicates is to have every body check on their own if stories from the others matches those their own ones. People, on general, are good at memorizing their own stuff then those from the others. This should be highly effective during the user story workshop. Bringing in your users into the discussions do many other good as well. You might get insights into area of business you are not familiar with. When you sit down, digest and re-organize your user stories such information surely helps.</p></blockquote>
<blockquote><p><strong>Always write in plain sentences</strong></p>
<p>Writes in simple and plain sentences. No bullet point. No numbering. No slash. No arrows. No matter it is you or your user is writing, follow the strict rule. If you running into trouble of needing a big paragraph to describe your story, you should break it. If you are running into trouble that you must need some bullet points to describe your story, break it.</p></blockquote>
<p>Last but not least, gathering the stories from your user is more or less just a start of the process. To understand more about the stories, it is worthwhile for you to try to rewrite them in your own words whenever you can afford the time.</p>
<p>Read a user story, write a user story. If something makes a different, it&#8217;s probably the truth behind the scene.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=6&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/07/25/read-a-user-story-write-a-user-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>
	</item>
		<item>
		<title>Story begins&#8230;</title>
		<link>http://livingash.wordpress.com/2007/07/25/story-begins/</link>
		<comments>http://livingash.wordpress.com/2007/07/25/story-begins/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 06:57:38 +0000</pubDate>
		<dc:creator>Livingash</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://livingash.wordpress.com/2007/07/25/story-begins/</guid>
		<description><![CDATA[For long I&#8217;ve been interested in how a software projects, a business one, goes from its start to the end. There are plenty of books talking about methodologies but no one ever showed me the complete history of development of a real business software. May be it&#8217;s too boring at all. Or the folks writing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=3&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://livingash.wordpress.com/2007/07/25/story-begins/5/" rel="attachment wp-att-5" title="23072007182_blog.jpg"><img src="http://livingash.files.wordpress.com/2007/07/23072007182_blog.jpg?w=420" alt="23072007182_blog.jpg" /></a></p>
<p>For long I&#8217;ve been interested in how a software projects, a business one, goes from its start to the end. There are plenty of books talking about methodologies but no one ever showed me the complete history of development of a real business software. May be it&#8217;s too boring at all. Or the folks writing those lengthy books have never put the theories into practice. Not sure if this is a good news to my company, I&#8217;ve got a chance to drive the development of a new application almost on my own behalf running with a entirely new team in China. I decided that the project contains no top business secret that my boss wouldn&#8217;t mind me writing down the story. After all, may be I can earn myself some penny by publishing the story to folks like me ever wondered about how a piece of successful software is given birth. So I start blogging about it.</p>
<p>The project is launched to build an application facilitating our customer relationship management process, with weighted focus on long term relationship management that happen after users have purchased our products/services. After a few weeks of study I decided to go XP for this project. The project is new, with lots of area not very well defined nor explored. Our development buddies, on the other hand, new on technology and product design. It could be best to take an iterative approach like XP to handle all these varying factors with a fizzy yet controllable manner. To be honest I was not having a very pleasant experience with my last XP project. Yet those big up-front methodologies make me more sick. Cockburn, the proposer of crystal clear methodology, said you should always review your process and shape it iteratively to make it work better especially your process is not giving what it&#8217;s supposed to give. Okay, I am sold. I don&#8217;t want to give up lessons learn from my last XP trial either. So I give it a second chance.</p>
<p>Projects always start with requirement gathering, no matter what methodology has been chosen to layout the project. I decided to talk to our users in terms of &#8220;User Story&#8221;. User story is plain, goal oriented and can be understand by everyone. It&#8217;s more valuable to know the goals that the buttons they want to have on their screen, or the number of fields they would like to have for describing a shipping address.</p>
<p>Today, 23th July 07, we have hold our first user story workshop, one of the best option to gather large number of user stories in a very short time. A few of the user representative from different teams and departments are invited. Our folks are busy. So I set the time limit to 2 hours. As the idea of working with user stories is still new to our folks, I spent around 10 minutes briefing them what&#8217;s user story and a user story workshop is about. We started with listing out roles. Then with the roles identified in mind we brainstormed the user stories the roles could have, writing each on a little note card.</p>
<p>Users were confused a bit at first what roles are to be identified. Say, role A wants to see something about B. Should B considered as a role as well? My answer is, no. Cos the application serves B in no way at all. The story should be written under the name of role A in fact. All right, then confusions gone and the list began to storm. They surprised me in numerous way I think the users want the application to be. Actually before I run the workshop I have made myself a list of roles and user stories given my understanding on the application&#8217;s problem domain. I can hardly think of variations of customer role but our users managed to give 10 customer roles just in minutes, though after a dicussion we managed to reduce the duplicates making the number down to 4. The user stores gathered thereafter surprised me as well in their variety. Most XP books would suggest you to get to your users. Sometimes if you are not able to get real users you have no choice but to get input from user proxy instead. Typical user proxy includes user&#8217;s manager, domain experts, development manager, marketing group, salespersons and former users. Yet these proxies, though all with their expertise related to the application&#8217;s usage, does give stories with bias. The bias could be so great that if you are unaware of it you could drap your application towards a very wrong direction. When I compared my own list with that gathered, I feel I&#8217;m lucky to have access to real users.</p>
<p>At the end of the day, I got a dozen of roles and user stories to start my next phase of work, to digest user stories and organize them into our upcoming project plan. No computer processing, only papers and hands. We done it all quickly with a whiteboard, a stack of note cards and pens. Things looks good. Our folks were enjoying it, at least it appeared to me as so when they were writing the stories with laugher on their faces. We have a clearer view on the goals and scope of the project. We have the atomsphere of conversation between development force and user force. And we are on the track.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/livingash.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/livingash.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/livingash.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/livingash.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/livingash.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/livingash.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/livingash.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/livingash.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/livingash.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/livingash.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=livingash.wordpress.com&amp;blog=1414029&amp;post=3&amp;subd=livingash&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://livingash.wordpress.com/2007/07/25/story-begins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1fb708e9cfaf13bbbc9afee458a4961c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Livingash</media:title>
		</media:content>

		<media:content url="http://livingash.files.wordpress.com/2007/07/23072007182_blog.jpg" medium="image">
			<media:title type="html">23072007182_blog.jpg</media:title>
		</media:content>
	</item>
	</channel>
</rss>
