<?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/"
	>

<channel>
	<title>Ketan&#039;s Musings &#187; Ketan</title>
	<atom:link href="http://ketan.padegaonkar.name/author/ketan/feed" rel="self" type="application/rss+xml" />
	<link>http://ketan.padegaonkar.name</link>
	<description>Where he blogs about his eclipse musings</description>
	<lastBuildDate>Sat, 26 Feb 2011 18:24:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Using Models In Rails Migrations</title>
		<link>http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html</link>
		<comments>http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html#comments</comments>
		<pubDate>Sun, 21 Nov 2010 05:55:53 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=484</guid>
		<description><![CDATA[It is quite tempting to use models in rails migrations. At the time the migration is expected to run, the model class will have been updated already, so it is hard use that in the migration itself, even though it would be useful. Consider this example: class CreateUsers &#60; ActiveRecord::Migration def self.up t.string :email, :null [...]]]></description>
			<content:encoded><![CDATA[<p>It is quite tempting to use models in rails migrations.</p>
<p>At the time the migration is expected to run, the model class will have been updated already, so it is hard use that in the migration itself, even though it would be useful.</p>
<p>Consider this example:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> CreateUsers <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span>
      t.<span style="color:#CC0066; font-weight:bold;">string</span> <span style="color:#ff3333; font-weight:bold;">:email</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
      t.<span style="color:#CC0066; font-weight:bold;">string</span> <span style="color:#ff3333; font-weight:bold;">:password</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#008000; font-style:italic;"># create a dummy user - with newer rails versions this should really go in seeds.rb!</span>
    User.<span style="color:#9900CC;">create</span>!<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:email</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'user@example.com'</span>, <span style="color:#ff3333; font-weight:bold;">:password</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'demo'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span>
    drop_table <span style="color:#ff3333; font-weight:bold;">:users</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Doesn&#8217;t get simpler than this!</p>
<p>Now lets add another migration:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> AddSSNForUser <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span>
    add_column, <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:ssn</span>, :<span style="color:#CC0066; font-weight:bold;">string</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
  <span style="color:#9966CC; font-weight:bold;">end</span> 
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span>
    remove_column, <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:ssn</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>And a corresponding validation to the <code>User</code> model:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  <span style="color:#008000; font-style:italic;"># ...</span>
  validates_presence_of <span style="color:#ff3333; font-weight:bold;">:ssn</span>
  <span style="color:#008000; font-style:italic;"># ...</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Now if you were to run the database migrations on an empty database, the first migration would fail because of the lack of a SSN. Worse, it is quite possible that the User class is now called something else.</p>
<p>How do you get around this issue:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> CreateUsers <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>
  <span style="color:#008000; font-style:italic;"># define your own User class</span>
  <span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
    <span style="color:#008000; font-style:italic;">#...</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span>
    <span style="color:#008000; font-style:italic;"># clear all cache that rails maintains about the User class/table mapping</span>
    User.<span style="color:#9900CC;">reset_column_information</span>
    create_table <span style="color:#ff3333; font-weight:bold;">:users</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>t<span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#008000; font-style:italic;"># whatever we did in the example above</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#008000; font-style:italic;"># this statement will always work no matter what.</span>
    User.<span style="color:#9900CC;">create</span>!<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:email</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'user@example.com'</span>, <span style="color:#ff3333; font-weight:bold;">:password</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'demo'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span>
    drop_table <span style="color:#ff3333; font-weight:bold;">:users</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Sometimes using SQL for performing data migrations could get quite cumbersome and unreadable, and using model objects is the simplest way to run any form of data migration. In such a case, it&#8217;s better to copy your model code into the migration.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Using+Models+In+Rails+Migrations&amp;link=http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html&amp;notes=It%20is%20quite%20tempting%20to%20use%20models%20in%20rails%20migrations.%0D%0A%0D%0AAt%20the%20time%20the%20migration%20is%20expected%20to%20run%2C%20the%20model%20class%20will%20have%20been%20updated%20already%2C%20so%20it%20is%20hard%20use%20that%20in%20the%20migration%20itself%2C%20even%20though%20it%20would%20be%20useful.%0D%0A%0D%0AConsider%20this%20example%3A%0D%0A%0D%0A%0D%0Aclass%20CreateUsers%20%3C%20ActiveRecord%3A%3AMi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Using+Models+In+Rails+Migrations&amp;link=http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html&amp;notes=It%20is%20quite%20tempting%20to%20use%20models%20in%20rails%20migrations.%0D%0A%0D%0AAt%20the%20time%20the%20migration%20is%20expected%20to%20run%2C%20the%20model%20class%20will%20have%20been%20updated%20already%2C%20so%20it%20is%20hard%20use%20that%20in%20the%20migration%20itself%2C%20even%20though%20it%20would%20be%20useful.%0D%0A%0D%0AConsider%20this%20example%3A%0D%0A%0D%0A%0D%0Aclass%20CreateUsers%20%3C%20ActiveRecord%3A%3AMi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Using+Models+In+Rails+Migrations&amp;link=http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html&amp;notes=It%20is%20quite%20tempting%20to%20use%20models%20in%20rails%20migrations.%0D%0A%0D%0AAt%20the%20time%20the%20migration%20is%20expected%20to%20run%2C%20the%20model%20class%20will%20have%20been%20updated%20already%2C%20so%20it%20is%20hard%20use%20that%20in%20the%20migration%20itself%2C%20even%20though%20it%20would%20be%20useful.%0D%0A%0D%0AConsider%20this%20example%3A%0D%0A%0D%0A%0D%0Aclass%20CreateUsers%20%3C%20ActiveRecord%3A%3AMi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=Using+Models+In+Rails+Migrations&amp;link=http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html&amp;notes=It%20is%20quite%20tempting%20to%20use%20models%20in%20rails%20migrations.%0D%0A%0D%0AAt%20the%20time%20the%20migration%20is%20expected%20to%20run%2C%20the%20model%20class%20will%20have%20been%20updated%20already%2C%20so%20it%20is%20hard%20use%20that%20in%20the%20migration%20itself%2C%20even%20though%20it%20would%20be%20useful.%0D%0A%0D%0AConsider%20this%20example%3A%0D%0A%0D%0A%0D%0Aclass%20CreateUsers%20%3C%20ActiveRecord%3A%3AMi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Using+Models+In+Rails+Migrations&amp;link=http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html&amp;notes=It%20is%20quite%20tempting%20to%20use%20models%20in%20rails%20migrations.%0D%0A%0D%0AAt%20the%20time%20the%20migration%20is%20expected%20to%20run%2C%20the%20model%20class%20will%20have%20been%20updated%20already%2C%20so%20it%20is%20hard%20use%20that%20in%20the%20migration%20itself%2C%20even%20though%20it%20would%20be%20useful.%0D%0A%0D%0AConsider%20this%20example%3A%0D%0A%0D%0A%0D%0Aclass%20CreateUsers%20%3C%20ActiveRecord%3A%3AMi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/11/20/using-models-in-rails-migrations.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JRuby and static imports</title>
		<link>http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html</link>
		<comments>http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html#comments</comments>
		<pubDate>Wed, 29 Sep 2010 14:57:33 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[swt]]></category>
		<category><![CDATA[swtbot]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=465</guid>
		<description><![CDATA[The last few weeks have been interesting working with SWT and some newly acquired (J)Ruby chops, to hack together a couple of approaches to build a recorder for SWTBot. Here is one of the interesting hacks which was cobbled together: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [...]]]></description>
			<content:encoded><![CDATA[<p>The last few weeks have been interesting working with SWT and some newly acquired (J)Ruby chops, to hack together a couple of approaches to build a recorder for <a href="http://swtbot.org">SWTBot</a>. Here is one of the interesting hacks which was cobbled together:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'java'</span>
<span style="color:#9966CC; font-weight:bold;">module</span> Recorder
  <span style="color:#9966CC; font-weight:bold;">module</span> SWTInitializer
&nbsp;
      include_package <span style="color:#996600;">'org.eclipse.swt'</span>
      include_package <span style="color:#996600;">'org.eclipse.swt.layout'</span>
      include_package <span style="color:#996600;">'org.eclipse.swt.widgets'</span>
      include_package <span style="color:#996600;">'org.eclipse.swt.custom'</span>
      include_packate  <span style="color:#996600;">'org.eclipse.swtbot.swt.finder'</span>
&nbsp;
      <span style="color:#008000; font-style:italic;"># loop through a few known classes to implement static imports</span>
      <span style="color:#9966CC; font-weight:bold;">def</span> method_missing<span style="color:#006600; font-weight:bold;">&#40;</span>method, <span style="color:#006600; font-weight:bold;">*</span>args, <span style="color:#006600; font-weight:bold;">&amp;</span>amp;block<span style="color:#006600; font-weight:bold;">&#41;</span>
        klass = <span style="color:#006600; font-weight:bold;">&#91;</span>
            org.<span style="color:#9900CC;">eclipse</span>.<span style="color:#9900CC;">swtbot</span>.<span style="color:#9900CC;">swt</span>.<span style="color:#9900CC;">finder</span>.<span style="color:#9900CC;">matchers</span>.<span style="color:#9900CC;">WidgetMatcherFactory</span>,
            org.<span style="color:#9900CC;">eclipse</span>.<span style="color:#9900CC;">swtbot</span>.<span style="color:#9900CC;">swt</span>.<span style="color:#9900CC;">finder</span>.<span style="color:#9900CC;">utils</span>.<span style="color:#9900CC;">SWTUtils</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">find</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>k<span style="color:#006600; font-weight:bold;">|</span>
          k.<span style="color:#9900CC;">respond_to</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>method<span style="color:#006600; font-weight:bold;">&#41;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#0000FF; font-weight:bold;">return</span> klass.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span>method, <span style="color:#006600; font-weight:bold;">*</span>args, <span style="color:#006600; font-weight:bold;">&amp;</span>amp;block<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">if</span> klass
        <span style="color:#9966CC; font-weight:bold;">super</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>To use this class:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Application
  <span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">Recorder::SWTInitializer</span>
  <span style="color:#008000; font-style:italic;"># the with_text invocation falls into the method_missing </span>
  <span style="color:#008000; font-style:italic;"># which delegates it to WidgetMatcherFactory</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">run</span>
    SWTBot.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">widgets</span><span style="color:#006600; font-weight:bold;">&#40;</span>with_text<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'hello'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>



<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=JRuby+and+static+imports&amp;link=http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html&amp;notes=The%20last%20few%20weeks%20have%20been%20interesting%20working%20with%20SWT%20and%20some%20newly%20acquired%20%28J%29Ruby%20chops%2C%20to%20hack%20together%20a%20couple%20of%20approaches%20to%20build%20a%20recorder%20for%20SWTBot.%20Here%20is%20one%20of%20the%20interesting%20hacks%20which%20was%20cobbled%20together%3A%0D%0A%0D%0A%0D%0Arequire%20%27java%27%0D%0Amodule%20Recorder%0D%0A%20%20module%20SWTInitializer%0D%0A%0D%0A%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=JRuby+and+static+imports&amp;link=http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html&amp;notes=The%20last%20few%20weeks%20have%20been%20interesting%20working%20with%20SWT%20and%20some%20newly%20acquired%20%28J%29Ruby%20chops%2C%20to%20hack%20together%20a%20couple%20of%20approaches%20to%20build%20a%20recorder%20for%20SWTBot.%20Here%20is%20one%20of%20the%20interesting%20hacks%20which%20was%20cobbled%20together%3A%0D%0A%0D%0A%0D%0Arequire%20%27java%27%0D%0Amodule%20Recorder%0D%0A%20%20module%20SWTInitializer%0D%0A%0D%0A%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=JRuby+and+static+imports&amp;link=http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html&amp;notes=The%20last%20few%20weeks%20have%20been%20interesting%20working%20with%20SWT%20and%20some%20newly%20acquired%20%28J%29Ruby%20chops%2C%20to%20hack%20together%20a%20couple%20of%20approaches%20to%20build%20a%20recorder%20for%20SWTBot.%20Here%20is%20one%20of%20the%20interesting%20hacks%20which%20was%20cobbled%20together%3A%0D%0A%0D%0A%0D%0Arequire%20%27java%27%0D%0Amodule%20Recorder%0D%0A%20%20module%20SWTInitializer%0D%0A%0D%0A%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=JRuby+and+static+imports&amp;link=http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html&amp;notes=The%20last%20few%20weeks%20have%20been%20interesting%20working%20with%20SWT%20and%20some%20newly%20acquired%20%28J%29Ruby%20chops%2C%20to%20hack%20together%20a%20couple%20of%20approaches%20to%20build%20a%20recorder%20for%20SWTBot.%20Here%20is%20one%20of%20the%20interesting%20hacks%20which%20was%20cobbled%20together%3A%0D%0A%0D%0A%0D%0Arequire%20%27java%27%0D%0Amodule%20Recorder%0D%0A%20%20module%20SWTInitializer%0D%0A%0D%0A%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=JRuby+and+static+imports&amp;link=http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html&amp;notes=The%20last%20few%20weeks%20have%20been%20interesting%20working%20with%20SWT%20and%20some%20newly%20acquired%20%28J%29Ruby%20chops%2C%20to%20hack%20together%20a%20couple%20of%20approaches%20to%20build%20a%20recorder%20for%20SWTBot.%20Here%20is%20one%20of%20the%20interesting%20hacks%20which%20was%20cobbled%20together%3A%0D%0A%0D%0A%0D%0Arequire%20%27java%27%0D%0Amodule%20Recorder%0D%0A%20%20module%20SWTInitializer%0D%0A%0D%0A%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/09/29/jruby-and-static-imports.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SWTBot Release updated for Helios</title>
		<link>http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html</link>
		<comments>http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html#comments</comments>
		<pubDate>Fri, 23 Jul 2010 16:03:25 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[swtbot]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=453</guid>
		<description><![CDATA[A new release of SWTBot is now available at a the usual location. This purpose of this release is to work with the helios release and contains a few bug minor fixes. A few other improvements were done to improve the code coverage for some plugins that were not tested too well. Forthcoming releases will [...]]]></description>
			<content:encoded><![CDATA[<p>A new release of SWTBot is now available at a <a href="http://eclipse.org/swtbot/downloads.php">the usual location</a>.</p>
<p>This purpose of this release is to work with the helios release and contains a few bug minor fixes.</p>
<p>A few other improvements were done to improve the <a href="http://download.eclipse.org/technology/swtbot/galileo/dev-build/coverage/org.eclipse.swtbot.swt.finder.test/">code coverage</a> for <a />some</a> plugins that were <a href="http://download.eclipse.org/technology/swtbot/galileo/dev-build/coverage/org.eclipse.swtbot.eclipse.finder.test/">not tested</a> too well.</p>
<p>Forthcoming releases will improve on the code coverage. Well, the irony.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+Release+updated+for+Helios&amp;link=http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html&amp;notes=A%20new%20release%20of%20SWTBot%20is%20now%20available%20at%20a%20the%20usual%20location.%0D%0A%0D%0AThis%20purpose%20of%20this%20release%20is%20to%20work%20with%20the%20helios%20release%20and%20contains%20a%20few%20bug%20minor%20fixes.%0D%0A%0D%0AA%20few%20other%20improvements%20were%20done%20to%20improve%20the%20code%20coverage%20for%20some%20plugins%20that%20were%20not%20tested%20too%20well.%0D%0A%0D%0AForthcoming%20r&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+Release+updated+for+Helios&amp;link=http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html&amp;notes=A%20new%20release%20of%20SWTBot%20is%20now%20available%20at%20a%20the%20usual%20location.%0D%0A%0D%0AThis%20purpose%20of%20this%20release%20is%20to%20work%20with%20the%20helios%20release%20and%20contains%20a%20few%20bug%20minor%20fixes.%0D%0A%0D%0AA%20few%20other%20improvements%20were%20done%20to%20improve%20the%20code%20coverage%20for%20some%20plugins%20that%20were%20not%20tested%20too%20well.%0D%0A%0D%0AForthcoming%20r&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+Release+updated+for+Helios&amp;link=http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html&amp;notes=A%20new%20release%20of%20SWTBot%20is%20now%20available%20at%20a%20the%20usual%20location.%0D%0A%0D%0AThis%20purpose%20of%20this%20release%20is%20to%20work%20with%20the%20helios%20release%20and%20contains%20a%20few%20bug%20minor%20fixes.%0D%0A%0D%0AA%20few%20other%20improvements%20were%20done%20to%20improve%20the%20code%20coverage%20for%20some%20plugins%20that%20were%20not%20tested%20too%20well.%0D%0A%0D%0AForthcoming%20r&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+Release+updated+for+Helios&amp;link=http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html&amp;notes=A%20new%20release%20of%20SWTBot%20is%20now%20available%20at%20a%20the%20usual%20location.%0D%0A%0D%0AThis%20purpose%20of%20this%20release%20is%20to%20work%20with%20the%20helios%20release%20and%20contains%20a%20few%20bug%20minor%20fixes.%0D%0A%0D%0AA%20few%20other%20improvements%20were%20done%20to%20improve%20the%20code%20coverage%20for%20some%20plugins%20that%20were%20not%20tested%20too%20well.%0D%0A%0D%0AForthcoming%20r&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+Release+updated+for+Helios&amp;link=http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html&amp;notes=A%20new%20release%20of%20SWTBot%20is%20now%20available%20at%20a%20the%20usual%20location.%0D%0A%0D%0AThis%20purpose%20of%20this%20release%20is%20to%20work%20with%20the%20helios%20release%20and%20contains%20a%20few%20bug%20minor%20fixes.%0D%0A%0D%0AA%20few%20other%20improvements%20were%20done%20to%20improve%20the%20code%20coverage%20for%20some%20plugins%20that%20were%20not%20tested%20too%20well.%0D%0A%0D%0AForthcoming%20r&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/07/23/swtbot-release-updated-for-helios.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Code Complexity Visualization for Ruby</title>
		<link>http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html</link>
		<comments>http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 03:33:05 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=450</guid>
		<description><![CDATA[Image from http://www.osnews.com/story/19266/WTFs_m WTF implies lack of clarity. Clear code is easier to understand, easier to maintain and easier to extend. Announcing saikuro_treemap &#8212; an easy to setup tool to generate complexity treemaps of ruby code. See a demo for yourself. Post on Google Buzz Share this on Reddit Tweet This! Share this on Facebook [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_451" class="wp-caption alignnone" style="width: 510px"><a href="http://ketan.padegaonkar.name/files/2010/06/wtfm.jpg"><img src="http://ketan.padegaonkar.name/files/2010/06/wtfm.jpg" alt="Only Valid Measure of Code Quality" width="500" height="471" class="size-full wp-image-451" /></a><p class="wp-caption-text">Only Valid Measure of Code Quality</p></div>
<p>Image from http://www.osnews.com/story/19266/WTFs_m</p>
<p>WTF implies lack of clarity. Clear code is easier to understand, easier to maintain and easier to extend.</p>
<p>Announcing <a href="http://github.com/ThoughtWorksStudios/saikuro_treemap">saikuro_treemap</a> &#8212; an easy to setup tool to generate complexity treemaps of ruby code.</p>
<p>See a <a href="http://thoughtworksstudios.github.com/rake.ccn.html">demo</a> for yourself.</p>
<div id="attachment_454" class="wp-caption alignnone" style="width: 310px"><a href="http://thoughtworksstudios.github.com/rake.ccn.html"><img src="http://ketan.padegaonkar.name/files/2010/07/rake.ccn_-300x186.png" alt="" width="300" height="186" class="size-medium wp-image-454" /></a><p class="wp-caption-text">Complexity Visualization of Rake</p></div>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Complexity+Visualization+for+Ruby&amp;link=http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html&amp;notes=%0D%0A%0D%0AImage%20from%20http%3A%2F%2Fwww.osnews.com%2Fstory%2F19266%2FWTFs_m%0D%0A%0D%0AWTF%20implies%20lack%20of%20clarity.%20Clear%20code%20is%20easier%20to%20understand%2C%20easier%20to%20maintain%20and%20easier%20to%20extend.%0D%0A%0D%0AAnnouncing%20saikuro_treemap%20--%20an%20easy%20to%20setup%20tool%20to%20generate%20complexity%20treemaps%20of%20ruby%20code.%0D%0A%0D%0ASee%20a%20demo%20for%20yourself.%0D%0A%0D%0A%0D%0A&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Complexity+Visualization+for+Ruby&amp;link=http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html&amp;notes=%0D%0A%0D%0AImage%20from%20http%3A%2F%2Fwww.osnews.com%2Fstory%2F19266%2FWTFs_m%0D%0A%0D%0AWTF%20implies%20lack%20of%20clarity.%20Clear%20code%20is%20easier%20to%20understand%2C%20easier%20to%20maintain%20and%20easier%20to%20extend.%0D%0A%0D%0AAnnouncing%20saikuro_treemap%20--%20an%20easy%20to%20setup%20tool%20to%20generate%20complexity%20treemaps%20of%20ruby%20code.%0D%0A%0D%0ASee%20a%20demo%20for%20yourself.%0D%0A%0D%0A%0D%0A&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Complexity+Visualization+for+Ruby&amp;link=http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html&amp;notes=%0D%0A%0D%0AImage%20from%20http%3A%2F%2Fwww.osnews.com%2Fstory%2F19266%2FWTFs_m%0D%0A%0D%0AWTF%20implies%20lack%20of%20clarity.%20Clear%20code%20is%20easier%20to%20understand%2C%20easier%20to%20maintain%20and%20easier%20to%20extend.%0D%0A%0D%0AAnnouncing%20saikuro_treemap%20--%20an%20easy%20to%20setup%20tool%20to%20generate%20complexity%20treemaps%20of%20ruby%20code.%0D%0A%0D%0ASee%20a%20demo%20for%20yourself.%0D%0A%0D%0A%0D%0A&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Complexity+Visualization+for+Ruby&amp;link=http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html&amp;notes=%0D%0A%0D%0AImage%20from%20http%3A%2F%2Fwww.osnews.com%2Fstory%2F19266%2FWTFs_m%0D%0A%0D%0AWTF%20implies%20lack%20of%20clarity.%20Clear%20code%20is%20easier%20to%20understand%2C%20easier%20to%20maintain%20and%20easier%20to%20extend.%0D%0A%0D%0AAnnouncing%20saikuro_treemap%20--%20an%20easy%20to%20setup%20tool%20to%20generate%20complexity%20treemaps%20of%20ruby%20code.%0D%0A%0D%0ASee%20a%20demo%20for%20yourself.%0D%0A%0D%0A%0D%0A&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Complexity+Visualization+for+Ruby&amp;link=http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html&amp;notes=%0D%0A%0D%0AImage%20from%20http%3A%2F%2Fwww.osnews.com%2Fstory%2F19266%2FWTFs_m%0D%0A%0D%0AWTF%20implies%20lack%20of%20clarity.%20Clear%20code%20is%20easier%20to%20understand%2C%20easier%20to%20maintain%20and%20easier%20to%20extend.%0D%0A%0D%0AAnnouncing%20saikuro_treemap%20--%20an%20easy%20to%20setup%20tool%20to%20generate%20complexity%20treemaps%20of%20ruby%20code.%0D%0A%0D%0ASee%20a%20demo%20for%20yourself.%0D%0A%0D%0A%0D%0A&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/07/20/code-complexity-visualization-for-ruby.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An embedded interpreter for eclipse</title>
		<link>http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html</link>
		<comments>http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html#comments</comments>
		<pubDate>Fri, 28 May 2010 07:40:20 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[swtbot]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=428</guid>
		<description><![CDATA[As a java developer who is starting to use ruby and javascript for a lot of things lately &#8212; there is one thing I miss most. An embedded shell/interpreter for eclipse! An embedded console or an interpreter is a very powerful tool, it allows you to do some very interesting things with your software as [...]]]></description>
			<content:encoded><![CDATA[<p>As a java developer who is starting to use ruby and javascript for a lot of things lately &#8212; there is one thing I miss most. An embedded shell/interpreter for eclipse!</p>
<p>An embedded console or an interpreter is a very <a href="http://www.robbyonrails.com/articles/2005/08/18/are-you-a-console-master">powerful tool</a>, it allows you to do some very interesting things with your software as it is running, play around with it, tweak it and anything else you can ever imagine. All of this without the edit-save-compile-relaunch cycle.</p>
<p>Lately I&#8217;ve been working on an embedded console for eclipse. The primary motivation was to try out scripting approaches for <a href="http://eclipse.org/swtbot">SWTBot</a>. But I soon realized that I was using it for more than just scripting tests. I was using it to learn how eclipse works, try out different approaches to decide which one is best.</p>
<p>Some of the features include code completion, history lookup. This is possible using jruby&#8217;s objectspace and the readline support.</p>
<p>Here&#8217;s a small teaser video of what you can do with it an embedded jruby console for eclipse.</p>
<p><span id="more-428"></span></p>
<p>The update site url is here <a href="http://dl.swtbot.org/update-site">http://dl.swtbot.org/update-site</a></p>
<p>The example here uses SWTBot APIs. But there&#8217;s nothing stopping you from using anything else in any of your other plugins.</p>
<p>
<object width="1000" height="700">
<param name="movie" value="http://cdn.swtbot.org/swf/swt-console-demo.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="1000" height="700" src="http://cdn.swtbot.org/swf/swt-console-demo.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=An+embedded+interpreter+for+eclipse&amp;link=http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html&amp;notes=As%20a%20java%20developer%20who%20is%20starting%20to%20use%20ruby%20and%20javascript%20for%20a%20lot%20of%20things%20lately%20--%20there%20is%20one%20thing%20I%20miss%20most.%20An%20embedded%20shell%2Finterpreter%20for%20eclipse%21%0D%0A%0D%0AAn%20embedded%20console%20or%20an%20interpreter%20is%20a%20very%20powerful%20tool%2C%20it%20allows%20you%20to%20do%20some%20very%20interesting%20things%20with%20your%20softwar&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=An+embedded+interpreter+for+eclipse&amp;link=http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html&amp;notes=As%20a%20java%20developer%20who%20is%20starting%20to%20use%20ruby%20and%20javascript%20for%20a%20lot%20of%20things%20lately%20--%20there%20is%20one%20thing%20I%20miss%20most.%20An%20embedded%20shell%2Finterpreter%20for%20eclipse%21%0D%0A%0D%0AAn%20embedded%20console%20or%20an%20interpreter%20is%20a%20very%20powerful%20tool%2C%20it%20allows%20you%20to%20do%20some%20very%20interesting%20things%20with%20your%20softwar&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=An+embedded+interpreter+for+eclipse&amp;link=http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html&amp;notes=As%20a%20java%20developer%20who%20is%20starting%20to%20use%20ruby%20and%20javascript%20for%20a%20lot%20of%20things%20lately%20--%20there%20is%20one%20thing%20I%20miss%20most.%20An%20embedded%20shell%2Finterpreter%20for%20eclipse%21%0D%0A%0D%0AAn%20embedded%20console%20or%20an%20interpreter%20is%20a%20very%20powerful%20tool%2C%20it%20allows%20you%20to%20do%20some%20very%20interesting%20things%20with%20your%20softwar&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=An+embedded+interpreter+for+eclipse&amp;link=http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html&amp;notes=As%20a%20java%20developer%20who%20is%20starting%20to%20use%20ruby%20and%20javascript%20for%20a%20lot%20of%20things%20lately%20--%20there%20is%20one%20thing%20I%20miss%20most.%20An%20embedded%20shell%2Finterpreter%20for%20eclipse%21%0D%0A%0D%0AAn%20embedded%20console%20or%20an%20interpreter%20is%20a%20very%20powerful%20tool%2C%20it%20allows%20you%20to%20do%20some%20very%20interesting%20things%20with%20your%20softwar&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=An+embedded+interpreter+for+eclipse&amp;link=http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html&amp;notes=As%20a%20java%20developer%20who%20is%20starting%20to%20use%20ruby%20and%20javascript%20for%20a%20lot%20of%20things%20lately%20--%20there%20is%20one%20thing%20I%20miss%20most.%20An%20embedded%20shell%2Finterpreter%20for%20eclipse%21%0D%0A%0D%0AAn%20embedded%20console%20or%20an%20interpreter%20is%20a%20very%20powerful%20tool%2C%20it%20allows%20you%20to%20do%20some%20very%20interesting%20things%20with%20your%20softwar&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/05/28/an-embedded-interpreter-for-eclipse.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SWTBot and Eclipse 3.4 (Ganymede)</title>
		<link>http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html</link>
		<comments>http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html#comments</comments>
		<pubDate>Thu, 20 May 2010 14:42:11 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[swtbot]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=423</guid>
		<description><![CDATA[SWTBot has so been supporting Eclipse Ganymede since the last 2+ years before it moved to eclipse.org. Ganymede is now almost 2 years old and the last bug fix release was in Feb 2009. There has been a Galileo release of Eclipse in the Summer of 2009, and there is a new release Helios coming [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://eclipse.org/swtbot">SWTBot</a> has so been supporting Eclipse <a href="http://wiki.eclipse.org/Ganymede">Ganymede</a> since the last 2+ years before it moved to eclipse.org.</p>
<p>Ganymede is now almost 2 years old and the last bug fix release was in Feb 2009.</p>
<p>There has been a <a href="http://wiki.eclipse.org/Galileo">Galileo</a> release of Eclipse in the Summer of 2009, and there is a new release <a href="http://wiki.eclipse.org/Helios">Helios</a> coming up the horizon.</p>
<p>Given this situation, it is very difficult to continue to provide a light weight testing tool that works across 3 different versions of eclipse on 4 different platforms linux, windows and macosx(carbon/cocoa) while backporting APIs that only work on newer eclipse versions.</p>
<p>In light of this, I&#8217;m considering dropping support for eclipse 3.4 for future releases. I&#8217;m happy to assist anyone wanting to contribute efforts towards maintaining a release of SWTBot for Ganymede.</p>
<p>The v2.0.0.568 of SWTBot made last night would be the last that supports Ganymede.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+and+Eclipse+3.4+%28Ganymede%29&amp;link=http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html&amp;notes=SWTBot%20has%20so%20been%20supporting%20Eclipse%20Ganymede%20since%20the%20last%202%2B%20years%20before%20it%20moved%20to%20eclipse.org.%0D%0A%0D%0AGanymede%20is%20now%20almost%202%20years%20old%20and%20the%20last%20bug%20fix%20release%20was%20in%20Feb%202009.%0D%0A%0D%0AThere%20has%20been%20a%20Galileo%20release%20of%20Eclipse%20in%20the%20Summer%20of%202009%2C%20and%20there%20is%20a%20new%20release%20Helios%20coming%20up&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+and+Eclipse+3.4+%28Ganymede%29&amp;link=http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html&amp;notes=SWTBot%20has%20so%20been%20supporting%20Eclipse%20Ganymede%20since%20the%20last%202%2B%20years%20before%20it%20moved%20to%20eclipse.org.%0D%0A%0D%0AGanymede%20is%20now%20almost%202%20years%20old%20and%20the%20last%20bug%20fix%20release%20was%20in%20Feb%202009.%0D%0A%0D%0AThere%20has%20been%20a%20Galileo%20release%20of%20Eclipse%20in%20the%20Summer%20of%202009%2C%20and%20there%20is%20a%20new%20release%20Helios%20coming%20up&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+and+Eclipse+3.4+%28Ganymede%29&amp;link=http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html&amp;notes=SWTBot%20has%20so%20been%20supporting%20Eclipse%20Ganymede%20since%20the%20last%202%2B%20years%20before%20it%20moved%20to%20eclipse.org.%0D%0A%0D%0AGanymede%20is%20now%20almost%202%20years%20old%20and%20the%20last%20bug%20fix%20release%20was%20in%20Feb%202009.%0D%0A%0D%0AThere%20has%20been%20a%20Galileo%20release%20of%20Eclipse%20in%20the%20Summer%20of%202009%2C%20and%20there%20is%20a%20new%20release%20Helios%20coming%20up&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+and+Eclipse+3.4+%28Ganymede%29&amp;link=http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html&amp;notes=SWTBot%20has%20so%20been%20supporting%20Eclipse%20Ganymede%20since%20the%20last%202%2B%20years%20before%20it%20moved%20to%20eclipse.org.%0D%0A%0D%0AGanymede%20is%20now%20almost%202%20years%20old%20and%20the%20last%20bug%20fix%20release%20was%20in%20Feb%202009.%0D%0A%0D%0AThere%20has%20been%20a%20Galileo%20release%20of%20Eclipse%20in%20the%20Summer%20of%202009%2C%20and%20there%20is%20a%20new%20release%20Helios%20coming%20up&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=SWTBot+and+Eclipse+3.4+%28Ganymede%29&amp;link=http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html&amp;notes=SWTBot%20has%20so%20been%20supporting%20Eclipse%20Ganymede%20since%20the%20last%202%2B%20years%20before%20it%20moved%20to%20eclipse.org.%0D%0A%0D%0AGanymede%20is%20now%20almost%202%20years%20old%20and%20the%20last%20bug%20fix%20release%20was%20in%20Feb%202009.%0D%0A%0D%0AThere%20has%20been%20a%20Galileo%20release%20of%20Eclipse%20in%20the%20Summer%20of%202009%2C%20and%20there%20is%20a%20new%20release%20Helios%20coming%20up&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/05/20/swtbot-and-eclipse-3-4-ganymede.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Know your users&#8217; brains</title>
		<link>http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html</link>
		<comments>http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html#comments</comments>
		<pubDate>Sat, 10 Apr 2010 19:55:24 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[swtbot]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=413</guid>
		<description><![CDATA[It is important to know who your users are when you are in the business of building anything. Building things is expensive. Software or otherwise. My mom would rather use a mac over a gentoo. A systems admin would rather use redhat over a mac on a production machine. It is also important to say [...]]]></description>
			<content:encoded><![CDATA[<p>It is important to know who your users are when you are in the business of building anything. Building things is expensive. Software or otherwise.</p>
<p>My mom would rather use a mac over a gentoo. A systems admin would rather use redhat over a mac on a production machine.</p>
<p>It is also important to say &#8220;NO&#8221; to people who are not your users. Almost all software at eclipse.org are frameworks, tools and app servers written primarily for developers.</p>
<p>The way software and API is designed for the developer is different from how it&#8217;s developed for the non-developer (most of the times). <a href="http://eclipse.org/swtbot">SWTBot</a> was originally and still is primarily a test-automation tool for use by QAs to automate test cases. The APIs are designed to be extremely intuitive, simple and easy to extend by QAs by merely looking at examples and not having to read API documentation.</p>
<p>Some context is in order if you haven&#8217;t had the opportunity to work closely with QAs before. Most QAs I&#8217;ve met understand customer requirements, understand the software and what the customers want out of it. I like to treat them as end users of the <del datetime="2010-04-10T14:36:15+00:00">buggy</del> software I build. They may not understand SWT threading, the eclipse ui and platform, OSGi and how TCP packets travel across the corporate firewall over to a load distributor in front of a cloud hosted at a datacenter on the other side of the continent. Try explaining a &#8220;org.eclipse.swt.SWTException: <a href="http://www.eclipse.org/swt/faq.php#uithread">Invalid thread</a> access&#8221; to a QA and you&#8217;ll get interesting looks.</p>
<p>QAs are good at finding bugs in whatever software they are testing. Testing all of the software is <a href="http://wiki.eclipse.org/WTP_Smoke_Test_Scenarios_R30">time consuming</a>, not to mention testing <a href="http://wiki.eclipse.org/WTP_Compatibility_Tests">backward compatibility</a> with older software. Nobody likes clicking around the same navigation path in the UI all the time. </p>
<p>QAs like exploring interesting ways to use the software and ensure that it works consistently as software evolves over time. The traditional favorites have been the &#8216;heavy weight&#8217; automation tools like HP&#8217;s QTP, IBM&#8217;s Rational Robot, Borland&#8217;s SilkTest and the open source &#8216;light weight&#8217; tools like selenium, sahi, and a lot others.</p>
<p>Each of these tools has its advantages and disadvantages. One of the most powerful features of each of these toolchains is the ability to author scripts in a dynamic language. The commercial vendors use vbscript or some other variant of the language, and provide some forms of integration with defect tracking tools. The open source tools are primarily light weight, use the languages like javascript, ruby, python and don&#8217;t integrate much with anything but your IDE and things like <a href="http://ant.apache.org/">ant</a> or <a href="http://rake.rubyforge.org/">rake</a>.</p>
<p>The end goal is to make SWTBot an extremely good, open source, light weight tool for QAs to automate tests, and be just about useful for developers to write simple test cases with and not something <a href="http://theoatmeal.com/comics/design_hell">in between</a> that neither of them like.</p>
<p>As part of evolving SWTBot APIs we need to ensure that we stay true to our goal. This sometimes means saying NO to feature requests and even patches from developers if it hurts the non-developers.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Know+your+users%27+brains&amp;link=http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html&amp;notes=It%20is%20important%20to%20know%20who%20your%20users%20are%20when%20you%20are%20in%20the%20business%20of%20building%20anything.%20Building%20things%20is%20expensive.%20Software%20or%20otherwise.%0D%0A%0D%0AMy%20mom%20would%20rather%20use%20a%20mac%20over%20a%20gentoo.%20A%20systems%20admin%20would%20rather%20use%20redhat%20over%20a%20mac%20on%20a%20production%20machine.%0D%0A%0D%0AIt%20is%20also%20important%20to%20sa&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Know+your+users%27+brains&amp;link=http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html&amp;notes=It%20is%20important%20to%20know%20who%20your%20users%20are%20when%20you%20are%20in%20the%20business%20of%20building%20anything.%20Building%20things%20is%20expensive.%20Software%20or%20otherwise.%0D%0A%0D%0AMy%20mom%20would%20rather%20use%20a%20mac%20over%20a%20gentoo.%20A%20systems%20admin%20would%20rather%20use%20redhat%20over%20a%20mac%20on%20a%20production%20machine.%0D%0A%0D%0AIt%20is%20also%20important%20to%20sa&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Know+your+users%27+brains&amp;link=http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html&amp;notes=It%20is%20important%20to%20know%20who%20your%20users%20are%20when%20you%20are%20in%20the%20business%20of%20building%20anything.%20Building%20things%20is%20expensive.%20Software%20or%20otherwise.%0D%0A%0D%0AMy%20mom%20would%20rather%20use%20a%20mac%20over%20a%20gentoo.%20A%20systems%20admin%20would%20rather%20use%20redhat%20over%20a%20mac%20on%20a%20production%20machine.%0D%0A%0D%0AIt%20is%20also%20important%20to%20sa&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=Know+your+users%27+brains&amp;link=http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html&amp;notes=It%20is%20important%20to%20know%20who%20your%20users%20are%20when%20you%20are%20in%20the%20business%20of%20building%20anything.%20Building%20things%20is%20expensive.%20Software%20or%20otherwise.%0D%0A%0D%0AMy%20mom%20would%20rather%20use%20a%20mac%20over%20a%20gentoo.%20A%20systems%20admin%20would%20rather%20use%20redhat%20over%20a%20mac%20on%20a%20production%20machine.%0D%0A%0D%0AIt%20is%20also%20important%20to%20sa&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Know+your+users%27+brains&amp;link=http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html&amp;notes=It%20is%20important%20to%20know%20who%20your%20users%20are%20when%20you%20are%20in%20the%20business%20of%20building%20anything.%20Building%20things%20is%20expensive.%20Software%20or%20otherwise.%0D%0A%0D%0AMy%20mom%20would%20rather%20use%20a%20mac%20over%20a%20gentoo.%20A%20systems%20admin%20would%20rather%20use%20redhat%20over%20a%20mac%20on%20a%20production%20machine.%0D%0A%0D%0AIt%20is%20also%20important%20to%20sa&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2010/04/11/know-your-users-brains.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Tell, Don&#8217;t Ask &#8211; Part 2</title>
		<link>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html</link>
		<comments>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html#comments</comments>
		<pubDate>Fri, 04 Sep 2009 02:46:42 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[clean-code]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[mocks]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=404</guid>
		<description><![CDATA[Objects exposing behavior, not state Controlling complexity of your codebase by limiting what state your objects expose The more objects that can see and change states on other objects, the more complex your system. Objects returning a boolean mean that someone calling that method will use an if branch, returning an integer would mean someone [...]]]></description>
			<content:encoded><![CDATA[<h2>Objects exposing behavior, not state</h2>
<h3>Controlling complexity of your codebase by limiting what state your objects expose</h3>
<p>The more objects that can see and change states on other objects, the more complex your system. Objects returning a boolean mean that someone calling that method will use an if branch, returning an integer would mean someone using if/else or switch/case. Returning objects would mean introspeting that returned object to invoke something else on it. This increases coupling between classes, makes code hard to read and test.</p>
<h3>My class has 3 friends, I talk to my friends&#8217; friends. My friends are difficult to mock, therefore mocking sucks&#8230;</h3>
<p>&#8230; well, yeah!</p>
<p>Testing procedural code is hard. Testing such code generally involves setting up &#8220;data&#8221; and asserting on state of objects. <a href="http://www.c2.com/cgi/wiki?TellDontAsk">Tell Don&#8217;t Ask</a> code on the other hand is easier to test since you&#8217;re not testing state. Also notice how DI makes things simpler to test.</p>
<pre>
void testOwnerCanFeedDog(){
    Dog dog = new Dog();
    // have to create a mouth since owner calls dog.getMouth() to feed it
    Mouth mouth = new Mouth();
    dog.setMouth(mouth);
    PetOwner owner = new PetOwner();
    owner.setDog(dog);
    owner.feedDog(food);

    // verify that the dog gets the food (well the mouth, actually)
    assertEquals(food, mouth.getFood());
}
</pre>
<pre>
void testOwnerCanFeedDog(){
    Dog dog = mock(Dog.class);
    PetOwner owner = new PetOwner(dog);
    owner.feed(food);

    // verify that the dog gets the food
    verify(dog).feed(food);
}
</pre>
<p>Without <a href="http://martinfowler.com/articles/injection.html">Dependency Injection</a>, testing is quite difficult; without <a href="http://www.c2.com/cgi/wiki?TellDontAsk">Tell Don&#8217;t Ask</a>, testing is almost always impossible. Put together, things are separated, testing is simplified.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+2&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html&amp;notes=Objects%20exposing%20behavior%2C%20not%20state%0D%0A%0D%0AControlling%20complexity%20of%20your%20codebase%20by%20limiting%20what%20state%20your%20objects%20expose%0D%0A%0D%0AThe%20more%20objects%20that%20can%20see%20and%20change%20states%20on%20other%20objects%2C%20the%20more%20complex%20your%20system.%20Objects%20returning%20a%20boolean%20mean%20that%20someone%20calling%20that%20method%20will%20use%20an%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+2&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html&amp;notes=Objects%20exposing%20behavior%2C%20not%20state%0D%0A%0D%0AControlling%20complexity%20of%20your%20codebase%20by%20limiting%20what%20state%20your%20objects%20expose%0D%0A%0D%0AThe%20more%20objects%20that%20can%20see%20and%20change%20states%20on%20other%20objects%2C%20the%20more%20complex%20your%20system.%20Objects%20returning%20a%20boolean%20mean%20that%20someone%20calling%20that%20method%20will%20use%20an%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+2&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html&amp;notes=Objects%20exposing%20behavior%2C%20not%20state%0D%0A%0D%0AControlling%20complexity%20of%20your%20codebase%20by%20limiting%20what%20state%20your%20objects%20expose%0D%0A%0D%0AThe%20more%20objects%20that%20can%20see%20and%20change%20states%20on%20other%20objects%2C%20the%20more%20complex%20your%20system.%20Objects%20returning%20a%20boolean%20mean%20that%20someone%20calling%20that%20method%20will%20use%20an%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+2&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html&amp;notes=Objects%20exposing%20behavior%2C%20not%20state%0D%0A%0D%0AControlling%20complexity%20of%20your%20codebase%20by%20limiting%20what%20state%20your%20objects%20expose%0D%0A%0D%0AThe%20more%20objects%20that%20can%20see%20and%20change%20states%20on%20other%20objects%2C%20the%20more%20complex%20your%20system.%20Objects%20returning%20a%20boolean%20mean%20that%20someone%20calling%20that%20method%20will%20use%20an%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+2&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html&amp;notes=Objects%20exposing%20behavior%2C%20not%20state%0D%0A%0D%0AControlling%20complexity%20of%20your%20codebase%20by%20limiting%20what%20state%20your%20objects%20expose%0D%0A%0D%0AThe%20more%20objects%20that%20can%20see%20and%20change%20states%20on%20other%20objects%2C%20the%20more%20complex%20your%20system.%20Objects%20returning%20a%20boolean%20mean%20that%20someone%20calling%20that%20method%20will%20use%20an%20&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tell, Don&#8217;t Ask &#8211; Part 1</title>
		<link>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html</link>
		<comments>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html#comments</comments>
		<pubDate>Fri, 04 Sep 2009 02:40:41 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[clean-code]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[mocks]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=371</guid>
		<description><![CDATA[I spend more time reading code than writing it. I therefore like code that is readable. Rarely do I like to read code that is verbose and does too much orchestration in order to do something that is orthognal to what I&#8217;m looking for. Code is easier to read and maintain when objects are written [...]]]></description>
			<content:encoded><![CDATA[<p>I spend more time reading code than writing it. I therefore like code that is readable. Rarely do I like to read code that is verbose and does too much orchestration in order to do something that is orthognal to what I&#8217;m looking for.</p>
<p>Code is easier to read and maintain when objects are written in a <a href="http://www.c2.com/cgi/wiki?TellDontAsk">Tell Don&#8217;t Ask</a>.</p>
<p>&#8220;Tell, Don&#8217;t Ask&#8221; is a style of programming where anObject tells anotherObject to doSomething(), rather than asking anotherObject to getSomeValue() and then makeADecision().</p>
<p>Code that does violates this this is more procedural than it is object oriented. In the procedural world code is written to fetch some data (or state) and then make a decision or perform some action. Procedural programming &#8220;pulls data&#8221; into the logic to get things done.</p>
<p>In object oriented programming, we do the opposite &#8212; have objects do something for you instead of you doing it yourself. Don&#8217;t overdo this too much, someone still has to do the real work though <img src='http://ketan.padegaonkar.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Identifying places where you may tell instead of ask:</p>
<pre>
class PetOwner{
    void feedDog(Food food){
        if(getDog().isHungry()){
            dog.getMouth().putFood(food);
        }
    }
}
</pre>
<p>This can instead be written as:</p>
<pre>
class PetOwner{
    void feedDog(Food food){
        dog.feed(food);
    }
}

class Dog{
    void feed(Food food){
        if (iAmHungry()){
            // consume food
        }
    }
}
</pre>
<p>Notice how the PetOwner does not know (or care to know) about the fact that the dog has a mouth.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+1&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html&amp;notes=I%20spend%20more%20time%20reading%20code%20than%20writing%20it.%20I%20therefore%20like%20code%20that%20is%20readable.%20Rarely%20do%20I%20like%20to%20read%20code%20that%20is%20verbose%20and%20does%20too%20much%20orchestration%20in%20order%20to%20do%20something%20that%20is%20orthognal%20to%20what%20I%27m%20looking%20for.%0D%0A%0D%0ACode%20is%20easier%20to%20read%20and%20maintain%20when%20objects%20are%20written%20in&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+1&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html&amp;notes=I%20spend%20more%20time%20reading%20code%20than%20writing%20it.%20I%20therefore%20like%20code%20that%20is%20readable.%20Rarely%20do%20I%20like%20to%20read%20code%20that%20is%20verbose%20and%20does%20too%20much%20orchestration%20in%20order%20to%20do%20something%20that%20is%20orthognal%20to%20what%20I%27m%20looking%20for.%0D%0A%0D%0ACode%20is%20easier%20to%20read%20and%20maintain%20when%20objects%20are%20written%20in&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+1&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html&amp;notes=I%20spend%20more%20time%20reading%20code%20than%20writing%20it.%20I%20therefore%20like%20code%20that%20is%20readable.%20Rarely%20do%20I%20like%20to%20read%20code%20that%20is%20verbose%20and%20does%20too%20much%20orchestration%20in%20order%20to%20do%20something%20that%20is%20orthognal%20to%20what%20I%27m%20looking%20for.%0D%0A%0D%0ACode%20is%20easier%20to%20read%20and%20maintain%20when%20objects%20are%20written%20in&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+1&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html&amp;notes=I%20spend%20more%20time%20reading%20code%20than%20writing%20it.%20I%20therefore%20like%20code%20that%20is%20readable.%20Rarely%20do%20I%20like%20to%20read%20code%20that%20is%20verbose%20and%20does%20too%20much%20orchestration%20in%20order%20to%20do%20something%20that%20is%20orthognal%20to%20what%20I%27m%20looking%20for.%0D%0A%0D%0ACode%20is%20easier%20to%20read%20and%20maintain%20when%20objects%20are%20written%20in&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Tell%2C+Don%27t+Ask+-+Part+1&amp;link=http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html&amp;notes=I%20spend%20more%20time%20reading%20code%20than%20writing%20it.%20I%20therefore%20like%20code%20that%20is%20readable.%20Rarely%20do%20I%20like%20to%20read%20code%20that%20is%20verbose%20and%20does%20too%20much%20orchestration%20in%20order%20to%20do%20something%20that%20is%20orthognal%20to%20what%20I%27m%20looking%20for.%0D%0A%0D%0ACode%20is%20easier%20to%20read%20and%20maintain%20when%20objects%20are%20written%20in&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Code Coverage And Functional Tests</title>
		<link>http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html</link>
		<comments>http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html#comments</comments>
		<pubDate>Wed, 26 Aug 2009 04:04:03 +0000</pubDate>
		<dc:creator>Ketan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[code coverage]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[functional testing]]></category>

		<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=390</guid>
		<description><![CDATA[I am often asked this rather perilous question: How do I view code coverage for my functional tests? Short answer: Here&#8217;s how&#8230;. However, use it only for figuring out what functionality is not covered, not as a workaround for not having enough unit and integrations. Having to use functional tests to determine percentage of code [...]]]></description>
			<content:encoded><![CDATA[<p>I am often asked this rather perilous question:</p>
<blockquote><p>How do I view code coverage for my functional tests?</p></blockquote>
<p>Short answer:</p>
<blockquote><p>Here&#8217;s how&#8230;. However, use it only for figuring out what functionality is not covered, not as a workaround for not having enough unit and integrations.</p></blockquote>
<p>Having to use functional tests to determine percentage of code coverage is IMO a bad smell, avoid as much as possible.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Coverage+And+Functional+Tests&amp;link=http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html&amp;notes=I%20am%20often%20asked%20this%20rather%20perilous%20question%3A%0D%0A%0D%0AHow%20do%20I%20view%20code%20coverage%20for%20my%20functional%20tests%3F%0D%0A%0D%0AShort%20answer%3A%0D%0A%0D%0AHere%27s%20how....%20However%2C%20use%20it%20only%20for%20figuring%20out%20what%20functionality%20is%20not%20covered%2C%20not%20as%20a%20workaround%20for%20not%20having%20enough%20unit%20and%20integrations.%0D%0A%0D%0AHaving%20to%20use%20functi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Coverage+And+Functional+Tests&amp;link=http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html&amp;notes=I%20am%20often%20asked%20this%20rather%20perilous%20question%3A%0D%0A%0D%0AHow%20do%20I%20view%20code%20coverage%20for%20my%20functional%20tests%3F%0D%0A%0D%0AShort%20answer%3A%0D%0A%0D%0AHere%27s%20how....%20However%2C%20use%20it%20only%20for%20figuring%20out%20what%20functionality%20is%20not%20covered%2C%20not%20as%20a%20workaround%20for%20not%20having%20enough%20unit%20and%20integrations.%0D%0A%0D%0AHaving%20to%20use%20functi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Coverage+And+Functional+Tests&amp;link=http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html&amp;notes=I%20am%20often%20asked%20this%20rather%20perilous%20question%3A%0D%0A%0D%0AHow%20do%20I%20view%20code%20coverage%20for%20my%20functional%20tests%3F%0D%0A%0D%0AShort%20answer%3A%0D%0A%0D%0AHere%27s%20how....%20However%2C%20use%20it%20only%20for%20figuring%20out%20what%20functionality%20is%20not%20covered%2C%20not%20as%20a%20workaround%20for%20not%20having%20enough%20unit%20and%20integrations.%0D%0A%0D%0AHaving%20to%20use%20functi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=RT+%40ketanpkr+%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Coverage+And+Functional+Tests&amp;link=http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html&amp;notes=I%20am%20often%20asked%20this%20rather%20perilous%20question%3A%0D%0A%0D%0AHow%20do%20I%20view%20code%20coverage%20for%20my%20functional%20tests%3F%0D%0A%0D%0AShort%20answer%3A%0D%0A%0D%0AHere%27s%20how....%20However%2C%20use%20it%20only%20for%20figuring%20out%20what%20functionality%20is%20not%20covered%2C%20not%20as%20a%20workaround%20for%20not%20having%20enough%20unit%20and%20integrations.%0D%0A%0D%0AHaving%20to%20use%20functi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=5&amp;tags=&amp;ctype=" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Code+Coverage+And+Functional+Tests&amp;link=http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html&amp;notes=I%20am%20often%20asked%20this%20rather%20perilous%20question%3A%0D%0A%0D%0AHow%20do%20I%20view%20code%20coverage%20for%20my%20functional%20tests%3F%0D%0A%0D%0AShort%20answer%3A%0D%0A%0D%0AHere%27s%20how....%20However%2C%20use%20it%20only%20for%20figuring%20out%20what%20functionality%20is%20not%20covered%2C%20not%20as%20a%20workaround%20for%20not%20having%20enough%20unit%20and%20integrations.%0D%0A%0D%0AHaving%20to%20use%20functi&amp;short_link=&amp;shortener=bitly&amp;shortener_key=&amp;v=1&amp;apitype=1&amp;apikey=8afa39428933be41f8afdb8ea21a495c&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
</ul><div style="clear: both;"></div><div class="shr-getshr" style="visibility:hidden;font-size:10px !important"><a target="_blank" href="http://www.shareaholic.com/?src=pub">Get Shareaholic</a></div><div style="clear: both;"></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

