<?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>hasan&#039;s blog (বল্গ) &#187; framework</title>
	<atom:link href="http://we4tech.wordpress.com/category/framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://we4tech.wordpress.com</link>
	<description>work for fun!!!</description>
	<lastBuildDate>Wed, 25 Jan 2012 11:56:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='we4tech.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/77f5f3e5f84d83c83da12540728f5cb3?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>hasan&#039;s blog (বল্গ) &#187; framework</title>
		<link>http://we4tech.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://we4tech.wordpress.com/osd.xml" title="hasan&#039;s blog (বল্গ)" />
	<atom:link rel='hub' href='http://we4tech.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Ruby process &amp; ActiveRecord data set executing in multi cores</title>
		<link>http://we4tech.wordpress.com/2010/01/29/ruby-process-and-activerecord-data-set-executing-in-multicores/</link>
		<comments>http://we4tech.wordpress.com/2010/01/29/ruby-process-and-activerecord-data-set-executing-in-multicores/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 19:34:43 +0000</pubDate>
		<dc:creator>nhm tanveer hossain khan</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[multicore process]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[tekSymmetry.net]]></category>

		<guid isPermaLink="false">http://we4tech.wordpress.com/?p=557</guid>
		<description><![CDATA[Now these days! multi core process is more available than getting a single core processor. perhaps single core is soon getting in Zoo! (oops! perhaps in museum) here i demonstrated how we have executed a big chunk of data over multicores processor. <a href="http://we4tech.wordpress.com/2010/01/29/ruby-process-and-activerecord-data-set-executing-in-multicores/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=557&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You know what! in one of <a href="http://www.teksymmetry.com">our</a> (tekSymmetry LLC) projects, we have so many background calculations,<br />
which usually takes so many hours to get fully completed. ever since we have introduced those processes,<br />
we were having problem with it&#8217;s execution time. sometimes it get&#8217;s in nerve</p>
<p>as you know a single ruby process can use a single processor&#8217;s core at a time.<br />
this is probable one of the reasons why muli processes based deployment<br />
strategy is picked by ruby on rails community.</p>
<p>anyway, these days our servers got more than one core! more precisely,<br />
in our case each of our production server got 8 cores based intel xeon processor.</p>
<p>so you see the question rose if we could run those long running expensive process in multicores<br />
our system could have better chance to get faster!.</p>
<p>well this blog post is intended for showing you the technique how we have done it in ruby on rails.</p>
<h3>for better understanding, let me give you some hints so you can get the context -</h3>
<ul>
<li>we have big database table rows!</li>
<li>processing a single row doesn&#8217;t require anything from the same database table.</li>
<li>we are using linux (in our case debian lenny)</li>
</ul>
<h3>so here is the way we have done it -</h3>
<ol>
<li>we took the max rows count for the main query</li>
<li>and divided by the number of cores we have</li>
<li>then we forked child process with each subset of the rows</li>
<li>and executed the logic and related stuffs!</li>
<li>on the parent process we initiated a loop where it was checking the newly forked process status</li>
<li>if all the pid files (which are generated by the newly forked children) are removed,<br />
parent process will flag it as successful execution thus it will end the loop.</li>
</ol>
<p>so you see, it is damn! simple <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> _) and it is working for us <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> _),<br />
it has improved our execution time 8x faster, because of getting 8 cores in new server.</p>
<p>here is the code in ruby how we did it. (we created a helper &#8220;<strong>multicore_execution_helper.rb</strong>&#8220;  and <strong>included</strong> in model, thus <strong>execute_in_multicores</strong> became usable)</p>
<pre><a name="l1">1    </a>module MulticoreExecutionHelper
<a name="l2">2    </a>
<a name="l3">3    </a>  def execute_in_multicores(
<a name="l4">4    </a>      p_cores, p_total_rows, p_model, p_conditions = {}, &amp;block)
<a name="l5">5    </a>
<a name="l6">6    </a>    p_cores == 2 if p_cores.to_i == 0
<a name="l7">7    </a>    total_items_per_core = p_total_rows / p_cores
<a name="l8">8    </a>    logger.info "[BATCH-PROCESS-LOG] Total processes - #{p_cores}, " +
<a name="l9">9    </a>                "total rows - #{p_total_rows} [#{total_items_per_core} / 1 core]"
<a name="l10">10   </a>
<a name="l11">11   </a>    # Create job id for each process
<a name="l12">12   </a>    job_ids = p_cores.times.collect{|i| rand.to_s }
<a name="l13">13   </a>
<a name="l14">14   </a>    # Fork process for each core and execute the block
<a name="l15">15   </a>    p_cores.times do |offset|
<a name="l16">16   </a>      Process.fork do
<a name="l17">17   </a>        logger.info "[BATCH-PROCESS-LOG] Starting thread - #{offset} " +
<a name="l18">18   </a>                    "assigned # #{job_ids[offset]}"
<a name="l19">19   </a>
<a name="l20">20   </a>        # Keep job track through the created process pid file.
<a name="l21">21   </a>        pid_file = File.join(RAILS_ROOT, 'tmp/pids/', "#{job_ids[offset]}.pid")
<a name="l22">22   </a>        File.open(pid_file, 'w') {|f| f.puts Process.pid.to_s}
<a name="l23">23   </a>
<a name="l24">24   </a>        # Since fork process is created from the sample of the parent
<a name="l25">25   </a>        # process's memory so we need to reconnect all live connections.
<a name="l26">26   </a>        begin
<a name="l27">27   </a>          ActiveRecord::Base.connection.reconnect!
<a name="l28">28   </a>
<a name="l29">29   </a>          # Retrieve data from the specific row through the defined
<a name="l30">30   </a>          # offset and limit
<a name="l31">31   </a>          teams = p_model.find(
<a name="l32">32   </a>              :all, {
<a name="l33">33   </a>                  <img src='http://s1.wp.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ffset =&gt; (offset * total_items_per_core),
<a name="l34">34   </a>                  :limit =&gt; total_items_per_core}.merge(p_conditions))
<a name="l35">35   </a>
<a name="l36">36   </a>          block.call(teams)
<a name="l37">37   </a>        rescue =&gt; $e
<a name="l38">38   </a>          logger.error "[BATCH-PROCESS-LOG] Exception raised during " +
<a name="l39">39   </a>                       "execution - #{$e.inspect}"
<a name="l40">40   </a>        end
<a name="l41">41   </a>
<a name="l42">42   </a>        # Remove pid since we are done here!
<a name="l43">43   </a>        FileUtils.rm(pid_file)
<a name="l44">44   </a>      end
<a name="l45">45   </a>    end
<a name="l46">46   </a>
<a name="l47">47   </a>    # monitor whether the process is completed or still in progress
<a name="l48">48   </a>    # don't return this method unless all the forked processes have
<a name="l49">49   </a>    # completed their job
<a name="l50">50   </a>    sleep(2)
<a name="l51">51   </a>
<a name="l52">52   </a>    while 1 do
<a name="l53">53   </a>      fully_completed = true
<a name="l54">54   </a>      for job_id in job_ids
<a name="l55">55   </a>        pid_file = File.join(RAILS_ROOT, 'tmp/pids/', "#{job_id}.pid")
<a name="l56">56   </a>        if fully_completed &amp;&amp; File.exists?(pid_file)
<a name="l57">57   </a>          fully_completed = false
<a name="l58">58   </a>          break
<a name="l59">59   </a>        end
<a name="l60">60   </a>      end
<a name="l61">61   </a>
<a name="l62">62   </a>      break if fully_completed
<a name="l63">63   </a>      sleep(2)
<a name="l64">64   </a>      logger.debug '[BATCH-PROCESS-LOG] again...'
<a name="l65">65   </a>    end
<a name="l66">66   </a>  end
<a name="l67">67   </a>
<a name="l68">68   </a>end
<a name="l69">69   </a></pre>
<h3>here is the usages code -</h3>
<pre><a name="l143">143  </a>      execute_in_multicores(p_total_cores, SomeStuff.count, SomeStuff) do |some_stuffs|
<a name="l144">144  </a>        # Do.. whatever you wanna do with the stuff here! these are gonna run on multicores!
<a name="l151">151  </a>      end

see it is really simple! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> _) if you like it let me know! how much you like it <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> _)
<a href="http://github.com/we4tech/rails_multicore_execution_helper/blob/master/multicore_execution_helper.rb">here you can find the code on github</a> 

