<?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>No Technique</title>
	<atom:link href="http://notechnique.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://notechnique.wordpress.com</link>
	<description>Teacher: What is the highest technique you hope to achieve?  Lee: To have no technique.</description>
	<lastBuildDate>Fri, 26 Feb 2010 20:46:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='notechnique.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>No Technique</title>
		<link>http://notechnique.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://notechnique.wordpress.com/osd.xml" title="No Technique" />
	<atom:link rel='hub' href='http://notechnique.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Git &#8211; check your config</title>
		<link>http://notechnique.wordpress.com/2010/02/26/git-check-your-config/</link>
		<comments>http://notechnique.wordpress.com/2010/02/26/git-check-your-config/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 20:46:04 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://notechnique.wordpress.com/?p=119</guid>
		<description><![CDATA[If you are working with various projects; say work project and a sideline fun project or a open-source project for that matter. It&#8217;s important that you get author name or author email id right when you commit. You don&#8217;t want your marty@localhost or xxx1337.AT.yahoo.COM to be showing in as author id in the corporate repository. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=119&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you are working with various projects; say work project and a sideline fun project or a open-source project for that matter. It&#8217;s important that you get author name or author email id right when you commit.</p>
<p> You don&#8217;t want your marty@localhost  or xxx1337.AT.yahoo.COM to be showing in as author id in the corporate repository. Some opensource projects reject the commits if it is not from the registered email id.</p>
<p>You normally would have updated the git global config to a username/email id and forgot about it. So the tips is that</p>
<p>1) Set the global config to a name/id to the primary purpose you use that machine to, like home machine set to your personal id. office machine set to your office id.<br />
<code><br />
git config --global user.name "My name is..."<br />
git config --global user.email my_email@domain.com<br />
</code></p>
<p>2) Use git local config on sensitive projects to override global config settings. The easiest way to override to config is to run<br />
<code>git config user.name "My name for this project is..."</code> on your local project folder.</p>
<p>You can edit the whole config file in vi/command line editor easily by using the command<br />
<code>git config --global -e<br />
git config -e  (to edit local config)<br />
</code></p>
<p>Finally use <code> git config -l </code> on the project folder to see merged config information that will be used when you commit.</p>
<p>N.B.<br />
Install bash completion for git if you are not using it already.</p>
<p>http://justamemo.com/2009/02/09/bash-completion-along-with-svn-and-git-tab-completion/</p>
<br />Filed under: <a href='http://notechnique.wordpress.com/category/general/'>General</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/119/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=119&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2010/02/26/git-check-your-config/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>It&#8217;s time to git</title>
		<link>http://notechnique.wordpress.com/2009/12/25/time-to-git/</link>
		<comments>http://notechnique.wordpress.com/2009/12/25/time-to-git/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 17:50:06 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[distributed source control]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git advantages]]></category>
		<category><![CDATA[git dilemma]]></category>
		<category><![CDATA[git tools]]></category>
		<category><![CDATA[use case]]></category>
		<category><![CDATA[why git]]></category>

		<guid isPermaLink="false">http://notechnique.wordpress.com/?p=109</guid>
		<description><![CDATA[Every now and then a new technology comes, but few gather momentum and finally get adapted by masses. Git is certainly on the right track. GitHub certainly fueled the adaptation of git to masses. Git is mainly effective/faster when used at command line. There are efforts in building UI around it like Eclipse plugin, but they [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=109&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Every now and then a new technology comes, but few gather momentum and finally get adapted by masses. Git is certainly on the right track. GitHub certainly fueled the adaptation of git to masses.</p>
<p>Git is mainly effective/faster when used at command line. There are efforts in building UI around it like Eclipse plugin, but they aren&#8217;t completely done. I am more comfortable at terminal, so haven&#8217;t checked the UI progress lately.</p>
<p>With agile practices like pair programming, combined with distributed development &#8211; people want a distributed source control system that is snappier and comes with tools.</p>
<p>Couple of interesting things I liked from git are:</p>
<p><strong>Git-Daemon</strong>: git-daemon utility bundled with the git release is a quick way to share your code across the network. Say you are at a barcamp or a cofee talk meet with a friend. he can share his local git repository over the network just by running</p>
<p><code>git-daemon --base-path=parent_path_to_the_repo</code></p>
<p>And you could clone his repository to your local by</p>
<p><code>git clone git://server-location/repo</code></p>
<p><strong>Git-SVN</strong>: Those who are using SVN as production repository for your source code could still use git locally. git-svn helps you to sync the current workspace code into SVN directly. This is another reason for people to start using git locally, to get all the benefits of it; and still check into SVN as corporate needs you to.</p>
<p><strong>Git-Stash</strong>: Git stash could be said as a coding context, say you have modified couple of files to fix bug 121 &#8211; you could create a context that store the files that were changed. Then it reverts the code to the HEAD (clean) state, so you could attack bug 75 and commit it before merging back the code for bug 121.  These contexts are easy to create and so convenient in labeling them correctly.</p>
<p><strong>The Dilemma</strong>:</p>
<p>For those still saying &#8211; &#8216;yeah, git is cool. but with the whole distributed thing &#8211; isn&#8217;t there a chance that I loose control of the code my developers do for me? How do I track them?&#8217;</p>
<p>Checking the code into the repository often is a practice of discipline, it could happen with use of any repository. With git you could ask your new developer to share his local git repository so you could give an overview, rather waiting until he gets access to the central repository &amp; checks in his crap. In fact git gives the ability to pull code/feedback earlier, than until something gets checked in.</p>
<p>Getting developer access to central repository is a longer process normally in any corporate, instead of waiting for that time the developer can start coding, and as a lead you could keep track on progress.</p>
<p>Those who are looking for patterns to control the repository effectively look at this presentation: <a href="http://www.slideshare.net/err/git-machine">http://www.slideshare.net/err/git-machine</a> starting from slide no.72 the author have pointed out several patterns (Anarchy, Blessed, Lieutenant, &amp; Centralized) to manage the repository.</p>
<p>With all said, its time everyone should consider a distributed source control system &#8211; because it enables developers, and with a pattern you chose to control your repository its a win-win.</p>
<p>More Links:</p>
<li>How Git Index/Staging Area simplifies commit &#8211; <a href="http://plasmasturm.org/log/gitidxpraise">http://plasmasturm.org/log/gitidxpraise/</a></li>
<li>A Git Branching Model &#8211; <a href="http://nvie.com/archives/323">http://nvie.com/archives/323</a></li>
<br />Posted in General, Software Development, Uncategorized Tagged: distributed source control, git, git advantages, git dilemma, git tools, use case, why git <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=109&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2009/12/25/time-to-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>Serialization/Streaming Protocols: What we got?</title>
		<link>http://notechnique.wordpress.com/2009/11/06/serializationstreaming-protocols-what-we-got/</link>
		<comments>http://notechnique.wordpress.com/2009/11/06/serializationstreaming-protocols-what-we-got/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 17:40:55 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[BERT]]></category>
		<category><![CDATA[BERT-RPC]]></category>
		<category><![CDATA[Hessian]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Protocol Buffers]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[Serialization]]></category>
		<category><![CDATA[Thrift]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://notechnique.wordpress.com/?p=96</guid>
		<description><![CDATA[It&#8217;s takes a huge effort to build a friendly API, and build a community around it. But once you have a popular service API, the next thing is the handling the traffic. It doesn&#8217;t have to be external API, it can be a your web front-end posting requests to the backend service layer. As the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=96&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s takes a huge effort to build a friendly API, and build a community around it. But once you have a popular service API, the next thing is the handling the traffic. It doesn&#8217;t have to be external API, it can be a your web front-end posting requests to the backend service layer.</p>
<p>As the user base explodes, a bit saved is bandwidth and money saved. This applies to mobile clients as well. With things hosted in clouds these days, it does matter how much bandwidth you use and how less resources you consume.</p>
<p>Two things magnifies the problem:</p>
<p>1) User Base &#8211; if the user base is really large then even transferring 1MB per user over wire is going to hit the wall. Imagine 1 million users trying to access your webpage.</p>
<p>2) Amount of data transfer &#8211; if you are transferring huge amount of data, say your website is cloud based storage system or online cloud database, then again it&#8217;s going to hit the wall in performance soon again.</p>
<p>So to move you objects from server to client, you need to see several serialization options. I will start with some standard ones, and list some recents ones that sounds interesting.</p>
<p><a href="http://www.w3.org/XML/" target="_blank">XML</a>:</p>
<p>Human readable, and machine parse-able at the same time. But probably the most verbose serialization option we have. Also the human readable advantage goes down very quickly as the size of the XML file goes up.</p>
<p><a href="http://json.org/" target="_blank">JSON</a>:</p>
<p>JSON (pronounced as Jason), stands for JavaScript Object Notation. Its pretty popular with AJAX, and JavaScript based web libraries. It keeps the data compact, and saves us from verbosity of XML. JSON format supports only text data, and does&#8217;nt have native support for binary data.</p>
<p><a href="http://hessian.caucho.com/doc/" target="_blank">Hessian</a>:</p>
<p>Hessian is been there for a while, and it is quite popular with J2ME world because of the small required dependencies, and efficient binary protocol. Starting from Hessian 1.0 Spec, it has now come to Hessian 2.0. Hessian 2.0 spec seems to be quite comparable with any of the new age/recent protocols that were released.</p>
<p><a href="http://code.google.com/apis/protocolbuffers/docs/overview.html" target="_blank">Protocol Buffers</a>:</p>
<p>Coming from google, we can definitely assume it should have great scalability &amp; performance. It supports both text and binary format. All your text representation will be converted to a binary format before sending it across the wire. You have to first create  a interface file (.proto) describing the fields, and compile them to Java/Any supported language classes. Then you can serialize/deserialize from binary format to Objects in your language. The main drawback is for you to specify the interface and compile them to objects, but having things statically compiled will give you some performance advantages. It does support binary data as well in the message structure.</p>
<p><a href="http://incubator.apache.org/thrift/" target="_blank">Apache Thrift</a>:</p>
<p>Thrift is originally created and used within FaceBook team, and later released as Apache OpenSource project. It pretty much similar to google with define-compile-use cycle. You need to define the message structure using .thrift file, and compile them using thrift compiler, and use them in you services/clients. Apache Thrift has poor documentation when compared to other protocols.</p>
<p><a href="http://hadoop.apache.org/avro/docs/current/" target="_blank">Apache Avro</a>:</p>
<p>This is one of sub-projects of <a href="http://hadoop.apache.org/" target="_blank">Apache Hadoop</a>, a &#8216;Google Map-Reduce&#8217; inspired framework for Java. This project is contributed heavily by Yahoo! and they said to use it extensively for their infrastructure. Avro&#8217;s design goal is as well to support Dynamic Typing; that is be able to exchange information without the compile-use cycle. The schema of the data structure is defined in JSON format, and its exchanged on the initial interaction; and the rest of the transfers client uses the schema to read the data.</p>
<p><a href="http://bert-rpc.org/" target="_blank">BERT &amp; BERT-RPC</a>:</p>
<p>BERT stands for Binary ERlang Term. It is based on the Erlang&#8217;s binary serialization format. The author of this format is founder of the GitHub. The git-hub team posted a article on how they improved the performance of their site using this new protocol. Their main reason for not using Protocol Buffers &amp; Thrift is that you have to go through mundane define-compile-use cycle. Instead they created this protocol which supports dynamic data format definition, so the actual data itself will contain meta-information about the data structure (the client can read them on the go). GitHub being a huge repository of open source projects, and people forking out branches, checking in/checking out huge code bases we can assume the traffic they could be handling; BERT should have been really comparable in-order to be a better alternative compared to Protocol Buffers &amp; Thrift.</p>
<p>Lets see what improvements, and comparison reports could future bring about these protocols.</p>
<p>Links:</p>
<p>Click on the protocol name on the above article to go to relevant page. And some more links below.</p>
<p><a href="http://hessian.caucho.com/doc/hessian-serialization.html#anchor2">http://hessian.caucho.com/doc/hessian-serialization.html#anchor2</a></p>
<p><a href="http://github.com/blog/531-introducing-bert-and-bert-rpc">http://github.com/blog/531-introducing-bert-and-bert-rpc</a></p>
<br />Posted in Software Development Tagged: BERT, BERT-RPC, Hessian, JSON, Protocol Buffers, RPC, Serialization, Thrift, XML <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=96&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2009/11/06/serializationstreaming-protocols-what-we-got/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>using Spring Web Flow 2</title>
		<link>http://notechnique.wordpress.com/2008/07/09/using-spring-web-flow-2/</link>
		<comments>http://notechnique.wordpress.com/2008/07/09/using-spring-web-flow-2/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 03:44:09 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[continuations]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring web flow 2]]></category>
		<category><![CDATA[web flow]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/?p=82</guid>
		<description><![CDATA[I have got opportunity to work with Spring WebFlow 2 recently in a project, here I share my personal views on that with you. Let me first tell you all nice things about recent spring stack (spring 2.5 and above). Two things which  improved a lot with recent release are: annotation support, specific namespaces. Annotations [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=82&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have got opportunity to work with Spring WebFlow 2 recently in a project, here I share my personal views on that with you.</p>
<p>Let me first tell you all nice things about recent spring stack (spring 2.5 and above). Two things which  improved a lot with recent release are: annotation support, specific namespaces.</p>
<p>Annotations lets you spend your time more on writing code than to wiring components through xml. Off-course spring fails fast if you have messed up a configuration, but still annotations are lot better to avoid that in first place. With improved @Repository, @Service and @Component it&#8217;s easy to configure beans with required specific responsibilities by default.</p>
<p>Namespace improvements, help to keep the xml configuration minimal and typo-error free. Schema definitions helps to validate you configuration as you type, and also with convention over configuration approach they have reduced the lines of XML we need to wire up objects. If you want to replace a component with your custom implementation, sometimes its easy by using auto-wire option; sometime you have to configure them by the old way (i.e. using beans namespace and manually declaring most of the configuration) which is more painful after you getting used to the new way.</p>
<p>With <a title="Spring Test" href="http://static.springframework.org/spring/docs/2.5.x/reference/testing.html#testcontext-ctx-management" target="_blank">SpringTest</a> framework it&#8217;s fairly easy to write integration test cases. With simple annotation spring will automatically loads the application context on the test start up. Also with @Timed you could even clock your test method, and make it fail if it exceeds specified time. And it also supports Transactional test with automatic rollback on default, so if you could write tests which doesn&#8217;t dirties up the database.</p>
<p>Let&#8217;s come back to the original topic Spring web flow. Spring webflow works as advertised for, i.e. they are for application which has a natural flow behind in business, and UI acts as a way to capture input for the flow and to display something back. Not for an application that has a different requirement than stated above.</p>
<p>Everything is a flow, each flow has a starting point and a end point, and could have any number of transitions in between. As a part of transition you could go to a sub-flow and come back to the original flow later, but these transitions could only happen at the pre-defined places on the flow. It will be tough to implement a free-flow (random browse) kind of applications with it.</p>
<p>It serializes all the information you add to the flow context and restores them as you resume a flow after UI interaction, so every object like entities, repositories, and whatever should implement Serializable. This restricts what you could share in the flow context.</p>
<p>Most of the decision for transition could be easily handled in the flow definition, this avoids creating Action classes which returns just the outcome.</p>
<p>in JSF UI:</p>
<blockquote><p>&lt;h:commandButton action=&#8221;save&#8221; /&gt;</p>
</blockquote>
<p>in Flow definition:</p>
<blockquote><p>&lt;view-state &#8230;</p>
<p> &lt;transition on=&#8221;save&#8221; &gt;</p>
<p>    &lt;expression =&#8221;validator.validate(model)&#8221; /&gt;</p>
<p>&lt;/transition&gt;</p>
</blockquote>
<p>As you could see, you don&#8217;t need to have the Action class which returns outcome &#8216;save&#8217;, you could direct specify a transition on the command button. Ok, now you could ask what if the save has to be returned only on certain condition (say after only validation passes on the entity). For that you could have a expression executed on the transition, the transition will execute only if the validator returns true, if the validator returns false it will come back to the same view. The expression will accept any EL method expression, need not be just a validator. So you could run any action before the transition. As you could see the method executions in the action class are moved to the flow definition. This will look elegant only if the number of calls made at transition is small, or your application is well thought and designed to share less number of information in state, and keeping the method calls down. (Basically this is a nice feature , but would go awry for huge apps, and for apps which there is no certain business flow behind it)</p>
<p>Spring web flow also supports inheritance of flows, so you could inherit common transition rules from a parent flow. Which is a nice feature to keep the definition DRY as far as possible.</p>
<p>What makes flow definition looks ugly? Whenever there are more no. of mere actions which is called in the transitions to set a variable, to retrieve a variable from flowScope and setting back to the viewScope or so. One thing I had to do multiple times in flow definitions are to transform a List to dataModel for the UI, so I could use listName.selectedRow to identify item selected by the user.</p>
<p>Adding this kind of non-business related method executions and transformations, etc ., to the flow definitions makes it bulky, and also alienates the flow from resembling the business definitions. This defeats the very own cause of having a flow definition.</p>
<p>WebFlow provides convenient default variables like resourceBundle, currentUser, messageContext available in the flow context, which you could refer directly in the flow definition or pass it as arguments to bean action methods, or call actions on them.</p>
<p>When a root flow ends, all the information will be discarded. This is nice for cleaning unwanted data in the  memory but that also means that you cannot share anything with the user after the flow is ended. Suppose I would like to say that the user have successfully placed an order at the end of the flow, I could not do that! You could ask that why not keep the confirmation as part of the flow, well it depends on what time you are committing the changes to the db, or how you are sharing a persistent context, or even like its just a end message, there should not be interaction after that from the view to end the flow.</p>
<p>It&#8217;s like redirecting to the home page after successfully placing the order and showing a banner &#8220;Thank you for shopping with us!&#8221;, which is not just possible.</p>
<p>One last point is that with UrlMapper definition in the configuration you could make a simple url as a starting point of the flow, but otherwise generally can&#8217;t use a RESTFUL GET url to reach a page on the flow.</p>
<p>What&#8217;s your experience with Spring Web Flow?</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/82/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/82/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=82&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/07/09/using-spring-web-flow-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>Quick Groovy Scripting</title>
		<link>http://notechnique.wordpress.com/2008/06/09/quick-groovy-scripting/</link>
		<comments>http://notechnique.wordpress.com/2008/06/09/quick-groovy-scripting/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 00:51:34 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[quick]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/?p=80</guid>
		<description><![CDATA[Recently I have to port some data from mainframe database to SQL based db for testing purposes. I have started with some text report files generated from mainframe. I have fond of using unix awk, grep for these kind of data munging. Also used perl and ruby for some scripting activities in the past. But [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=80&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I have to port some data from mainframe database to SQL based db for testing purposes. I have started with some text report files generated from mainframe. I have fond of using unix awk, grep for these kind of <a href="http://www.manning.com/cross/">data munging</a>. Also used perl and ruby for some scripting activities in the past. But given that I had to do this on windows and also with fading knowledge of perl, thought of getting in donw with groovy. Since eclipse also supports groovy it became easy to start with.</p>
<p>I got something running which spits SQL statements (using println) for every line of the input. Sooner my eclipse console started eating the output because of the buffer size for console display I had in my settings! Though I had the huge monolithic script which works fine, I cannot able to get the output in single shot. I had to rerun them in parts to get the final collective output. This slowed me on tweaking the final script. Given we didn&#8217;t have much re-factoring support in eclipse, I couldn&#8217;t either easily extract them as functions as I could in Java. But I am able to use a more powerful tool i.e. define a closure immediately and redirect the inputs to the println statements to a File without much changes to the original script.</p>
<blockquote><p>println &#8220;insert into table_name (col1, col2, col3) into values (${col1},&#8217;${col2}&#8217;, ${col3})&#8221;</p>
<p>def file = new File( &#8220;C:\output.txt&#8221;)</p>
<p>def println = { line -&gt;  file.append(line)}</p></blockquote>
<p>Just adding these two line saved me a lot of time, also now I can switch back to see the output in command line or to capture them in a file very easily.</p>
<p>Other things that helped me to get things done quickly are the ability to refer the variables inside the string directly as &#8221; &#8216;${col2}&#8217;&#8221;. This is especially useful where I have to qualify the column of string data type with quotes, otherwise for which I have to use endless escaping and + con-catenations!</p>
<p>Also for the next script I did, I started writing in small classes than single file, so made things easier to change at last minute.  Another gotcha for beginner for the groovy script is the use of &#8216;==&#8217;. Remember in groovy use of &#8216;==&#8217; is actually converted to this.equals(that) before the execution. I ran into endless self-recursive calls as I used the == for reference comparison as we do in Java.</p>
<p>As I got the script completed there were lot of duplicate SQL statements in the output. As we get errors due to integrity constraints in database, I have to find some way to remove duplicate statements. In unix, I normally use `uniq` to get this done. Since I have to get that done quickly, i just looped thru the output file and added each line to the Set and dumped it back out to remove the duplicates.</p>
<p>Being used Perl, and Ruby in the past I know the libraries support in perl or ruby are far huge when compared to groovy. But the single fact that I have used to Java in past years and have to work with windows, Groovy was a life saver!</p>
<p>N.B. No data conversion is possible without effective use of Regular Expressions. I did used regular expressions to format the input files before running groovy scripts against them. I used <a title="TextPad" href="http://www.textpad.com/" target="_blank">Textpad</a> to do  find/replace with regular expressions. The regular expression support in eclipse editor find/replace tool still needs improvements before could it could be really useful.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/80/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/80/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=80&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/06/09/quick-groovy-scripting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title># tricks in url</title>
		<link>http://notechnique.wordpress.com/2008/03/20/hash-tricks-in-url/</link>
		<comments>http://notechnique.wordpress.com/2008/03/20/hash-tricks-in-url/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 12:56:52 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[#]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[iui]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pound]]></category>
		<category><![CDATA[sign]]></category>
		<category><![CDATA[trick]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/?p=77</guid>
		<description><![CDATA[We all may know that # symbol in html is especially used with anchors. They mark the particular anchor within the single html page. For example in the seam doc reference (single html page) http://docs.jboss.com/seam/2.1.0.A1/reference/en/html_single/#d0e336 in the url the #d0e336 marks the section &#8216;Understanding the code&#8217; within the whole html page. If you do a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=77&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We all may know that # symbol in html is especially used with anchors. They mark the particular anchor within the single html page.</p>
<blockquote><p>For example in the seam doc reference (single html page) http://docs.jboss.com/seam/2.1.0.A1/reference/en/html_single/#d0e336</p></blockquote>
<p>in the url the #d0e336 marks the section &#8216;Understanding the code&#8217; within the whole html page. If you do a view source you could see that section of the page is marked with anchor href to #d0e336</p>
<p>URI combined with this #mark points to the particular section of the page, this helps people to bookmark page, and return exactly there when they come back.</p>
<p>Lets get into some more interesting stuff with the # sign. Whenever you request a page with #mark in the end; the browser sends GET request only with url up to the #mark. The part that comes after the # sign is never sent to server.</p>
<blockquote><p>If you request for http://mypage.com/page#profile, the browser sends the request as &#8216;http://mypage.com/page&#8217; ripping off the # sign and the text after that. Once the browser loads the page, it tries to locate the anchor with matching href &#8216;#profile&#8217; () and positions the page. If the browser cannot find the specified anchor href it just ignores it and shows the page as it is.</p></blockquote>
<p>Given that the text after the #mark concerns only for the client and also that browser ignores it for taking any action if the particular anchor is missing in the markup. There are some potential uses for the # sign.</p>
<ul>
<li>fancy url</li>
<li> could be potentially used to maintain client-side state!</li>
<li> generate unique bookmark-able url</li>
</ul>
<p><strong>fancy url:</strong></p>
<blockquote><p>http://mail.google.com/mail/#inbox</p>
<p>http://mail.google.com/mail/#sent</p></blockquote>
<p>As you see the server url is just http://mail.google.com/mail/, but the browser displaying #inbox denotes that you are in inbox view.</p>
<p><strong>maintain client-state:</strong></p>
<p>Say there are 2 tabs in a page, the user wants to bookmark the page along with the current tab that he is working with. Thereby whenever he loads the page with the saved bookmark; the page should be loaded with the same tab highlighted of the group.</p>
<p>You could add an identifier with the # sign on the url, and use client side javascript to parse the location and pick the identifier to determine which tab should be highlighted.</p>
<p>Some javascript libraries use this as trick to generate part of the page in the browser. The iUI library which generates iphone style webpages actually uses the same trick. It maintains client state by this identifier, and uses javascript to re-render part of the page in iphone style mock up.</p>
<p>http://m.linkedin.com/#_home</p>
<p><strong>unique bookmark-able url:</strong></p>
<p>Say you use greasemonkey to customize a webpage. And you set up that custom script to run for a particular url/site. Now you want to test a new script with the same url, you could add some identifier along the pound sign to create a unique url. Map the script to be triggered for this new unique url, so the same site will be handled by different greasemonkey scripts based on the url you load.</p>
<p><strong>reference:</strong></p>
<p>http://gbiv.com/protocols/uri/rfc/rfc3986.html#fragment</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/77/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/77/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/77/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=77&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/03/20/hash-tricks-in-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>Understanding JBoss Seam</title>
		<link>http://notechnique.wordpress.com/2008/02/14/understanding-jboss-seam/</link>
		<comments>http://notechnique.wordpress.com/2008/02/14/understanding-jboss-seam/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 02:32:03 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[best-book]]></category>
		<category><![CDATA[conversations]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[learn]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[timeout]]></category>
		<category><![CDATA[understand]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/?p=74</guid>
		<description><![CDATA[  We are currently working in a project using JBoss Seam extensively. The interesting and key feature of JBoss Seam is conversations. Conversation combined with bi-jection feature of Seam, just makes state management in web applications slicker and clean.   On the first look you may think that seam just provides one more scope (like REQUEST, SESSION, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=74&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p> </p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;">We are currently working in a project using JBoss Seam extensively. The interesting and key feature of JBoss Seam is <a title="JBoss Seam Conversations" href="http://labs.jboss.com/jbossseam/faq/#state">conversations</a>. Conversation combined with bi-jection feature of Seam, just makes state management in web applications slicker and clean.</p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> </p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;">On the first look you may think that seam just provides one more scope (like REQUEST, SESSION, etc) for state management. But it provides a lot more. If you really want to see how conversations can fix some common issues with web applications (like. back buttoning) I would highly recommend this <a title="Seam Blog" href="http://solutionsfit.com/blog/">blog</a> of Jacob Orshalick.</p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> </p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;">Jacob is also co-authoring the second edition of JBoss Seam: Simplicity and Power Beyond JavaEE with <a title="Michael Yuan" href="http://www.michaelyuan.com/blog/">Michael Yuan</a>. The second edition of their book will be released out this year.</p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> </p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> Recently preview of some of the chapters of this upcoming book is <a title="Seam 2e Preview" href="http://solutionsfit.com/blog/2008/02/13/jboss-seam-2e-preview-chapters-released/">released</a>. Even if you are already using Seam in your projects, definitely you will find this book more insightful.</p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> </p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"><strong><em>So better understand your conversations, before you are timed-out!</em></strong></p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> </p>
<p style="line-height:18px;font:normal normal normal 13px/normal Verdana;margin:0;"> </p>
<p> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/74/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/74/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=74&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/02/14/understanding-jboss-seam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>segregating environment variables</title>
		<link>http://notechnique.wordpress.com/2008/01/29/segregating-environment-variables/</link>
		<comments>http://notechnique.wordpress.com/2008/01/29/segregating-environment-variables/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 03:43:04 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[batch]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[development environment]]></category>
		<category><![CDATA[java_home]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[variables]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/?p=73</guid>
		<description><![CDATA[Whenever you work with different version of a product at a single time, you run into overriding environment variables. lets take Java SDK as example, you may have the JAVA_HOME pointed to JDK1.5 for the project you work on production deployment. At the same time you may also need to have JAVA_HOME pointed to JDK6 for your [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=73&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Whenever you work with different version of a product at a single time, you run into overriding environment variables.</p>
<p>lets take Java SDK as example, you may have the JAVA_HOME pointed to JDK1.5 for the project you work on production deployment. At the same time you may also need to have JAVA_HOME pointed to JDK6 for your fun projects.</p>
<p>In windows you could have a batch command file that sets the correct environment variable. You could execute the batch file every time before you run any scripts that refer the JAVA_HOME variable. This is nice.</p>
<p>To add to it, you can put those .bat file in system path (i.e. c:\windows\system32) so you call that bat file from any directory.</p>
<p>However when you click this bat file, it executes the batch commands in it and exits. The scope of those new variables set is also exactly till it exits. This isn&#8217;t of much use since you can&#8217;t start working on the environment with the desired settings on the click of mouse.</p>
<p>To accomplish that trick just Right Click and create a shortcut in desktop and add following lines in the target location of the shortcut.</p>
<blockquote class="webkit-indent-blockquote"><p>c:/windows/system32/cmd.exe /k c:/setenv.bat</p></blockquote>
<p>in this the &#8216;/k&#8217; argument to the command line application tells it to execute the script and wait for further commands.</p>
<p>So by this you can click the shortcut to get a console opened and ready to accept commands.</p>
<p>You could also change buffer settings and screen settings for the console, so you get desired command console as you want.</p>
<p>N.B. even though windows shell is not that useful you can make it so if you add something like this.<br />
<a href="http://countme.wordpress.com/2005/11/29/searching-for-unix-utilities-in-windows/" title="unix utilities">UNIX Utilities </a></p>
<p>but still UNIX rocks!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/73/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/73/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=73&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/01/29/segregating-environment-variables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>listening on 0.0.0.0</title>
		<link>http://notechnique.wordpress.com/2008/01/20/listening-on-0000/</link>
		<comments>http://notechnique.wordpress.com/2008/01/20/listening-on-0000/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 18:21:16 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[0.0.0.0]]></category>
		<category><![CDATA[address]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[tcp]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/2008/01/20/listening-on-0000/</guid>
		<description><![CDATA[After you start your Tomacat/Apache HTTPD Server: just go to the command line and use netstat -an command to check the network statistics. You might have noticed foobar:~ nrs$ netstat -an &#124; grep LISTEN tcp46 0 0 *.8080 *.* LISTEN tcp4 0 0 192.168.2.101.3873 *.* LISTEN that the listening port is listed as either *.8080 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=71&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After you start your Tomacat/Apache HTTPD Server:</p>
<p>just go to the command line and use <b><i>netstat -an</i></b> command to check the network statistics. You might have noticed</p>
<blockquote><p>foobar:~ nrs$ netstat -an | grep LISTEN<br />
tcp46      0      0  *.8080                 *.*                    LISTEN<br />
tcp4       0      0  192.168.2.101.3873     *.*                    LISTEN</p></blockquote>
<p>that the listening port is listed as either *.8080 or 0.0.0.0:8080.</p>
<p>Basically this means that your server is listening for connection from all the network interfaces in your machine. i.e. if you have Wi-Fi, ethernet or couple of other VirtualMachine ethernet port configured. Then you can reach the server using any of those interfaces (IP address).</p>
<p>You could reach the server using 127.0.0.1 (local host), and any IP address of one of the network interfaces you have. So even when you write socket programming code, use the server host address as 0.0.0.0 if you want that your server to be reachable through all the interfaces.</p>
<p>You could also use the same feature to gain precise control of how your application can be reached. When you start the server in production or other critical environments it just be better that the server listens only in single IP address that is the expected interface for reaching the service.</p>
<p>In JBoss application server you can control this attribute either in the configuration file, or through system property jboss.bind.address. This property can also have multiple values separated by comma (i.e. jboss.bind.address=127.0.0.0,232.213.232.12). This helps to control precisely through which interface your service were accessible.</p>
<blockquote><p>C:\jboss-home\bin&gt;.\run.bat -Djboss.bind.address=0.0.0.0 -c default</p></blockquote>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/71/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/71/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=71&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/01/20/listening-on-0000/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous testing w/Ant</title>
		<link>http://notechnique.wordpress.com/2008/01/13/continuous-testing-want/</link>
		<comments>http://notechnique.wordpress.com/2008/01/13/continuous-testing-want/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 23:42:18 +0000</pubDate>
		<dc:creator>Srinivasan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[continuous testing]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[practices]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[unit-testing]]></category>

		<guid isPermaLink="false">http://countme.wordpress.com/2008/01/13/continuous-testing-want/</guid>
		<description><![CDATA[UPDATED &#8211; It Works As we write code, a continuous feedback will help us know how we are progressing. And what code are we breaking as we add functionality. A way to run unit tests, as we code and save java files will be great! I know there was a plugin for Eclipse, Continuous Testing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=68&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>UPDATED &#8211; It Works</b></p>
<p>As we write code, a continuous feedback will help us know how we are progressing. And what code are we breaking as we add functionality. A way to run unit tests, as we code and save java files will be great!</p>
<p>I know there was a plugin for Eclipse, Continuous Testing from MIT. So I immediately downloaded the plugin, and tried to integrate with my eclipse IDE. but unluckily the plugin didn&#8217;t worked with the version of the eclipse I work with. There also seems to be no activity in that plugin development. So I thought of ways to get this started, through some simple ways.</p>
<p>After checking other option with Eclipse, I came to know that you can create a task in ant build.xml, and assign that task to execute as part of build process (clean/rebuild) from within IDE. <strike>(My bad, I didn&#8217;t realized that you can&#8217;t trigger the ant task on every save command on resources. you can trigger only by manual build. Before I did checked this I went ahead on trying it out. so I will explain below, how much I reached there)</strike> It works!<strike><br />
</strike></p>
<p>Ok, so made an simple ant target with JUnit task in it. It executes all the unit tests in the project. As this would be time consuming, you will never use this. So this is not at all worth. Lets create test suites that represent a single unit that would be executed one every save operation. This would be the best approach, as test suites can represent a behavior/specification so it will give a larger perspective of what failed. And each package will have a test suite which could be triggered. But I want something that will work with my current setup.</p>
<p>So thought, how about an ant task that figures out itself what are the Test Cases that are affected by my currently working file. All I need is to find the right test cases that need to be executed, and pass it on the JUnit task. For this we don&#8217;t even need to write an ant task, instead we just need to create a custom file selector ant component which can be used inside  any ant &lt;fileselector&gt; task.</p>
<p>So I checked any existing tool/task that could list all source files that uses given class file. But I couldn&#8217;t find something out of my inpatient quick search. So I looked into some reflections library so, I could trace if current file is dependent of the given file. I tried out Apache BCEL, as even some the core ant tasks uses the same library to do some bytecode engineering.</p>
<p>Here is the code for the custom selector.</p>
<blockquote><p> <code>public class DependentClassSelector extends org.apache.tools.ant.types.selectors.BaseExtendSelector {</code></p>
<p>String changedClassName;</p>
<p>public void setChangedClassName(String changedClassName) {<br />
this.changedClassName = changedClassName.replace(&#8216;.&#8217;, &#8216;/&#8217;);<br />
}</p>
<p>@Override<br />
public boolean isSelected(File basedir, String filename, File file)<br />
throws BuildException {<br />
boolean testable = filename.endsWith(&#8220;Test.java&#8221;);</p>
<p>if(testable &amp;&amp; changedClassName != null)<br />
{<br />
testable = false;<br />
//check if this Unit Test, depends on the changed class<br />
//System.out.println(&#8220;$$$$$$$$&#8221;+filename + &#8220;$$$$$$$$&#8221; + changedClassName);</p>
<p>filename = filename.replace(&#8220;.java&#8221;, &#8220;&#8221;);</p>
<p>//System.out.println(filename);</p>
<p>com.sun.org.apache.bcel.internal.classfile.JavaClass javaFile = com.sun.org.apache.bcel.internal.Repository.lookupClass(filename);<br />
com.sun.org.apache.bcel.internal.classfile.Constant[] constants = javaFile.getConstantPool().getConstantPool();</p>
<p>//System.out.println(&#8220;loaded java file&#8221;);</p>
<p>for (Constant constant : constants) {</p>
<p>//check if the constants pool has an entry for given class</p>
<p>if (constant != null &amp;&amp; constant.toString().contains(&#8220;L&#8221;+changedClassName+&#8221;;&#8221;))<br />
{<br />
//System.out.println(constant);</p>
<p>testable = true;<br />
break;<br />
}</p>
<p>}</p>
<p>}</p>
<p>return testable;<br />
}</p></blockquote>
<p>After you coded the custom selector&#8217;s isSelected method. just drop it in the class path, and add the typedef lines in the build.xml</p>
<blockquote><p><code>&lt;property environment="env"/&gt;</code></p>
<p>&lt;typedef name=&#8221;selected-tests&#8221;<br />
classname=&#8221;org.countme.ant.tasks.DependentClassSelector&#8221; /&gt;</p>
<p>&lt;target name=&#8221;continuous_testing&#8221;&gt;</p>
<p>&lt;junit  printsummary=&#8221;yes&#8221; haltonfailure=&#8221;yes&#8221;&gt;<br />
&lt;classpath&gt;<br />
&lt;pathelement path=&#8221;${classpath}&#8221;/&gt;<br />
&lt;fileset dir=&#8221;.&#8221;&gt;<br />
&lt;include name=&#8221;**/*.jar&#8221;/&gt;<br />
&lt;/fileset&gt;<br />
&lt;pathelement location=&#8221;bin&#8221;/&gt;<br />
&lt;dirset dir=&#8221;bin&#8221;&gt;<br />
&lt;include name=&#8221;**/*.class&#8221;/&gt;<br />
&lt;/dirset&gt;</p>
<p>&lt;/classpath&gt;</p>
<p>&lt;batchtest fork=&#8221;yes&#8221; todir=&#8221;reports/&#8221;&gt;<br />
&lt;fileset dir=&#8221;src&#8221;&gt;<br />
&lt;selected-tests changedClassName=&#8221;${env.java_type_name}&#8221;/&gt;<br />
&lt;/fileset&gt;<br />
&lt;/batchtest&gt;</p>
<p>&lt;/junit&gt;<br />
&lt;/target&gt;</p></blockquote>
<p>The ant script gets the current file open in the eclipse, by the environment variable java_type_name. To get this working, you should launch your ant script from within eclipse. The custom selector uses this information to decide where this test should be passed to the unit task or not. This works amazingly good, but still needs some more improvements, like: This code handles only, one level dependency, not the whole chain of dependency. This script need lot of improvements, but this looked like a good way to start.</p>
<p>Test Result: When I ran my script, after coding and saving the changes in just a single file BusinessDomain.java<br />
It picks up the related test cases automatically.</p>
<blockquote><p><a href="http://countme.files.wordpress.com/2008/01/picture-1.png" title="Eclipse continuous testing"><img src="http://countme.files.wordpress.com/2008/01/picture-1.png?w=470" alt="Eclipse continuous testing" /></a></p></blockquote>
<p>Since I cant get this ant script triggered on every file save within eclipse, I will lose value of this script if I forget to run it on every save. <strike>Unfortunately eclipse ant builder cant be triggered on automatic builds (i.e. when eclipse compiles your file).</strike> If you know a way to get this fixed, let me know. I will be happy to use it.</p>
<p>Otherwise instead of starting with the files dependent on current file, we could run all tests that dependent on the files that changed since last run. This way I will have some gain over running the whole test suite.</p>
<p>Please comment on any continuos testing approach that worked for you!</p>
<p><b>UPDATE</b></p>
<blockquote><p>
After spending some more time today, I am able to get this working.  You should be able to set the Ant Builder to run any task, on Auto-Build (i.e. for every save). If you get NullPointerException, then you are missing some library in the class path. Also configure to export the {java_type_name} to the environment, by adding in the Environment Tab of the Ant Builder Configuration. Probably I will post with screenshots, on my next post</p>
<p>The other feature, which I thought about is to increase the chaining depth in the dependency. But it will be of too much cost to execute TestCases that are more than one block away from your modified class file.</p></blockquote>
<p><b>Of the choices between:</b></p>
<ul>
<li>don&#8217;t execute test case as you modify a class</li>
<li> execute all of them</li>
<li> execute all the dependent test cases</li>
</ul>
<p>This sounds most pragmatic way for me: <i><b>On every change to your class file, execute the Test Cases that are one-block away from your class.</b></i></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/notechnique.wordpress.com/68/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/notechnique.wordpress.com/68/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/notechnique.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/notechnique.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/notechnique.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/notechnique.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/notechnique.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/notechnique.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/notechnique.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/notechnique.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=notechnique.wordpress.com&amp;blog=10119514&amp;post=68&amp;subd=notechnique&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://notechnique.wordpress.com/2008/01/13/continuous-testing-want/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9e422ea76f86f10a5ebfaf9b3aa46fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">countme</media:title>
		</media:content>

		<media:content url="http://countme.files.wordpress.com/2008/01/picture-1.png" medium="image">
			<media:title type="html">Eclipse continuous testing</media:title>
		</media:content>
	</item>
	</channel>
</rss>
