<?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>Parijat's Weblog</title>
	<atom:link href="http://parijatmishra.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://parijatmishra.wordpress.com</link>
	<description>of cabbages and kings</description>
	<lastBuildDate>Sun, 16 Oct 2011 14:48:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='parijatmishra.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Parijat's Weblog</title>
		<link>http://parijatmishra.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://parijatmishra.wordpress.com/osd.xml" title="Parijat&#039;s Weblog" />
	<atom:link rel='hub' href='http://parijatmishra.wordpress.com/?pushpress=hub'/>
		<item>
		<title>1-year-old thinks a magazine is a broken iPad</title>
		<link>http://parijatmishra.wordpress.com/2011/10/16/1-year-old-thinks-a-magazine-is-a-broken-ipad/</link>
		<comments>http://parijatmishra.wordpress.com/2011/10/16/1-year-old-thinks-a-magazine-is-a-broken-ipad/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 14:48:09 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=237</guid>
		<description><![CDATA[Tagged: funny, technology, videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=237&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="text-align:center; display: block;"><a href="http://parijatmishra.wordpress.com/2011/10/16/1-year-old-thinks-a-magazine-is-a-broken-ipad/"><img src="http://img.youtube.com/vi/aXV-yaFmQNk/2.jpg" alt="" /></a></span></p>
<br /> Tagged: <a href='http://parijatmishra.wordpress.com/tag/funny/'>funny</a>, <a href='http://parijatmishra.wordpress.com/tag/technology/'>technology</a>, <a href='http://parijatmishra.wordpress.com/tag/videos/'>videos</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/237/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=237&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2011/10/16/1-year-old-thinks-a-magazine-is-a-broken-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/aXV-yaFmQNk/2.jpg" medium="image" />
	</item>
		<item>
		<title>MySQL and Index Woes</title>
		<link>http://parijatmishra.wordpress.com/2011/05/21/mysql-and-index-woes/</link>
		<comments>http://parijatmishra.wordpress.com/2011/05/21/mysql-and-index-woes/#comments</comments>
		<pubDate>Sat, 21 May 2011 07:52:06 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=230</guid>
		<description><![CDATA[I have often noticed that altering indexes on large tables in MySQL is a very time consuming process. I&#8217;d chalked it up to &#8220;just how things are&#8221; and account for that when doing database migrations. Possibly because I&#8217;d usually *add* an index on the table not drop it. But apparently there there is a design [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=230&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have often noticed that altering indexes on large tables in MySQL is a very time consuming process. I&#8217;d chalked it up to &#8220;just how things are&#8221; and account for that when doing database migrations.  Possibly because I&#8217;d usually *add* an index on the table not drop it.</p>
<p>But apparently there there is a design flaw in MySQL 5.0 and before with respect to how it handles indexes that caused dropping indexes on tables very slow, and also adding a new index on the table slower than it needed to be.  Gory details here: http://bugs.mysql.com/bug.php?id=2364</p>
<p>But in 5.1, at least dropping table ought to be near instantaneous.  Adding an index? Umm&#8230; it seemed the old behaviour was:</p>
<blockquote><p>
Given the same MyISAM table T having four indexes (ndx1,ndx2,ndx3,ndx4)<br />
and you want to &#8216;alter table T add index ndx5 (&#8230;);&#8217; here is exactly<br />
what happens (from: http://lists.mysql.com/mysql/202489)</p>
<p>1) MySQL copies T.MYD to a temp table, i.e., S.MYD and a zero byte S.MYI.<br />
2) MySQL does &#8216;alter table S add index ndx1 (&#8230;);<br />
3) MySQL does &#8216;alter table S add index ndx2 (&#8230;);<br />
4) MySQL does &#8216;alter table S add index ndx3 (&#8230;);<br />
5) MySQL does &#8216;alter table S add index ndx4 (&#8230;);<br />
6) MySQL does &#8216;alter table S add index ndx5 (&#8230;);<br />
7) MySQL deletes T.MYD and deletes T.MYI<br />
8) MySQL renames S.MYD to T.MYD, and renames S.MYI to T.MYI
</p></blockquote>
<p>Note that each of the &#8220;alter table&#8221; step involves copying the table to a temp table with no indexes, applying all existing indexes one by one, and then applying the new index&#8230;. so in the above case:</p>
<blockquote><p>In fact, for table T with no indexes and you want to add N indexes<br />
MySQL will copy the MYD N times<br />
MySQL will copy the MYI N times<br />
MySQL will run &#8216;alter table add index&#8217;  N(N+1)/2 times if adding an index<br />
MySQL will run &#8216;alter table drop index&#8217; N(N-1)/2 times if dropping an index</p></blockquote>
<p>So here is a better way to add indexes to a table:</p>
<blockquote><p>1) create table T1 like T;<br />
This creates an empty table T1 with indexes ndx1,ndx2,ndx3 and ndx4.<br />
2) alter table T1 drop index ndx3;<br />
This drops index ndx3 on the empty T1, which should be instantaneous.<br />
3) insert into T1 select * from T;<br />
This will populate table T and load all three(3) indexes for T1 in one pass.<br />
4) drop table table T;<br />
5) alter table T1 rename to T;</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=230&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2011/05/21/mysql-and-index-woes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>Starhub MaxOnline and speedtest.net</title>
		<link>http://parijatmishra.wordpress.com/2010/09/10/starhub-maxonline-and-speedtest-net/</link>
		<comments>http://parijatmishra.wordpress.com/2010/09/10/starhub-maxonline-and-speedtest-net/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 05:07:47 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=216</guid>
		<description><![CDATA[I have a Starhub MaxOnline Premium connection. Ostensible it provides a download speed of upto 30Mbps. I am happy to pay the extra price for the increased bandwidth.  But am I getting more bandwidth for muy money? How much more?

Last night, when I needed to quickly download something, though, it felt very slow.  Was it the site I was downloading from? Or was it starhub?  I connected to speedtest.net and foudn that my download speed was below 2Mbps! I did the test after bypassing my home router, of course. The download site could be slow. Speedtest.net might be slow. Or starhub could be slow (just for a little while)
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=216&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have a Starhub MaxOnline Premium connection. Ostensible it provides a download speed of upto 30Mbps. I am happy to pay the extra price for the increased bandwidth.  But am I getting more bandwidth for muy money? How much more?</p>
<p><span id="more-216"></span></p>
<p>Last night, when I needed to quickly download something, though, it felt very slow.  Was it the site I was downloading from? Or was it starhub?  I connected to speedtest.net and foudn that my download speed was below 2Mbps! I did the test after bypassing my home router, of course. The download site could be slow. Speedtest.net might be slow. Or starhub could be slow (just for a little while)</p>
<p>I did the test again morning and here is what I got:</p>
<p><img src="http://www.speedtest.net/result/947552105.png" alt="" /></p>
<p>Hmm.. not much improvement.  Where&#8217;s my 30Mbps, pal?</p>
<p>I am thinking of doing the test several times over the course of the week, and see whether I am really getting my money&#8217;s worth.  I will downgrade to a slower link and see what that gives me, as well, if the bandwidth does not improve soon. By the way, anyone know someone at Starhub who can give a firm answer about what &#8220;upto 30Mbps<br />
download speed&#8221; really means in practice?</p>
<p>The FCC in the US does not think it means anything:<br />
<a href="http://www.betanews.com/article/FCC-says-broadband-ISPs-routinely-exaggerate-connection-speeds/1282164659">Recently, there was a story about American ISPs exaggerating their connection speeds.</a>  The FCC plans to do it own verification of these claims, and introduce a new labeling format for connection speeds that might be closer to reality and also tell consumers more accurately what kind of speed they will see in practice. Perhaps Singapore&#8217;s IDA could some the same?</p>
<p><strong>2010-09-10 16:30 SGT</strong></p>
<p>2.96 Mbps:<br />
<img src="http://www.speedtest.net/result/947700924.png" /></p>
<p><strong>2010-09-11 00:25 SGT</strong><br />
2.16Mbps:<br />
<img src="http://www.speedtest.net/result/948155418.png" /></p>
<p>Much higher download speed of 10Mbps from server in Cyberjaya, Malaysia:<br />
<img src="http://www.speedtest.net/result/948158507.png" /></p>
<p><strong>2010-09-17 01:40am</strong></p>
<p>Repeating the same test from my desktop, connected via 1Gbps ethernet to the router:</p>
<p>Singapore: 16Mbps</p>
<p><img src="http://www.speedtest.net/result/955952194.png" /></p>
<p>CyberJaya: 15Mbps</p>
<p><img src="http://www.speedtest.net/result/955955780.png" /></p>
<p><strong>2010-09-17 23:16</strong></p>
<p>Singapore: 1.84Mbps</p>
<p><img src="http://www.speedtest.net/result/957109370.png" /></p>
<p>CyberJaya: 5.8Mbps</p>
<p><img src="http://www.speedtest.net/result/957112646.png" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=216&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/09/10/starhub-maxonline-and-speedtest-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>

		<media:content url="http://www.speedtest.net/result/947552105.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/947700924.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/948155418.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/948158507.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/955952194.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/955955780.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/957109370.png" medium="image" />

		<media:content url="http://www.speedtest.net/result/957112646.png" medium="image" />
	</item>
		<item>
		<title>Spring Java Config and ProxyFactoryBean</title>
		<link>http://parijatmishra.wordpress.com/2010/07/05/spring-java-config-and-proxyfactorybean/</link>
		<comments>http://parijatmishra.wordpress.com/2010/07/05/spring-java-config-and-proxyfactorybean/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 05:08:39 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=208</guid>
		<description><![CDATA[I really like spring remoting. I really like spring java config. Recently I had to marry the two. Here is how. I have a value-object: I have a service that produces Datum objects. The service interface is: and a sample implementation might be: Here is a client for the service: Now I want to run [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=208&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I really like <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html">spring remoting</a>. I really like spring <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java">java config</a>. Recently I had to marry the two. Here is how.</p>
<p>I have a value-object:</p>
<p><pre class="brush: java;">
public class Datum
        implements Serializable
    {
    private int id;
    private String name;

    public Datum(int id, String name)
        {
        this.id = id;
        this.name = name;
        }

    public int getId()
        {
        return id;
        }

    public String getName()
        {
        return name;
        }

    @Override
    public String toString()
        {
        return &quot;Datum{&quot; + &quot;id=&quot; + id + &quot;name=&quot; + name + '}';
        }

    }
</pre></p>
<p>I have a service that produces <code>Datum</code> objects.  The service interface is:</p>
<p><pre class="brush: java;">
public interface IDatumProducer
    {
    public Datum produce();
    }
</pre></p>
<p>and a sample implementation might be:</p>
<p><pre class="brush: java;">
public class RandomDatumProducerImpl
        implements IDatumProducer
    {
    private static final Logger log =
            LoggerFactory.getLogger(RandomDatumProducerImpl.class);

    private Random rnd = new Random(System.currentTimeMillis());

    @Override
    public Datum produce()
        {
        int i = rnd.nextInt();
        Datum datum = new Datum(i, String.valueOf(i));
        log.info(&quot;Produced {}&quot;, datum);
        return datum;
        }

    }
</pre></p>
<p>Here is a client for the service:</p>
<p><pre class="brush: java;">
public class DatumProducerClient
    {
    private static final Logger log =
            LoggerFactory.getLogger(DatumProducerClient.class);

    private final IDatumProducer producer;

    public DatumProducerClient(IDatumProducer producer)
        {
        this.producer = producer;
        }

    @PostConstruct
    public void init()
        {
        while (true)
            {
            try
                {
                Datum datum = producer.produce();
                log.info(&quot;Got {}&quot;, datum);
                Thread.sleep(1000L);
                }
            catch (InterruptedException ex)
                {
                log.error(&quot;Interrupted&quot;, ex);
                }
            }
        }
    }
</pre></p>
<p>Now I want to run the <code>DatumProducerClient</code> and the <code>IDatumProducer</code> on different machines. The client should connect remotely to the producer, invoke the <code>produce</code> method, and do its stuff.</p>
<p>We can expose the service easily using Spring.  The <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html#remoting-jms">spring remoting (JMS)</a> manual section gives the spring configuration XML to do this, but no example for doing this in Java Config. Turns out there is one small detail to take care of when using Java config.</p>
<p><strong>Producer (Server)</strong></p>
<p>Here is the application config for the producer side:</p>
<p><pre class="brush: java;">
@Configuration
public class ProducerConfig
    {

    @Bean
    public AbstractMessageListenerContainer messageListenerContainer()
        {
        SimpleMessageListenerContainer container =
                new SimpleMessageListenerContainer();
        container.setConnectionFactory(jmsConnectionFactory());
        container.setDestination(jmsQueue());
        container.setMessageListener(jmsInvokerServiceExporter());
        container.setConcurrentConsumers(3);
        return container;
        }

    @Bean
    public JmsInvokerServiceExporter jmsInvokerServiceExporter()
        {
        JmsInvokerServiceExporter serviceExporter =
                new JmsInvokerServiceExporter();
        serviceExporter.setService(datumProducer());
        serviceExporter.setServiceInterface(IDatumProducer.class);
        return serviceExporter;
        }

    @Bean
    public ConnectionFactory jmsConnectionFactory()
        {
        ActiveMQConnectionFactory baseConnectionFactory =
                new ActiveMQConnectionFactory();
        baseConnectionFactory.setBrokerURL(&quot;tcp://localhost:61616&quot;);
        return baseConnectionFactory;
        }

    @Bean
    public Queue jmsQueue()
        {
        ActiveMQQueue queue = new ActiveMQQueue(&quot;dataChannel&quot;);
        return queue;
        }

    @Bean
    public IDatumProducer datumProducer()
        {
        return new RandomDatumProducerImpl();
        }

    }
</pre></p>
<p>And here is a <code>main</code> method that kicks off our application.</p>
<p><pre class="brush: java;">
public class PublisherMain
    {
    public static void main(String[] args)
        {
        AnnotationConfigApplicationContext ctx =
                new AnnotationConfigApplicationContext(ProducerConfig.class);
        }
    }
</pre></p>
<p><strong>Consumer (Client)</strong></p>
<p>Here is how the consumer is wired up.</p>
<p><pre class="brush: java;">
@Configuration
public class ConsumerConfig
    {

    @Bean
    public DatumProducerClient datumProducerClient()
        {
        return new DatumProducerClient(datumProducer());
        }

    @Bean
    public IDatumProducer datumProducer()
        {
        // producerFactory.getObject() will return null if we don't define
        // it as a separate bean; if we copy over the code from
        // jmsInvokerProxyFactoryBean here, it won't work: the proxy won't
        // get &quot;enhanced&quot; by spring, and its getObject() method will always
        // return null.
        JmsInvokerProxyFactoryBean producerProxy = jmsInvokerProxyFactoryBean();
        return (IDatumProducer) producerProxy.getObject();
        }

    // We can't fold this code into datumProducer above
    // The proxy bean must be defined separately, otherwise spring won't get
    // a chance to enhance it.
    @Bean
    public JmsInvokerProxyFactoryBean jmsInvokerProxyFactoryBean()
        {
        JmsInvokerProxyFactoryBean producerProxy = new JmsInvokerProxyFactoryBean();
        producerProxy.setServiceInterface(IDatumProducer.class);
        producerProxy.setConnectionFactory(jmsConnectionFactory());
        producerProxy.setQueue(jmsQueue());
        return producerProxy;
        }

    @Bean
    public ConnectionFactory jmsConnectionFactory()
        {
        ActiveMQConnectionFactory baseConnectionFactory =
            new ActiveMQConnectionFactory();
        baseConnectionFactory.setBrokerURL(&quot;tcp://localhost:61616&quot;);
        return baseConnectionFactory;
        }

    @Bean
    public Queue jmsQueue()
        {
        ActiveMQQueue queue = new ActiveMQQueue(&quot;dataChannel&quot;);
        return queue;
        }
    }
</pre></p>
<p>and here is how the <code>main</code> method on the client side looks like:</p>
<p><pre class="brush: java;">
public class ConsumerMain
    {
    public static void main(String[] args)
        {
        AnnotationConfigApplicationContext ctx =
                new AnnotationConfigApplicationContext(ConsumerConfig.class);
        }
    }
</pre></p>
<p>The important bit to note here is that the <code>JmsInvokerProxyFactoryBean</code> is configured as a bean in its own right. This allows spring to &#8220;enhance&#8221; it at runtime to do all the proxying for us.  If this were not a separate bean, things would not work.  For e.g., the following code won&#8217;t work:</p>
<p><pre class="brush: java;">
// Wrong way to use a ProxyFactoryBean
    @Bean
    public IDatumProducer datumProducer()
        {
        JmsInvokerProxyFactoryBean producerProxy = new JmsInvokerProxyFactoryBean();
        producerProxy.setServiceInterface(IDatumProducer.class);
        producerProxy.setConnectionFactory(jmsConnectionFactory());
        producerProxy.setQueue(jmsQueue());
        return (IDatumProducer) producerProxy.getObject(); // Wrong: getObject always returns null
        }
</pre></p>
<p>That&#8217;s all!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=208&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/07/05/spring-java-config-and-proxyfactorybean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>Buttons that don&#8217;t look like buttons: a rant on usability</title>
		<link>http://parijatmishra.wordpress.com/2010/03/03/buttons-that-dont-look-like-buttons-a-rant-on-usability/</link>
		<comments>http://parijatmishra.wordpress.com/2010/03/03/buttons-that-dont-look-like-buttons-a-rant-on-usability/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 03:49:11 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=204</guid>
		<description><![CDATA[As part of work, I recently was installing and configuring an open source software. I was in a big hurry to get something done. This software was a helper program; it did something awfully nice and useful and which would make &#8220;disciplined&#8221; programmers jump with joy. But I was not jumping with joy. I had [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=204&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
As part of work, I recently was installing and configuring an open source<br />
software. I was in a big hurry to get something done.  This software was<br />
a helper program; it did something awfully nice and useful and which<br />
would make &#8220;disciplined&#8221; programmers jump with joy.  But I was not<br />
jumping with joy.  I had something to get done.  I needed this software,<br />
but I was not prepared to delve deeply into it.  I did not want to learn<br />
too much about it.  I just needed it to work, bare minimum, no fancy<br />
stuff, so that I could get on with writing <i>my</i> code.</p>
<p>
I suppose I was mentally prepared to fight the software.  If it actually<br />
was performing such a nice and useful function, it ought to be<br />
complicated and self-important. &#8220;Read my README&#8221;, I imagined it<br />
saying. &#8220;Then read the INSTALL.txt, and Getting Started, and then<br />
Adminstrator&#8217;s Guide&#8230;&#8221;.  I was hoping to wing it.  I&#8217;d try to start<br />
it, see what broke, try to configure that, see what else broke, try to<br />
fix that, and so on until I won and the software lost the game of<br />
Yet-Another-Installation-Nightmare.</p>
<p>
My fears turned out to be grounless.<br />
Installing it was a breeze.  One just unpacked the<br />
software and ran a start script.  All dependencies were already included<br />
so I did not have to hunt down any.  It just started up, presenting a<br />
web-based management UI.  It was already configured with sensible<br />
defaults to get a new user up to speed quickly. Wow!</p>
<p>
My next step was to create a user account.  I brought up the web<br />
management console in firefox.  I clicked on the &#8220;Users&#8221; link, and was<br />
presented with a list of existing user accounts. <i>I could not see how<br />
to create a new user</i>. I could see how to attach users to roles, I<br />
could see how to search for users using their name, role, email etc.<br />
But for the life of me I could not figure out how to <i>create</i> a new<br />
user account.</p>
<p>
When I was just about to admit defeat and turn to the &#8220;User Manual&#8221;, the<br />
answer jumped out of the page and smacked me in the forehead.  <i>There it<br />
was, clear as day, a button labeled &#8220;Create New User&#8221;<i>. I had been<br />
staring at various links and trying everything on that page, expecting<br />
that this step would be as easy as the install part was, and getting<br />
slightly annoyed that it wasn&#8217;t.  I had been clicking at everything but<br />
this button.  In fact, I had given this button a good long stare and<br />
looked <i>around it</i> to find a link that I could click.</p>
<p>
Had my brain suddenly turned into putty?  What is so hard about clicking<br />
a dar***d button?</p>
<p>
There is nothing hard about clicking a button.  Except that the button<br />
in question did not <i>look like a button</i>.  The button looked like a<br />
flat, light gray box.  When I hovered the mouse over the box, the cursor<br />
did not change into something that indicated &#8220;click me&#8221;.  Basically,<br />
someone had gone <i>out of their way</i> to create a CSS style that made<br />
the button <i>obscure</i>.</p>
<p>
Why?</p>
<p>
Because it looked &#8220;better&#8221;? Because it was there to be styled?  Just<br />
because?  Beats me.  The point is that this beautifully useful and easy<br />
to setup software had a GUI blooper right there in the management<br />
console on one of the most commonly used functions.  In other words,<br />
this very useful software, which was insanely great in so many other<br />
ways, had a <i>usability issue<i>.</p>
<p>
Same day. Another web page.  This was a commercial web site that served<br />
up search results arranged alphabetically.  There was a nice, helpful<br />
row of navigation links at the top, labeled &#8220;A&#8221;, &#8220;B&#8221;, and so one all the<br />
way to &#8220;Z&#8221;, to allow the user to see results starting with that lette.<br />
The letters were surrounded in a nice, colored box that became highlighted<br />
when your mouse hovered over the box.</p>
<p>
So I moused over to the box containing &#8220;P&#8221; and when it was highlighted,<br />
I clicked.</p>
<p>
Nothing happened.</p>
<p>
So I double-checked and found that while the box gets highlighted when<br />
your mouse hovered over it, only the letter itself was clickable, not<br />
the box.  The &#8220;target area&#8221; presented by the letter is significantly<br />
smalled than the box, forcing you to be precise about where you click.<br />
There might as well not have been any box.  In fact, the box was<br />
downright misleading.  It looked good.  But it lulled my busy brain into<br />
trying to click something that was not clickable.  Another <i>usability<br />
issue</i>.</p>
<p>
Usability has been on my mind recently.  (Gee, can you tell?).  It is<br />
amazing that there is so much software and so many websites out there<br />
with small, niggly usability issues that are sucking away seconds,<br />
minutes or hours of their users life as they grumpily are trying to get<br />
their jobs done.  It is sad, really.  The code is there.  It works.  But<br />
the path to executing that code is strewn with brambles and thickets of<br />
usability issues.</p>
<p>
Programmers need to pay attention to the usability of their UIs.  Most<br />
books, tutorials and manuals focus on making the UI look good, but few<br />
point out how to make the UI more usable.  Most people don&#8217;t read the UI<br />
design guidelines of the platform they are working on.  And there are<br />
probably no standard guidelines for designing for the web.  Web<br />
technologies are changing too fast anyway for any technology focused<br />
guidelines to remain relevant for long. The core principles are taught<br />
in the discipline of Interaction Design.  But I don&#8217;t think many people<br />
know what Interaction Designers do.  I myself didn&#8217;t until very<br />
recently.</p>
<p>
There really ought to be more interaction designers out there and they<br />
ought to have more work.  Programmers and managers should be paying<br />
attention to the usability of their software and its interface.</p>
<p>
But for now, I am too busy slapping together functionality to pay<br />
due attention to how it will end up getting used.  Oh, I think about<br />
this issue and try to do something about it, for sure.  I try to design<br />
the software, imagining the end user and his/her goals in mind.</p>
<p>
But that is not enough.  User interviews, mock-ups, usability testing<br />
are some of the tools that are involved in producing usable software.  I<br />
did not budget for it; I did not set up any time for it.  And I wonder<br />
if anyone would understand me if I told them I wanted to take a flight<br />
to meet our users (internal business folks) and do a usability testing.</p>
<p>
Or maybe they would.  One of these days, I am going to try.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/204/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=204&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/03/03/buttons-that-dont-look-like-buttons-a-rant-on-usability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>CPU consumption by idle JVM and how to reduce it</title>
		<link>http://parijatmishra.wordpress.com/2010/01/30/cpu-consumption-by-idle-jvm-and-how-to-reduce-it/</link>
		<comments>http://parijatmishra.wordpress.com/2010/01/30/cpu-consumption-by-idle-jvm-and-how-to-reduce-it/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 09:00:21 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/2010/01/30/cpu-consumption-by-idle-jvm-and-how-to-reduce-it/</guid>
		<description><![CDATA[http://blogs.sun.com/nickstephen/entry/java_why_does_my_jvm<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=202&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>http://blogs.sun.com/nickstephen/entry/java_why_does_my_jvm</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=202&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/01/30/cpu-consumption-by-idle-jvm-and-how-to-reduce-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>SaaS step-by-step</title>
		<link>http://parijatmishra.wordpress.com/2010/01/21/saas-step-by-step/</link>
		<comments>http://parijatmishra.wordpress.com/2010/01/21/saas-step-by-step/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 17:00:14 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[architecure]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/2010/01/21/saas-step-by-step/</guid>
		<description><![CDATA[A short and sweet article on JavaWorld (RoadMap to SaaS) discusses the steps involved in taking a run of the mill web-app and making it a distributed service oriented system. Not heavy on the details but IMHO presents the things an architect needs to be thinking about in a very compelling progression. So compelling, in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=199&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A short and sweet article on JavaWorld (<a href="http://java.dzone.com/articles/roadmap-saas?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29&amp;utm_content=Google+Reader">RoadMap to SaaS</a>) discusses the steps involved in taking a run of the mill web-app and making it a distributed service oriented system. Not heavy on the details but IMHO presents the things an architect needs to be thinking about in a very compelling progression.  So compelling, in fact, that I must have another look at it when I am more awake.</p>
<br /> Tagged: architecure, SOA <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/199/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=199&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/01/21/saas-step-by-step/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>How to choose when to start a project</title>
		<link>http://parijatmishra.wordpress.com/2010/01/10/how-to-choose-when-to-start-a-project/</link>
		<comments>http://parijatmishra.wordpress.com/2010/01/10/how-to-choose-when-to-start-a-project/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 18:30:21 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[project management]]></category>
		<category><![CDATA[forgetfulness]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=196</guid>
		<description><![CDATA[I have observed this happen several times: a development team or teams are busy working on several projects and are fully occupied. Suddenly management thinks of an attractive new project and want it to be done quickly. What happens next? What should happen next is: Remind themselves that change is necessary and good, but change [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=196&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have observed this happen several times: a development team or teams are busy working on several projects and are fully occupied. Suddenly management thinks of an attractive new project and want it to be done quickly.</p>
<p>What happens next?<br />
<span id="more-196"></span><br />
What should happen next is:</p>
<ol>
<li>Remind themselves that change is necessary and good, but change has to be <strong>managed</strong>, not random</li>
<li>Do some ball park cost-benefit estimate of the new project</li>
<li>Review the list of projects being executed and in the pipe-line</li>
<li>Decide whether (a) new resources should be hired for the new project; (b) some current project is not necessary or of lower value and delay or cancel it</li>
<li>If choosing to delay an on-going project, take into account that when a project is stopped and then re-started later it usually takes longer to do (ramp up time) and might also have lower quality (loss of momemtum/enthusiasm)</li>
<li>announce the decision to the existing members of the project?</li>
</ol>
<p>I think tends to forget an important bit. They might look at existing on-going projects as they are visible, especially those where the best resources are tied up. However, all to often management forgets about projects in the pipeline. So projects that were supposed to be done after the current ones finish never get their chance in the sunlight.</p>
<p>Resolution for new year: keep a list of projects to do, all the time, ready to whip out when talking about projects.</p>
<p>Resolution 2: I fear reminding people about processes will make people disliek me and sounds like a whiner; lose the fear.</p>
<br /> Tagged: forgetfulness <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=196&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/01/10/how-to-choose-when-to-start-a-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>SEMAT, Software Engineering, and the fashion industry</title>
		<link>http://parijatmishra.wordpress.com/2010/01/08/188/</link>
		<comments>http://parijatmishra.wordpress.com/2010/01/08/188/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 18:46:35 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[software engineering]]></category>
		<category><![CDATA[controversy]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=188</guid>
		<description><![CDATA[Apparently there is going to be a revolution in the software development world, backed by some very illustrious names in the industry. In the words of Ivar Jacobson, one of the people behind it: We are some people who have observed software engineering theory and practice of the past decades and have realized that it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=188&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Apparently there is going to be a revolution in the software development world, backed by some very illustrious names in the industry.  In the <a href="http://ivarblog.com/2009/12/18/semat-software-engineering-method-and-theory-a-call-for-action-3/">words of Ivar Jacobson</a>, one of the people behind it:</p>
<blockquote><p>We are some people who have observed software engineering theory and practice of the past decades and have realized that it is now time to revitalize this discipline. We have been quietly planning a “revolution”.</p></blockquote>
<p>And here is the &#8220;Call for Action&#8221; statement for this revolution (<a href="http://www.semat.org/bin/view">called SEMAT &#8212; Software Engineering Method and Theory</a>):</p>
<blockquote><p>Software engineering is gravely hampered today by immature practices. Specific problems include:</p>
<ul>
<li><strong>The prevalence of fads more typical of fashion industry than of an engineering discipline.</strong></li>
<li>The lack of a sound, widely accepted theoretical basis.</li>
<li>The huge number of methods and method variants, with differences little understood and artificially magnified.</li>
<li>The lack of credible experimental evaluation and validation.</li>
<li>The split between industry practice and academic research.</li>
</ul>
<p>We support a process to refound software engineering based on a solid theory, proven principles and best practices that:</p>
<ul>
<li>Include a kernel of widely-agreed elements, extensible for specific uses</li>
<li>Addresses both technology and people issues</li>
<li>Are supported by industry, academia, researchers and users</li>
<li>Support extension in the face of changing requirements and technology</li>
</ul>
</blockquote>
<p>The list of signatories to the &#8220;revolution&#8221; is quite impressive. See for your self on their web page. Sounds good? But not everyone agrees, as you can see <a href="http://catenary.wordpress.com/2009/11/29/against-semat/">on this blog</a>. The author of the blog has an issue with the very framing of the problem:</p>
<blockquote><p>But this is an entirely misguided movement. Let’s analyze the call for action, bit by bit. It begins:</p>
<blockquote><p><em>Software engineering</em> is gravely hampered today by immature practices. [...]</p></blockquote>
<p>[...]</p>
<p>Never mind that people in the community (most prominently Tom DeMarco) have spoken against this paradigm, or that software development has little to do with most established engineering disciplines: the people behind SEMAT have chosen to ignore these criticisms and move on.</p></blockquote>
<p>Fair enough. This critique reminds me of this <a href="http://www.bobbemer.com/DAVINCI.HTM">really old paper, called &#8220;Masterpiece Engineering&#8221;</a> that you might have heard of. Apparently, there were people doubting whether software development is really engineering even when the term was <a href="http://homepages.cs.ncl.ac.uk/brian.randell/NATO/NATOReports/index.html">first coined circa 1968</a>.</p>
<p>But what interests me is this statement by SEMAT:</p>
<blockquote><p><strong>The prevalence of fads more typical of fashion industry than of an engineering discipline.</strong></p></blockquote>
<p>So if Software Engineering is not engineering, could it be <em>fashion</em>? Let&#8217;s see. Here are my observations:</p>
<ul>
<li><strong>Formal study</strong>: (a) Electrical Engineer: formal degree required; (b) Software Engineer: formal degree not required; (c) Fashion Designer: formal degree not required</li>
<li><strong>Work</strong>: Engineers: work hard; (b) Software developers: work harder; (c) Fashion Designers: while they are apprentices, work their ass off; as soon as they &#8220;become&#8221; a designer, stop calling it work and start calling it art; the amount of work/art that needs to be done everyday is inversely proportional to how good you are considered</li>
<li><strong>Respect</strong>: (a) Electrical Engineer: gets some respect from the people who work for him, for his knowledge; gets respect from people he works for (the &#8220;business folks&#8221;) only if he can keep the cost low; (b) Software Engineer: gets no respect from anyone, including the janitor services, unless he accidentally makes some money from a dot.com IPO; (c) Fashion Designer: gets respected both by people who work for him, and people who he works for, directly proportional to how much he/she is exploiting them</li>
<li><strong>Fame</strong>: (a) Electrical Engineer: not famous, with rare exceptions of people who have managed to make something that has the astonishing capability of being really appealing to customers and their company&#8217;s marketing department at the same time; (b) Software Engineer: not famous as long as they are doing the right thing; you need to write a worm that brings down the &#8216;net to be famous and maybe not even then (c) Fashion Designer: often famous, especially if the product simultaneously manages to be feckless (you don&#8217;t know whether its a skirt or a bandanna) and useless (does not cover the body)</li>
<li><strong>Discipline</strong>: (a) Electrical Engineer: practices great discipline in work; (b) Software Engineer: is expected to work with discipline during office hours and continue to work with passion until midnight; (c) Fashion Designer: discipline is death!</li>
<li><strong>Creativity</strong>: (a) Electrical Engineer: as his experience grows, tries his hand at more creative things; (b) Software Engineer: to start with, because he does not know much yet, everyone around is too busy to teach, there is no training budget, and anyway the product has to ship by month end with no time to learn anything, <em>has to be creative by using the only tool he know to do everything</em>; only after gaining much experience can he stop being creative and actually do thing properly; (c) Fashion Designer: your creativity is defined to be inversely proportional to how many people can afford your clothes</li>
</ul>
<p>So, from the above, it is clear, fad or no fad, a Software Engineer&#8217;s life is nothing like a Fashion Designer&#8217;s.  It is also not like an Electrical Engineer&#8217;s.</p>
<p><strong>P.S.</strong>: while I have a Bachelors and Master degree in Electrical Engineering, and I have been developing software professionally for some time now, my profound knowledge of the fashion industry is gained entirely from the movie <em>The Devil Wears Prada</em>.</p>
<br /> Tagged: controversy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=188&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2010/01/08/188/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
		<item>
		<title>Monitoring, knowledge and teamwork</title>
		<link>http://parijatmishra.wordpress.com/2009/09/14/monitoring-knowledge-and-teamwork/</link>
		<comments>http://parijatmishra.wordpress.com/2009/09/14/monitoring-knowledge-and-teamwork/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 14:07:36 +0000</pubDate>
		<dc:creator>parijatmishra</dc:creator>
				<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://parijatmishra.wordpress.com/?p=178</guid>
		<description><![CDATA[Jeremy Zawodny, MySQL guru, tells a story about: One of the frustrating things about building and running backend infrastructure services is that things break sometimes — often in unexpected ways. And when they do, you can spend untold hours chasing down various ideas, most of which are dead ends, before eventually solving the problem. He [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=178&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Jeremy Zawodny, MySQL guru, tells a story about:</p>
<blockquote><p>One of the frustrating things about building and running backend infrastructure services is that things break sometimes — often in unexpected ways. And when they do, you can spend untold hours chasing down various ideas, most of which are dead ends, before eventually solving the problem.</p></blockquote>
<p>He starts with a curious MySQL login failure and ends up with IRQs and boot time kernel options.</p>
<p>Scary.</p>
<p>Read the story here: <a href="http://www.linux-mag.com/cache/7515/1.html">part I</a>, <a href="http://www.linux-mag.com/cache/7516/1.html">part 2</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/parijatmishra.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/parijatmishra.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/parijatmishra.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/parijatmishra.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/parijatmishra.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/parijatmishra.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/parijatmishra.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/parijatmishra.wordpress.com/178/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=parijatmishra.wordpress.com&amp;blog=3282491&amp;post=178&amp;subd=parijatmishra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://parijatmishra.wordpress.com/2009/09/14/monitoring-knowledge-and-teamwork/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3aba44539a78ea92373418456f090e3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pm</media:title>
		</media:content>
	</item>
	</channel>
</rss>