best wishes!</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/we4tech.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/we4tech.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/we4tech.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/we4tech.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/we4tech.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/we4tech.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/we4tech.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/we4tech.wordpress.com/557/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=557&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://we4tech.wordpress.com/2010/01/29/ruby-process-and-activerecord-data-set-executing-in-multicores/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<georss:point>23.709921 90.407143</georss:point>
		<geo:lat>23.709921</geo:lat>
		<geo:long>90.407143</geo:long>
		<media:content url="http://0.gravatar.com/avatar/4bb774de244da2d6e7f39a189b905077?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hasan</media:title>
		</media:content>
	</item>
		<item>
		<title>BDD(behavior driven development) with easyb</title>
		<link>http://we4tech.wordpress.com/2008/10/01/bddbehavior-driven-development-with-easyb/</link>
		<comments>http://we4tech.wordpress.com/2008/10/01/bddbehavior-driven-development-with-easyb/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 11:07:28 +0000</pubDate>
		<dc:creator>nhm tanveer hossain khan</dc:creator>
				<category><![CDATA[BDD]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Introduction]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[test approach]]></category>

		<guid isPermaLink="false">http://hasan.we4tech.com/bddbehavior-driven-development-with-easyb/</guid>
		<description><![CDATA[hi, just wondering is there anyone who started using easyb? which is behavior driven development framework. if you are not familiar with BDD here is my explanation. as you heard and practicing TDD (test driven development), (if you follow test first approach) you keep your specification up front through test case. for example - public &#8230; <a href="http://we4tech.wordpress.com/2008/10/01/bddbehavior-driven-development-with-easyb/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=420&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>hi,<br />
just wondering is there anyone who started using easyb?<br />
which is behavior driven development framework. if you are not familiar with BDD here is my explanation.<br />
<br />as you heard and practicing TDD (test driven development), (if you follow test first approach) you keep your specification up front through test case.<br />
for example -</p>
<p>public void testShouldCreateAnUserWhenItHasValidData() {&#8230;}</p>
<p>as you can see, you are actually writing test case for behavior(specification) for your expected code.<br />
and based on that test case you are implemented your logic in code. this how TDD works. for more explanation google IT <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>in BDD, this process is more simplified, for example if you look at my previous example -<br />
public void testShouldCreateAnUserWhenItHasValidData() {&#8230;}</p>
<p>you can find, i have written one scenario when user object has valid data.<br />
same test can be in different scenarios such as, when user object has no valid data. or the caller is not authorized and so on.</p>
<p>so to make such thing clear in java code, it requires code like the following. ie.<br />
public void testShouldCreateAnUserWhenItHas<strong>No</strong>ValidData();<br />
public void testShouldCreateAnUserWhenItHasValidData<strong>ButCallerIsNotPermitted</strong>();<br />
public void testShouldCreateAnUserWhenItHasValidData<strong>ButCallerIsPermitted</strong>();</p>
<p>here how BDD is proposing a new approach of making this thing more fluent through a simplified test framework.<br />
like JUnit, easyb is also another test framework, where you are writing your test context, and behavior in groovy code.</p>
<p>actullay the beauty is test scenario are written following the user story convention<br />
which is similar with the ideal convention<br />
&#8220;<strong>as</strong> an Author<br />
<strong>i want to</strong> write book<br />
<strong>so that</strong> user can understand me&#8221;.<br />
you can also generate user story from the groovy code which you can&#8217;t do with JUnit.<br />
so you don&#8217;t need to maintain separate document for maintaing user stories.</p>
<p>so when you are preparing user story and you can use easyb and groovy to format your user story rather than using ms word, excel or notepad text file <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
ie.</p>
<div style="margin-left:40px;">import com.somewherein.bdd.UserService<br />
import com.somewherein.bdd.UserServiceImpl<br />
import com.somewherein.bdd.Userscenario &#8220;create a new user with valid data&#8221;, {</p>
<p>given &#8220;an user with the valid data&#8221;, {<br />
user = new User()<br />
userService = new UserServiceImpl()<br />
state = false<br />
}</p>
<p>when &#8220;creating a new user&#8221;, {<br />
state = userService.createUser(user)<br />
}</p>
<p>then &#8220;returned state should be true&#8221;, {<br />
state.shouldBe true<br />
}</p>
<p>and &#8220;newly created user should be found&#8221;, {<br />
userService.exists(user)<br />
}<br />
}</p></div>
<p>when i run this test it says -</p>
<div style="margin-left:40px;">Running user service story (UserServiceStory.groovy)<br />
Scenarios run: 1, Failures: 0, Pending: 0, Time Elapsed: 0.649 sec1 behavior run with no failures</div>
<p>so if i ask for generating the user story &#8211; it generate the following text</p>
<div style="margin-left:40px;">1 scenario executed successfullyStory: user service</p>
<p>scenario create a new user with valid data<br />
given an user with the valid data<br />
when creating a new user<br />
then returned state should be true<br />
then newly created user should be found</p></div>
<p>this type of practice is very common in ruby on rails based development.<br />
in ruby we have several options, but RSpec is the early comer who showed how cool it could be.</p>
<p>anyway, this is something you should work try EiD vacation, happy test first development.</p>
<p><a href="http://easyb.org/download.html">easyb makes it easy, man</a></p>
<p>here is an article from javalobby<br />
<a href="http://java.dzone.com/articles/is-easyb-easy">Is easyb Easy? | Javalobby</a></p>
<p>you can use it with spring framework, <a href="http://code.google.com/p/easyb/wiki/SpringBeansInEasyb">here is the example</a> -<br />
best wishes,</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/we4tech.wordpress.com/420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/we4tech.wordpress.com/420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/we4tech.wordpress.com/420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/we4tech.wordpress.com/420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/we4tech.wordpress.com/420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/we4tech.wordpress.com/420/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/we4tech.wordpress.com/420/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/we4tech.wordpress.com/420/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=420&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://we4tech.wordpress.com/2008/10/01/bddbehavior-driven-development-with-easyb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4bb774de244da2d6e7f39a189b905077?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hasan</media:title>
		</media:content>
	</item>
		<item>
		<title>test first development, does it run fast on ruby on rails or java environment?</title>
		<link>http://we4tech.wordpress.com/2007/10/14/test-first-development-does-it-run-fast-on-ruby-on-rails-or-java-environment/</link>
		<comments>http://we4tech.wordpress.com/2007/10/14/test-first-development-does-it-run-fast-on-ruby-on-rails-or-java-environment/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 06:53:15 +0000</pubDate>
		<dc:creator>nhm tanveer hossain khan</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://hasan.we4tech.com/test-first-development-does-it-run-fast-on-ruby-on-rails-or-java-environment</guid>
		<description><![CDATA[i have been practicing test first development (from TDD) approach for last 1.5 years. i wrote a lot of junit test cases and wrote a lot of jmock based mock objects. it was amazing work with it these tools. specially jmock was fantastics and my most favorite mocking tool. anyway, while i seriously started ruby &#8230; <a href="http://we4tech.wordpress.com/2007/10/14/test-first-development-does-it-run-fast-on-ruby-on-rails-or-java-environment/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=363&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>i have been practicing test first development (from TDD) approach for last 1.5 years. i wrote a lot of junit test cases and wrote a lot of jmock based mock objects. it was amazing work with it these tools. specially jmock was fantastics and my most favorite mocking tool.</p>
<p>anyway, while i seriously started ruby on rails it is about 2/3 months ago, when i formed my own rails team and started working on first commercial rails project.</p>
<p>at the beginning i was working on IntelliJ IDEA 6M2 on windows environment, where i found running runit test cases are taking longer than we suppose to expect. it was really annoying.</p>
<p>good luck i got my mac book pro where i set up all rails stuff with IntelliJ IDEA 6M2. now i could see a lot more significant difference. now i am really feeling my test environment for rails project over this environment is running more than i expected. it really leads me to belief test driven approach over rails environment is really fast.</p>
<p>it must be some platform related significant changes, which only the expert on that platform can assure me.</p>
<p>by the way, i am really loving intelliJ IDEA and rails over my mac environment.<!--0edfd696e9b271074971e8d8ac0d64a8-->
</p>
<p><!--2a6150db876baddd7599c2bc2df53a8f--></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/we4tech.wordpress.com/363/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/we4tech.wordpress.com/363/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/we4tech.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/we4tech.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/we4tech.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/we4tech.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/we4tech.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/we4tech.wordpress.com/363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/we4tech.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/we4tech.wordpress.com/363/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=363&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://we4tech.wordpress.com/2007/10/14/test-first-development-does-it-run-fast-on-ruby-on-rails-or-java-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4bb774de244da2d6e7f39a189b905077?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hasan</media:title>
		</media:content>
	</item>
		<item>
		<title>A RESTful url using Stripes.</title>
		<link>http://we4tech.wordpress.com/2007/02/23/a-restful-url-using-stripes/</link>
		<comments>http://we4tech.wordpress.com/2007/02/23/a-restful-url-using-stripes/#comments</comments>
		<pubDate>Thu, 22 Feb 2007 20:34:15 +0000</pubDate>
		<dc:creator>nhm tanveer hossain khan</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[Introduction]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java ee]]></category>

		<guid isPermaLink="false">http://hasan.we4tech.com/a-restful-url-using-stripes</guid>
		<description><![CDATA[RESTful url may contain the content type with in the url string. For example: http://host/action/xml/bookmark. Here “xml” is content type, this content type can be changed to “text, json” or etc… So following urls are valid too. http://host/action/text/bookmark, http://host/action/json/bookmark etc… these days I am playing with “Stripes” web framework a lot. Those who didn’t get &#8230; <a href="http://we4tech.wordpress.com/2007/02/23/a-restful-url-using-stripes/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=316&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>RESTful </strong>url may contain the content type with in the url string. For example: http://host/action/xml/bookmark. Here “xml” is content type, this content type can be changed to “text, json” or etc…</p>
<p class="MsoNormal">So following urls are valid too. http://host/action/text/bookmark, http://host/action/json/bookmark etc…</p>
<p class="MsoNormal">these days I am playing with “Stripes” web framework a lot. Those who didn’t get in touch with “Stripes” have a look on the following URL &#8211; http://stripes.mc4j.org, hope you will enjoy it.</p>
<p class="MsoNormal">stripes has fantastic flexibility, it enables a lot of customization. Now my tutorial will demonstrate how you can enable this url pattern, where your single “ActionBean” will be invoked on the following url patterns:</p>
<p class="MsoNormal">http://host/action/xml/bookmark, http://host/action/text/bookmark, http://host/action/json/bookmark etc…</p>
<p class="MsoNormal"><strong><u>My target audience:</u></strong><br />
Who has already been introduced with Stripes or those who are interested on stripes framework.</p>
<p class="MsoNormal"><strong><u>Routing plan:</u></strong><br />
<em>Request Dispatch</em><br />
[visitor] &#8212;  &gt; http://host/action/xml/bookmark &#8212; &gt; [web server] &#8212; &gt; [Stripe servlet] &#8212; &gt; [Custom Action resolver] &#8212; &gt; [remove user defined content type “xml” and retrieve action bean]</p>
<p class="MsoNormal"><em>Response Dispatch</em><br />
[clean url (after removing content type)] &#8212; &gt; http://host/action/bookmark &#8212; &gt; [BookmarkActionBean] &#8212; &gt; [Resolution] &#8212; &gt; </p>
<p class="MsoNormal"><strong><u>Pre requisite:</u></strong><br />
Stripes servlet is configured and web context is up and running.</p>
<p class="MsoNormal"><strong><u>ActionBean code:</u></strong><br />
<em>*  create an ActionBean, for example “BookmarkActionBean”</em>
</p>
<p class="MsoNormal">
<blockquote>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">@UrlBinding(&#8220;/action/bookmark&#8221;)</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">public class BookmarkAction implements ActionBean {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    private final Log LOG = LogFactory.getLog(getClass());</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    private ActionBeanContext mActionBeanContext;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    private String mContentType = &#8220;text/xml&#8221;;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    public void setContext(ActionBeanContext actionBeanContext) {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        mActionBeanContext = actionBeanContext;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        // retrieve user requested content type constant for example &#8220;text,json, xml&#8221;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        // convert consts to mime type &#8220;text, text/xml, application/JSON&#8221;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        mContentType = URLHelper.getMimeType(URLHelper.getContentType(getContext().getRequest().getPathInfo()));</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    }</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    public ActionBeanContext getContext() {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return mActionBeanContext;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    }</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    @DefaultHandler</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    public Resolution save() {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        if (LOG.isDebugEnabled())</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            LOG.debug( &#8220;storing bookmark object on the data store, &#8221; +</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">                       &#8220;response content type is requested &#8211; &#8221; + mContentType );</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return new StreamingResolution( mContentType, new StringReader(&#8220;&#8221;) );</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    }</span></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">}</font></span></p>
</blockquote>
<p class="MsoNormal">
<p class="MsoNormal"><strong><u>Description:</u></strong><br />
Here i have set our action on “/action/bookmark” url, but our user requested url pattern is “/action//actionBean”
</p>
<p class="MsoNormal">Look on the “setContext” method, I have added an extra line</p>
<blockquote>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">mContentType = URLHelper.getMimeType(URLHelper.getContentType(getContext().getRequest().getPathInfo()));</font></span></p>
</blockquote>
<p class="MsoNormal">now have a look on the URLHelper class.</p>
<blockquote>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">public static String getContentType( String pRequestedUrl ) {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        String contentType = CACHED_URL_CONTENT_TYPE.get(pRequestedUrl);</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        if (contentType == null) {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            contentType = DEFAULT_CONTENT_TYPE;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            Perl5Util util = new Perl5Util();</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            if (util.match( REGEX_ACTION_CONTENT_TYPE, pRequestedUrl ))</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">                contentType = util.group(1)+&#8221;";</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            CACHED_URL_CONTENT_TYPE.put( pRequestedUrl, contentType );</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        }</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return contentType;</span></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">    }</font></span></p>
</blockquote>
<p class="MsoNormal">This method is responsible to retrieve user requested content type constants.<br />
for example “text, xml, json”</p>
<blockquote>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">public static String getMimeType( String pContentType ) {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        // convert content type to MIME Type</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        if (pContentType.equalsIgnoreCase(CONTENT_TYPE_CONST_XML))</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            pContentType = CONTENT_TYPE_XML;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        else if (pContentType.equalsIgnoreCase(CONTENT_TYPE_CONST_JSON))</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            pContentType = CONTENT_TYPE_JSON;</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return pContentType;</span></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">    }</font></span></p>
</blockquote>
<p class="MsoNormal">This method is also converting constant to MIME content type.<br />
For example “xml &#8211;&gt; text/xml”
</p>
<p class="MsoNormal">Now return to my base action bean. I have added the following method, which is defined as default handler.</p>
<blockquote>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">@DefaultHandler<br />
public Resolution save() {</span></font>
</p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        ….</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return new StreamingResolution( mContentType, new StringReader(&#8220;&#8221;) );</span></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">    }</font></span></p>
</blockquote>
<p class="MsoNormal">Here “mContentType” is repopulate when “setContext” is invoked.</p>
<p class="MsoNormal"><strong><u>ActionResolver code:</u></strong><br />
This is my action resolver.</p>
<blockquote>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">public class NBookmarkSystemActionResolver extends NameBasedActionResolver {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">     // ………    </span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    @Override</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    public ActionBean getActionBean(ActionBeanContext pActionBeanContext, String pRequestedUrl) throws StripesServletException {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        String cleanUrl = URLHelper.getCleanUrl(pRequestedUrl);</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        if (LOG.isDebugEnabled())</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">            LOG.debug( &#8220;user requested url &#8211; &#8221; + pRequestedUrl + &#8221; clean url &#8211; &#8221; + cleanUrl);</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return super.getActionBean(actionBeanContext, cleanUrl);</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">    }</span></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">}</font></span></p>
</blockquote>
<p class="MsoNormal">Now let’s have a look on “getCleanUrl” method.</p>
<blockquote>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">public static String getCleanUrl( String pRequestedUrl ) {</span></font></p>
<p class="MsoNormal"><font face="courier new"><span style="font-size:9pt;">        return pRequestedUrl.replaceAll(&#8220;/&#8221;+getContentType(pRequestedUrl),&#8221;");</span></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="courier new">    }</font></span></p>
</blockquote>
<p class="MsoNormal">
<p class="MsoNormal"><strong><u>Custom ActionResolver configuration:</u></strong></p>
<blockquote>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;"></span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        Stripes Filter</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        StripesFilter</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        net.sourceforge.stripes.controller.StripesFilter</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        </span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">            ActionResolver.UrlFilters</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">            /WEB-INF/classes/</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        </span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        </span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">            ActionResolver.PackageFilters</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">            com.we4tech.nBookmarkSystem.service.webService/*</span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        </span></font></p>
<p class="MsoNormal"><font face="arial"><span style="font-size:9pt;">        <em></em></span></font></p>
<p class="MsoNormal"><font face="arial"><em><span style="font-size:9pt;">            ActionResolver.Class</span></em></font></p>
<p class="MsoNormal"><font face="arial"><em><span style="font-size:9pt;">            com.we4tech.nBookmarkSystem.configuration.NBookmarkSystemActionResolver</span></em></font></p>
<p class="MsoNormal"><font face="arial"><em><span style="font-size:9pt;">        </span></em></font></p>
<p class="MsoNormal"><span style="font-size:9pt;"><font face="arial">    </font></span></p>
</blockquote>
<p class="MsoNormal">
<p class="MsoNormal">That’s all for today,</p>
<p class="MsoNormal">Hope you will enjoy stripes. Best of luck…</p>
<p class="MsoNormal">
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/we4tech.wordpress.com/316/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/we4tech.wordpress.com/316/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/we4tech.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/we4tech.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/we4tech.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/we4tech.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/we4tech.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/we4tech.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/we4tech.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/we4tech.wordpress.com/316/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=316&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://we4tech.wordpress.com/2007/02/23/a-restful-url-using-stripes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4bb774de244da2d6e7f39a189b905077?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hasan</media:title>
		</media:content>
	</item>
		<item>
		<title>Nice Stripes web framework</title>
		<link>http://we4tech.wordpress.com/2007/02/11/nice-stripes-web-framework/</link>
		<comments>http://we4tech.wordpress.com/2007/02/11/nice-stripes-web-framework/#comments</comments>
		<pubDate>Sun, 11 Feb 2007 17:49:12 +0000</pubDate>
		<dc:creator>nhm tanveer hossain khan</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[Introduction]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java ee]]></category>

		<guid isPermaLink="false">http://hasan.we4tech.com/nice-stripes-web-framework</guid>
		<description><![CDATA[hi, at least i could manage some time to write about Stripes (http://stripes.mc4j.org/) stripes is a web framework, it has very few dependencies, configuration over convention is highly adopted on Stripes. you don&#8217;t need to bother about any separate XML file or properties file, it is as simple as web.xml servlet configuration. just put your &#8230; <a href="http://we4tech.wordpress.com/2007/02/11/nice-stripes-web-framework/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=313&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>hi,<br />
at least i could manage some time to write about Stripes (http://stripes.mc4j.org/)</p>
<p>stripes is a web framework, it has very few dependencies, configuration over convention is highly adopted on Stripes.</p>
<p>you don&#8217;t need to bother about any separate XML file or properties file, it is as simple as web.xml servlet configuration. just put your all configuration over </p>
<p>more over it has default convention centric url discovery&#8230; for example  &#8220;HelloAction&#8221;.. this action can be accessed over &#8220;http:///Hello.htm&#8221; or whatever u map on url mapping.</p>
<p>very flexible system. it has very simple work flow management, (who already familiar with JSF navigation or Spring web flow will be interested on its work flow)</p>
<p>by default it has multi action on each class, and you can  override  the url or any settings over @annotation. which is the most powerful feature over stripes.</p>
<p>web form validation is one of the nice and simple approaches over stripes. i am really loving it..<br />
you can apply validation rule over @annotation. here is few example.. hope it will give you clean understanding.</p>
<p>@ValidateNestedProperties({<br />
@ValidateNestedProperties({<br />
@Validate( field = &#8220;accountName&#8221;, required = true, on = {&#8220;register&#8221;}),<br />
@Validate( field = &#8220;password&#8221;, required = true, minlength = 6, on = {&#8220;register&#8221;})})<br />
private User user;</p>
<p>@Validate( expression = &#8220;user.password == this&#8221;, on = &#8220;register&#8221;, required = true)<br />
private String confirmPassword;</p>
<p>it has support over spring container, so spring developer won&#8217;t get you out&#8230;</p>
<p>best wishes&#8230;</p>
<p>http://hasan.we4tech.com</p>
<p><!--b1f082e910ae6c0da8555d2a28bb512f--></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/we4tech.wordpress.com/313/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/we4tech.wordpress.com/313/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/we4tech.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/we4tech.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/we4tech.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/we4tech.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/we4tech.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/we4tech.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/we4tech.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/we4tech.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=we4tech.wordpress.com&amp;blog=537526&amp;post=313&amp;subd=we4tech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://we4tech.wordpress.com/2007/02/11/nice-stripes-web-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4bb774de244da2d6e7f39a189b905077?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hasan</media:title>
		</media:content>
	</item>
	</channel>
</rss>
