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

<channel>
	<title>Welcome to GlobalLogic Blogs</title>
	<atom:link href="http://blogs.globallogic.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blogs.globallogic.com</link>
	<description>Exponential Innovation</description>
	<pubDate>Wed, 09 May 2012 07:41:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Merge replication &#8212; Points to be considered</title>
		<link>http://blogs.globallogic.com/merge-replication-2</link>
		<comments>http://blogs.globallogic.com/merge-replication-2#comments</comments>
		<pubDate>Fri, 20 Apr 2012 07:11:24 +0000</pubDate>
		<dc:creator>sunil.singh</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Limit concurrent merge agents]]></category>

		<category><![CDATA[Merge Replication]]></category>

		<category><![CDATA[MSmerge_contents]]></category>

		<category><![CDATA[Reindex system tables for merge replication]]></category>

		<category><![CDATA[snapshot.pre]]></category>

		<category><![CDATA[sp_addscriptexec]]></category>

		<category><![CDATA[sp_repladdcolumn]]></category>

		<category><![CDATA[Tips for merge replication]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2134</guid>
		<description><![CDATA[While setting up merge replication I came across different hurdles and read many articles/blogs to get around those situations. With this write up I have tried to consolidate some of the important points which can be taken care while setting up merge replication or while trouble shooting merge replication.
1. Make schema changes with sp_repladdcolumn and [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">While setting up merge replication I came across different hurdles and read many articles/blogs to get around those situations. With this write up I have tried to consolidate some of the important points which can be taken care while setting up merge replication or while trouble shooting merge replication.</p>
<p class="MsoNormal"><strong><span>1. Make schema changes with sp_repladdcolumn and sp_repldropcolumn</span></strong></p>
<p class="MsoNormal"><span>If you attempt to change an article that is published for merge replication, you will get an error message warning:</span></p>
<p class="MsoNormal"><em><span>ALTER TABLE DROP COLUMN failed because &#8216;columnName&#8217; is currently replicated.</span></em></p>
<p class="MsoNormal"><span>To make schema changes to existing merge replication topologies, use the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_repl3_0sku.asp"><span>sp_repladdcolumn</span></a> and <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_repl3_2l9q.asp"><span>sp_repldropcolumn</span></a> stored procedures.</span></p>
<p><strong><span>2. Re-index articles frequently</span></strong></p>
<p><span>If merge replication is setup using filters then make sure those filtered tables have proper indexing which makes queries fast and also those tables needs to be re-indexed frequently.</span></p>
<p><span>Also Re-index the MSmerge_contents,</span> <span>MSmerge_tombstone,</span> <span>MSmerge_genhistory</span> <span>and MSmerge_replinfo</span> <span>tables frequently to improve overall replication performance.</span></p>
<p class="MsoNormal"><strong><span>3. Execute commands on all Subscribers</span></strong></p>
<p class="MsoNormal"><span>You will often be asked to replicate a set of commands to all your Subscribers, such as dropping any article from publication does not drops from subscription. To do this, use <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_repl_6qzn.asp"><span>sp_addscriptexec</span></a> with Drop table command. This command will work on all Subscribers that you deployed via UNC subscriptions.</span></p>
<p class="MsoNormal"><strong><span>4. Use dynamic snapshots</span></strong></p>
<p class="MsoNormal"><span>If you are filtering subscriptions, you will notice that your subscription still contains all of the data, even data that is not part of its filter. For example, if you send a subscription to a sales agent for California, he will receive data for the entire country. To minimize the size of the snapshot, use dynamic snapshots, and your Subscriber will only contain the data that meets the filtering criteria.</span></p>
<p class="MsoNormal"><strong><span>5. Wrap your agents to restart on failure </span></strong></p>
<p class="MsoNormal"><span>A large number of merge agents will fail due to transitory reasons (such as locking, batch failures, network problems, etc.), and these transitory errors will clear the next time the agent runs. Set your merge agent to restart on failure by right clicking on your merge agent and selecting Agent Properties. Then select Steps and double click on step 3 (&#8221;Detect nonlogged agent shutdown&#8221;). Click the Advanced tab. Where you see &#8220;On success action,&#8221; select &#8220;Goto Step 1.&#8221; As in Figure.</span></p>
<p class="MsoNormal"><span><!--[if gte vml 1]&gt;                    &lt;![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal" style="center;"><span><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/wrapagent.jpeg"><img class="size-medium wp-image-2135 aligncenter" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/wrapagent.jpeg" alt="" width="348" height="203" /></a></span></p>
<p class="MsoNormal"><span>This way if your agent fails, it will restart. If it fails to do an abnormal event, it will not restart. You should collect the contents of <em>MSrepl_errors</em> on your Subscribers and evaluate them to discover exactly why they are failing.</span></p>
<p class="MsoNormal"><strong><span>6. Limit concurrent merge agents</span></strong></p>
<p class="MsoNormal"><span>For large numbers of Subscribers, you should limit the number of merge agents that can run concurrently. If you select this option, you must also set the StartQueueTimeout property to establish how long a merge agent will remain in a wait queue until other merge agents have completed processing. You may need to set this value to 60s or more from its default of 0 (which means it waits indefinitely). To limit the number of concurrent merge agents, right click on your Publisher and select Properties, click on the Subscriptions tab and check the &#8220;Limit the number of concurrent merge processes to the following&#8221; box. </span></p>
<p class="MsoNormal" style="center;"><span><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/limiting-concurrent-process.jpeg"><img class="size-medium wp-image-2136 aligncenter" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/limiting-concurrent-process-300x159.jpg" alt="" width="300" height="159" /></a></span></p>
<p class="MsoNormal"><strong>7</strong>.  <strong>Timeout issue while processing snapshot generation</strong>.</p>
<p class="MsoNormal">If there is huge data in any article which you are trying to synchronize without any filter then system timeout if synchronization time exceeds 5 minutes. Merge agent profile run on default setting which has default query timeout as 300 seconds. In such scenario this time needs to be increased to avoid timeout.</p>
<p class="MsoNormal"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><!--[endif]--></p>
<p class="MsoNormal" style="center;"><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/agentprofile.jpg"><img class="size-medium wp-image-2137 aligncenter" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/agentprofile-300x98.jpg" alt="" width="300" height="98" /></a></p>
<p><strong><span>8. Snapshot.pre could not be propagated to subscriber while synchronization</span></strong></p>
<p><span>There are situation when any new articles are added to existing publication then snapshot gets generated successfully but subscription does not reflect those articles and it throws an error “Snapshot.pre” file cannot be found.</span></p>
<p><span>This is the case when account under which merge agent runs does not have proper permission to access UNC/Alternate snapshot folder.</span></p>
<p class="MsoNormal">
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/merge-replication-2/feed</wfw:commentRss>
		</item>
		<item>
		<title>Social Network Theory with MATLAB Code</title>
		<link>http://blogs.globallogic.com/social-network-theory-with-matlab-code</link>
		<comments>http://blogs.globallogic.com/social-network-theory-with-matlab-code#comments</comments>
		<pubDate>Mon, 02 Apr 2012 13:36:35 +0000</pubDate>
		<dc:creator>PG</dc:creator>
		
		<category><![CDATA[Global Product Development]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Hubs]]></category>

		<category><![CDATA[MATLAB]]></category>

		<category><![CDATA[Social Networks]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2121</guid>
		<description><![CDATA[In the last few decades, interest in Social Networks has seen explosive growth with Facebook being the poster child. Indeed work had gone on before that time in Physics especially in the area of “random networks” (Erdos and Renyi are famous names). In such networks, each new node is randomly connected to any previous node [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span lang="EN-GB">In the last few decades, interest in Social Networks has seen explosive growth with Facebook being the poster child. Indeed work had gone on before that time in Physics especially in the area of “random networks” (Erdos and Renyi are famous names). In such networks, each new node is randomly connected to any previous node and its evolution studied.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">The work of Barabasi and others showed that while the physics of Random Networks was interesting, it had little to do with “human made” networks such as Web, Internet, friendship networks, etc. They all fall into the category of “Scale-Free Networks”.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></p>
<p class="MsoNormal"><strong><span lang="EN-GB">Scale-Free Network (SFN) Model:</span></strong></p>
<p class="MsoNormal"><span lang="EN-GB">“Scale-free” refers to the nature of some networks where its diameter (average # of links to reach a node from the present node; remember “six degrees of separation” between people) is mostly unchanged as the network grows in size.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">SFN’s degree (# of links per node) is distributed as a power law (and not a binomial distribution which is the case for a purely random network). A well-known example of power law is Pareto distribution (“80/20 rule”). SFNs arise in networks that grow and have preferential attachment property while growing (exhibits “rich get richer” and “first mover advantage” phenomena).</span></p>
<p><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/111.png"><img class="alignnone size-medium wp-image-2123" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/111-300x140.png" alt="" width="300" height="140" /></a></p>
<p class="MsoNormal"><strong><span lang="EN-GB">Figure 1: Pareto distribution (example of a Power Law distribution)</span></strong></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">If a “fitness” rating is attached to each node, a new phenomenon of “winner takes all” emerges (Google search engine will rate very high among websites as an example). This has been shown to be a “Bose-Einstein” condensate state (somewhat similar to c</span><span lang="RU">ondensation transitions </span><span>that </span><span lang="RU">occur in traffic jams</span><span lang="RU"> </span><span lang="RU">where long queues of cars are found</span><span>, </span><span lang="RU">in wealth distribution models</span><span lang="RU"> </span><span lang="RU">where a few people might have a </span><span>huge</span><span lang="RU"> fraction of all the wealth</span><span> and in operating systems usage where Windows has close to 90% market share).</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">For more on Social Network Theory, see </span><span lang="RU"><a href="http://www.barabasilab.com/pubs/CCNR-ALB_Publications/200907-24_Science-Decade/200907-24_Science-Decade.pdf"><span lang="EN-GB">Scale-Free Networks: A Decade and Beyond by Barabasi for a pain-free summary. (Science, Vol 325, 24 July 2009; pp 412-413)</span></a></span><span lang="EN-GB">.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><strong><span lang="EN-GB"><strong>Real Social Networks:</strong></span></strong></p>
<p class="MsoNormal"><span lang="EN-GB">Real social network has 3 major features:</span></p>
<p class="MsoNormal"><span lang="EN-GB">1. Clusters (of friends who “hang out”).</span></p>
<p class="MsoNormal"><span lang="EN-GB">2. Weak links (to your long forgotten high school classmates).</span></p>
<p class="MsoNormal"><span lang="EN-GB">3.Hubs (politicians and others with massive number of contacts).</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/222.png"><img class="alignnone size-medium wp-image-2124" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/222-300x217.png" alt="" width="300" height="217" /></a></p>
<p><strong><span lang="EN-GB">Figure 2: Natural social network structure with Cluster Groups</span></strong></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">Comparing the Pareto (power law) distribution that governs SFNs, we can see that Hubs with many links (large “k”) are nodes that occur rarely whereas Clusters with few links are nodes that occur very often. Here we elaborate a mid-scale situation where certain nodes have a fair number of links and occur with some frequency – we call them “Cluster Groups”. They arise in cases where a certain Member belongs to multiple Clusters, their family cluster, work cluster, golf club cluster, etc. The same Member belongs to many Clusters that are tightly coupled leading to a Custer Group.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><strong><span lang="EN-GB"><strong>Failure Modes:</strong></span></strong></p>
<p class="MsoNormal"><span>Failure modes of SFNs have been widely studied. The main 2 observations are that (1) SFN is robust to Failure and (2) SFN is vulnerable to attacks.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Failure means random loss of network elements such as some computers or local routers going down in the Internet. Attack refers to concerted take-down of major “hub” routers. It has been shown that removal of a small percent (15 to 20%) of “hub” routers will pull apart the network and “cascading failure” will spread (due to routers NOT under attack being unable to carry the extra load from “hub” routers) leading to total network failure.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><strong>MATLAB Code: </strong>Link to code below.</p>
<p class="MsoNormal"><span>I have included the ‘m’ file of the MATLAB code that does the following:</span></p>
<p class="MsoNormal"><span>1) Network: Will generate Scale Free Network of ‘N’ nodes and ‘d’ degrees (2 is typical for social networks).</span></p>
<p class="MsoNormal"><span>2) Plotting routines from MATLAB Central to create “tree” plots of the network generated.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Here are N=10 and N=100 examples; d=2 in both cases.</span></p>
<p class="MsoNormal"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><!--[endif]--></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/333.png"><img class="alignnone size-medium wp-image-2125" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/333-300x253.png" alt="" width="300" height="253" /></a> <a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/444.png"><img class="alignnone size-medium wp-image-2126" src="http://blogs.globallogic.com/wp-content/uploads/2012/04/444-300x249.png" alt="" width="300" height="249" /></a></p>
<p class="MsoNormal">The N=100 example already shows some interesting features. Remember “Hubs”? One would expect the “root” node at the very top to be a Hub but the left-most node in the 2<sup>nd</sup> level seems to be developing into a Hub with lots more “child” nodes.</p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><strong><span>Further Work:</span></strong></p>
<p class="MsoNormal"><span>a) MATLAB jocks may find my code lame; feel free to improve it, make it interactive, etc.</span></p>
<p class="MsoNormal"><span>b) When N exceeds a few thousand nodes, my PC runs out of memory! Remember that these are large matrix operations – you may find a way to make the code more memory-efficient by using ‘sparsematrix’ functions in MATLAB.</span></p>
<p class="MsoNormal"><span>c) One of the main theoretical and practical interest in Social Networks is identifying Hubs before they fully emerge – the reason is that they are vulnerable to attack and the eventual failure of the whole network. A fun project will be to let the network “grow”, say 100 nodes at a time, and observe its dynamics. </span></p>
<p class="MsoNormal"><span>- Can you predict which node has the potential to become a Hub? </span>How early can you predict it?</p>
<p class="MsoNormal"><span>d) Clearly, there are many other funs projects to do with the MATLAB code I have included. Feel free to contact me for ideas, joint explorations and discussing interesting results you may have generated.</span></p>
<p class="MsoNormal"><strong><a href="http://blogs.globallogic.com/wp-content/uploads/2012/04/socialnetwork_mfile.txt">socialnetwork_mfile</a></strong></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Have fun with social networks!</span></p>
<p class="MsoNormal"><span>PG</span></p>
<p class="MsoNormal"><!--[if gte vml 1]&gt;                     &lt;![endif]--><!--[if !vml]--><!--[endif]--><span>Dr. PG Madhavan is the Associate Vice President&#8211;Technical Advisory for Global Logic Inc and </span>Head of Technology for Solavei. He has over 25 years of experience in wireless, signal processing, software and entrepreneurship. He has deep expertise in wireless networking products and services. His extensive experience includes employment at major corporations  such as AT&amp;T, Microsoft, Lucent, Rockwell, and a startup, Zaplah Corp, where he was the Founder and CEO. He has been a faculty member of Electrical Engineering &amp; Computer Science and Neuroscience departments.  He has a Ph.D. in Electrical and Computer Engineering. He has contributed to over 50 publications and has 12 U.S. patents issued. He regularly speaks at industry events, including Microsoft WinHEC and ACM MobiHoc.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/social-network-theory-with-matlab-code/feed</wfw:commentRss>
		</item>
		<item>
		<title>Where the Big investments flowing in…BIG DATA</title>
		<link>http://blogs.globallogic.com/where-the-big-investments-flowing-in%e2%80%a6big-data</link>
		<comments>http://blogs.globallogic.com/where-the-big-investments-flowing-in%e2%80%a6big-data#comments</comments>
		<pubDate>Fri, 23 Mar 2012 18:48:29 +0000</pubDate>
		<dc:creator>Sachin Gupta</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Analytics]]></category>

		<category><![CDATA[Big Data]]></category>

		<category><![CDATA[Data management]]></category>

		<category><![CDATA[Hadoop]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2092</guid>
		<description><![CDATA[Hot technologies attract money and interest from top executives of the firms. And when it comes to extracting useful information from unruly datasets, the firms open their exchequers to get the best and the latest solutions. The Big Data has been the paramount banner story in data management, advanced analytics and business intelligence for last [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Hot technologies attract money and interest from top executives of the firms. And when it comes to extracting useful information from unruly datasets, the firms open their exchequers to get the best and the latest solutions. The Big Data has been the paramount banner story in data management, advanced analytics and business intelligence for last couple of years. The hype is relentless but it is driven by substantial innovations on many fronts. Gartner has already identified Big Data as one of the top 10 strategic trends for IT in 2012. </span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">A Deloitte report says that “as recently as 2009 there were only a handful of big data projects and total industry revenues were under $100 million. But by the end of 2012 more than 90 percent of the Fortune 500 will likely have at least some big data initiatives under way.<span> </span>Industry revenues will be in the range of $1-1.5 billion.”</span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">On the other hand the analyst and reporters at Wikibon see 10x growth of Big Data over the next five years, topping $50 billion. Increased interest in and awareness of the power of big data and related analytic capabilities will result in a super-charged CAGR of 58% between 2012 and 2017.</span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">So what is the Big Data?</span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Big data is a term applied to data sets whose size is beyond the ability of commonly used software tools to capture, manage, and process the data within a tolerable elapsed time.</span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Due to the rapid expansion of social, mobile, location and transaction-based data generated by the users across various industries, Big data analytics will top all other areas of growth in analytics during 2012. </span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">The key attributes of Big data are:</span></p>
<ul>
<li><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Variety: Big Data extends beyond structured data, including unstructured data of all varieties: text, audio, video, click<span> </span>streams, log files and more</span></li>
<li><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Velocity: Often time sensitive, Big Data must be treated as it is streaming into the enterprise in order to maximize its value to the business</span></li>
<li><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Volume: Big Data comes in one size: LARGE</span></li>
</ul>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Big Data can be used by companies to make better decisions and also useful for them to learn more about the needs and behavior of their customers.</span></p>
<p><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Thanks to Apache for supporting Hadoop project that is the open source implementation of Google file system and MapReduce. It is designed to efficiently process large volumes of data by connecting many commodity computers together to work in parallel.<br />
</span></p>
<p>Hadoop is primarily consists of two runtimes, the Hadoop distributed file system (HDFS) and MapReduce.</p>
<ul>
<li>HDFS splits large data files into blocks which are managed by different servers in the Hadoop cluster, and ensures that blocks are replicated to other servers (Datanodes)</li>
<li>MapReduce is a Java framework used to process data stored in HDFS. Self contained jobs are written in MapReduce and submitted to the cluster. The jobs run in parallel on each of the machines in the cluster, processing the data on the local machine</li>
</ul>
<p><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Being open source and highly scalable, Hadoop has been adopted by many fortune 500 companies. There are so many different flavors/products of Hadoop present in the market that clients can evaluate carefully before making a decision on what is right for their organization. </span></p>
<p class="MsoNormal"><span style="&quot;Verdana&quot;,&quot;sans-serif&quot;;">Both the hardware and software technologies handling the Big Data are evolving at a rapid pace, increasingly making it possible to perform fast ‘Big Data’ analysis, but still there is a fairly big gap in the number of trained technologists who are productively using the available tools. </span></p>
<p class="MsoNormal">The firms have to invest heavily in training the staff and technologist in Big Data to bridge the gap. The cost may be high but the returns are definitely lucrative and would provide competitive advantage to the firms.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/where-the-big-investments-flowing-in%e2%80%a6big-data/feed</wfw:commentRss>
		</item>
		<item>
		<title>Is your design SOLID?</title>
		<link>http://blogs.globallogic.com/is-your-design-solid</link>
		<comments>http://blogs.globallogic.com/is-your-design-solid#comments</comments>
		<pubDate>Mon, 19 Mar 2012 07:40:22 +0000</pubDate>
		<dc:creator>Amol Umate</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[DIP]]></category>

		<category><![CDATA[ISP]]></category>

		<category><![CDATA[LSP]]></category>

		<category><![CDATA[OCP]]></category>

		<category><![CDATA[solid design]]></category>

		<category><![CDATA[SRP]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2066</guid>
		<description><![CDATA[There are good and bad designs but how do we measure them?  Design is very subjective in nature and quality of design depends on various factors. In fact, having the same context, there can be possibility that two designers doesn&#8217;t converge to same/similar design.
Software design principles represent a set of guidelines that helps us [...]]]></description>
			<content:encoded><![CDATA[<p>There are good and bad designs but how do we measure them?  Design is very subjective in nature and quality of design depends on various factors. In fact, having the same context, there can be possibility that two designers doesn&#8217;t converge to same/similar design.</p>
<p><span>Software design principles represent a set of guidelines that helps us to avoid having a bad design. The design principles are associated to Robert Martin who gathered them in &#8220;Agile Software Development: Principles, Patterns, and Practices&#8221;. According to Robert Martin there are 3 important characteristics of a bad design that should be avoided:</span></p>
<div class="O1">
<ul>
<li>Rigidity - It is hard to change because every change affects too many other parts of the system.</li>
<li>Fragility - When you make a change, unexpected parts of the system break.</li>
<li>Immobility - It is hard to reuse in another application because it cannot be disentangled from the current application.</li>
</ul>
</div>
<div><span>There are various design principles to be followed by designers. Some of them are really important and can be mentioned as </span><span style="underline;"><span>S.O.L.I.D</span></span><span> design principles.</span></div>
<div><span>These design Principles are </span></div>
<div class="O1">
<ul>
<li><strong>S</strong>ingle Responsibility Principle</li>
<li><strong>O</strong>pen / Closed Principle</li>
<li><strong>L</strong>iskov Substitution Principle</li>
<li><strong>I</strong>nterface Segregation Principle</li>
<li><strong>D</strong>ependency Inversion Principle</li>
</ul>
<div>
<h3>Single Responsibility Principle</h3>
<blockquote><p><span><strong>A class should have only one reason to change</strong></span></p></blockquote>
<p><span>In this context a responsibility is considered to be one reason to change. This principle states that if we have 2 reasons to change for a class, we have to split the functionality in two classes. Each class will handle only one responsibility and on future if we need to make one change we are going to make it in the class which handle it. </span></p>
<p><span>When we need to make a change in a class having more responsibilities the change might affect the other functionality of the classes.</span></p>
<p><span>SRP was introduced Tom </span><span>DeMarco</span><span> in his book Structured Analysis and Systems Specification, 1979. Robert Martin reinterpreted the concept and defined the responsibility as a reason to change.</span></p>
<p><span>In the context of the Single Responsibility Principle (SRP), responsibility can be defined to be “a reason for change.” If there are more than one motive for changing a class, then that class has more than one responsibility. This is sometimes hard to see. We are accustomed to thinking of responsibility in groups.</span></p>
<h3>Open/Closed Principle</h3>
<div>
<blockquote><p><strong>Software entities like classes, modules and functions should be open for extension but closed for modifications.</strong></p></blockquote>
</div>
<div>
<p><span>OCP </span><span>is a generic principle. You can consider it when writing your classes to make sure that when you need to extend their </span><span>behavior</span><span> you </span><span>don’t </span><span>have to change the class but to extend it. The same principle can be applied for modules, packages, libraries. If you have a library containing a set of classes there are many reasons for which </span><span>you’ll </span><span>prefer to extend it without changing the code that was already written (backward compatibility, regression </span><span>testing). </span><span>This is why we have to make sure our modules follow Open Closed Principle.</span></p>
<p><span>When referring to the classes Open Close Principle can be ensured by use of Abstract Classes and concrete classes for implementing their </span><span>behavior</span><span>. This will enforce having Concrete Classes extending Abstract Classes instead of changing them. </span></p>
<div>
<div><span>Modules that conform to the open-closed principle have two primary attributes</span><span>. </span></div>
<div>
<ol>
<li><strong>“Open For Extension”</strong> – This means that the behavior of the module can be extended. That we can make the module behave in new and different ways as the requirements of the application change, or to meet the needs of new applications.</li>
<li><strong>“Closed for Modification”</strong>– The source code of such a module is inviolate. No one is allowed to make source code changes to it.</li>
</ol>
<h3>Liksov Substitution Principle</h3>
<div>
<blockquote><p><strong>Derived types must be completely substitutable for their base types.</strong></p></blockquote>
<p><span>This </span><span>principle is just an extension of the Open Close Principle in terms of </span><span>behaviour </span><span>meaning that we must make sure that new derived classes are extending the base classes without changing their </span><span>behaviour. </span><span>The new derived classes should be able to replace the base classes without any change in the code.</span></p>
<p><span>Liskov&#8217;s</span><span> Substitution Principle was introduced by Barbara </span><span>Liskov</span><span> in a 1987 Conference on Object Oriented Programming Systems Languages and Applications, in Data abstraction and </span><span>hierarchy</span></p>
<div>
<p><span>There </span><span>is a number of </span><span>behavioral</span><span> conditions that subtype must meet. </span><span>These </span><span>are detailed in a terminology resembling that of </span><span>”design by contract” </span><span>methodology</span><span>, leading to some restrictions on how contracts can interact with inheritance:</span></p>
<div class="O1">
<ul>
<li>Preconditions cannot be strengthened in a subtype.</li>
<li>Postconditions cannot be weakened in a subtype.</li>
<li>Invariants of the supertype must be preserved in a subtype.</li>
<li>History constraint (the &#8220;history rule&#8221;). Objects are regarded as being modifiable only through their methods (encapsulation). Since subtypes may introduce methods that are not present in the supertype, the introduction of these methods may allow state changes in the subtype that are not permissible in the supertype.</li>
</ul>
<h3>Interface Segregation Principle</h3>
<div>
<blockquote><p><strong>Clients should not be forced to depend upon interfaces that they don&#8217;t use.</strong></p></blockquote>
<p><span>We </span><span>write our interfaces we should take care to add only methods that should be there. If we add methods that should not be there the classes implementing the interface will have to implement those methods as well. For example if we create an interface called Worker and add a method lunch break, all the workers will have to implement it. What if the worker is a robot?</span></p>
<p><span>As a conclusion Interfaces containing methods that are not specific to it are called polluted or fat interfaces. We should avoid them</span><span>.</span></p>
<p><span>This principle deals with the disadvantages of “fat” interfaces</span><span>. Classes </span><span>that have “fat” interfaces are classes whose interfaces are not cohesive. In </span><span>other words</span><span>, the interfaces of the class can be broken up into groups of member functions. </span><span>Each group </span><span>serves a different set of clients. Thus some clients use one group of member </span><span>functions, and </span><span>other clients use the other groups.</span></p>
<h3>Dependency Inversion Principle</h3>
<div>
<blockquote><p><strong>High-level modules should not depend on low-level modules. Both should depend <span>on </span><span>abstractions.</span></strong></p>
<p><strong><span>Abstractions should not depend on details. Details should depend on abstractions</span><span>.</span></strong></p></blockquote>
<p><span>Dependency </span><span>Inversion Principle states that we should decouple high level modules from low level modules, introducing an abstraction layer between the high level classes and low level classes. Further more it inverts the dependency: instead of writing our abstractions based on details, the we should write the details based on abstractions.</span></p>
<p><span>Dependency Inversion or Inversion of Control are better know terms referring to the way in which the dependencies are realized. In the classical way when a software module(class, </span><span>framework) </span><span>need some other module, it initializes and holds a direct reference to it. This will make the 2 modules tight coupled. In order to decouple them the first module will provide a hook(a property, </span><span>parameter) </span><span>and an external module controlling the dependencies will inject the reference to the second one.</span></p>
<p><span>By applying the Dependency Inversion the modules can be easily changed by other modules just changing the dependency module. Factories and Abstract Factories can be used as dependency frameworks, but there are specialized frameworks for that, known as Inversion of Control Container.</span></p>
<p>In a nutshell,</p>
<div id="attachment_2077" class="wp-caption aligncenter" style="width: 510px"><a href="http://blogs.globallogic.com/wp-content/uploads/2012/03/design_principles1.png"><img class="size-full wp-image-2077" src="http://blogs.globallogic.com/wp-content/uploads/2012/03/design_principles1.png" alt="Design Principles" width="500" height="355" /></a><p class="wp-caption-text">Design Principles</p></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/is-your-design-solid/feed</wfw:commentRss>
		</item>
		<item>
		<title>It’s a marathon, not a sprint!</title>
		<link>http://blogs.globallogic.com/it-is-a-marathon-not-a-sprint</link>
		<comments>http://blogs.globallogic.com/it-is-a-marathon-not-a-sprint#comments</comments>
		<pubDate>Thu, 15 Mar 2012 06:25:39 +0000</pubDate>
		<dc:creator>Peter Harrison</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Kanban]]></category>

		<category><![CDATA[Podomoro]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2079</guid>
		<description><![CDATA[We humans have a tendency to bite off more than we can chew, and this is especially true in the world of software, where faster is always better. But this breakneck pace can lead to physical and mental exhaustion within a team and drastically affect the quality of software and the expectations of clients. There [...]]]></description>
			<content:encoded><![CDATA[<p><span>We humans have a tendency to bite off more than we can chew, and this is especially true in the world of software, where faster is always better. But this breakneck pace can lead to physical and mental exhaustion within a team and drastically affect the quality of software and the expectations of clients. There is an often quoted Standish CHAOS Report that states that only around one-third of today’s software projects are delivered on-time, on-budget or with the required features and functions. Even Agile teams can fall prey to exhaustion if they do not set a sustainable pace. Too often I’ve seen good teams burn out after working at superhuman speeds on the first few sprints. So then how do you maintain a pace that’s both aggressive but can be sustained for the long run?</span></p>
<p>Implementing sustainability is an elusive goal that sometimes seems to only reside in a best practices manual. Some employers break projects down into discrete portions like a Ford assembly line to enable employees to work on “autopilot.” Some create elaborate break areas with gym equipment and pool tables to help their employees recharge. In my opinion, neither of these approaches really tackle the core of the sustainability issue (although the recharge zones certainly are welcome!). For me, it’s a matter of treating sustainability as a project requirement, just as you would any other product feature. After all, if the team burns-out and breaks apart then it’s just as much a failure as delivering the wrong features or poor quality.</p>
<p>When planning a new project, most software teams hardly discuss sustainability or how to achieve it. Even in best-case scenarios, it often remains a “nice to have” attribute. I believe software teams need to set realistic expectations about what can be accomplished in a certain amount of time &#8212; both for clients and for themselves. Since Agile engineering relies on iterative releases rather than a “one and then done” approach, teams cannot push themselves for the the first few iterations and then slack off as their energy ebbs. Clients will inevitably compare a team’s recent activity with its past accomplishments and be disappointed by the decreased productivity.</p>
<p>But when a team finds its sustainable pace, it always meets its sprint goal, leading to a sense of empowerment and accomplishment. And with the continuous learning involved in Scrum practices, teams begin to set better expectations with their clients on what they are delivering. Stakeholders can count on the team to deliver exactly what they committed to because the goals are realistic and based on the collective wisdom of the team.</p>
<p>One tactic I’ve seen used is the implementation of visual control boards. This tool enables teams to keep track of their progress and the obstacles they are facing, leading to a path of continuous improvement. A commonly used variation of the visual control board is the <a href="http://en.wikipedia.org/wiki/Kanban_(development)"><span>Kanban</span></a> scheduling system that is based on the principle of ‘Limiting work in Progress’.   This approach helps teams identify how many tasks they can focus on at a particular time and then build a sustainable pace based on this number. At the heart of this principle resides a “pull system,” which controls the flow of resources in the value chain and allows the addition of new resources only as a replacement of what has already been consumed. This balance between demand and throughput encourages higher software quality, an optimized process, greater team performance and a healthy work environment.</p>
<p>Breaks are essential part of building a sustainable pace. I especially like the <a href="http://www.pomodorotechnique.com/"><span>Pomodoro Technique </span></a>that helps you get things done and stay focused by taking breaks after each unit of time. The typical length of a “pomodoro” is 25 minutes. After each pomodoro, the person takes a 5-minute break, which is a real break where he is not allowed to do anything work related. After four pomodoros, a longer break of around 15 minutes is required. These intermittent breaks make the technique more effective by helping the team member maintain concentration and motivation. Pomodoro is an Agile approach to time management, and it includes a number of practices similar to those used by an Agile team such as time-boxing, inspect and adapt, and an emphasis on maintaining a sustainable pace.</p>
<p>Regardless of the tactic used, Agile teams must establish a regular pace and deliver against it consistently. Only by implementing sustainability within a project can a team ensure a steady level of software quality, team productivity and trust with their clients. After all, the hare may sprint faster but it was the tortoise that won the race.</p>
<p><span>This Post was an Agile collaboration between Peter Harrison &amp; Mayank Gupta of GlobalLogic</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/it-is-a-marathon-not-a-sprint/feed</wfw:commentRss>
		</item>
		<item>
		<title>Introduction to Java 7 Featuers</title>
		<link>http://blogs.globallogic.com/introduction-to-java-7-featuers</link>
		<comments>http://blogs.globallogic.com/introduction-to-java-7-featuers#comments</comments>
		<pubDate>Wed, 29 Feb 2012 07:15:45 +0000</pubDate>
		<dc:creator>Rajender Aggarwal</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2062</guid>
		<description><![CDATA[Date and Time API
A new and   improved date and time API for Java. The main goal is to build upon the   lessons learned from the first two APIs (Date and Calendar) in Java SE,   providing a more advanced and comprehensive model for date and time   manipulation.
Strings in [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="bold;">Date and Time API</span></strong><br />
A new and   improved date and time API for Java. The main goal is to build upon the   lessons learned from the first two APIs (Date and Calendar) in Java SE,   providing a more advanced and comprehensive model for date and time   manipulation.</p>
<p><strong><span style="bold;">Strings in switch statements</span></strong></p>
<pre>static boolean booleanFromString(String s) {
 switch(s) {
   case "true":
     return true;
   case "false":
     return false;
 }
 throw new IllegalArgumentException(s);
}</pre>
<p><span style="bold;"><strong>Binary Literals</strong><br />
</span>The integral types (<code>byte</code>, <code>short</code>, <code>int</code>, and <code>long</code>) can also be expressed using the binary number system. For example,</p>
<pre>// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;

// A 16-bit 'short' value:
short aShort = (short)0b1010000101000101;

// Some 32-bit 'int' values:
int anInt1 = 0b10100001010001011010000101000101;</pre>
<p><strong><span style="bold;">Comparisons for Enums</span></strong></p>
<pre>boolean isRoyalty(Rank r) {
  return rank &gt;= Rank.JACK &amp;&amp; rank != Rank.ACE;
}</pre>
<p><strong><span style="bold;">Extension methods</span></strong></p>
<pre>import static java.util.Collections.sort;
List list = ...;
list.sort();    // looks like call to List.sort(), but really call to static Collections.sort().</pre>
<p><strong><span style="bold;">Automatic Resource Block Management</span></strong></p>
<pre>static String readFirstLineFromFile(String path) throws IOException {
<strong>try (BufferedReader br = new BufferedReader(new FileReader(path)))</strong> {
 return br.readLine();
}
}

Prior to Java 7, it would be written as below:
static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
 return br.readLine();
} finally {
 if (br != null) br.close();
}
}</pre>
<p><strong><span style="bold;">Language level XML support</span></strong></p>
<pre>elt.appendChild(
&lt;person&gt;
   &lt;name&gt;John&lt;/name&gt;
&lt;/person&gt;);</pre>
<p><strong><span style="bold;">Improved Catch Clause</span></strong></p>
<pre>try {
 return Class.forName("com.xyx.Person");
} catch (ClassNotFoundException | ExceptionInInitializerError e) {
 throw new AssertionError(e);

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/introduction-to-java-7-featuers/feed</wfw:commentRss>
		</item>
		<item>
		<title>Managing Software Releases in Offshore Product Development</title>
		<link>http://blogs.globallogic.com/managing-software-releases-in-offshore-product-development</link>
		<comments>http://blogs.globallogic.com/managing-software-releases-in-offshore-product-development#comments</comments>
		<pubDate>Thu, 23 Feb 2012 20:52:33 +0000</pubDate>
		<dc:creator>avinash.sharma</dc:creator>
		
		<category><![CDATA[Global Product Development]]></category>

		<category><![CDATA[Offshore Product Development]]></category>

		<category><![CDATA[Release Management]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2042</guid>
		<description><![CDATA[In Offshore Product Development (OPD), we always focus more on having best practices for software development and quality testing than the best practices of delivering the software to our clients. Managing software releases also involve quality work which is actually the representation of what is contained in a software release. For example, a release report [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">In Offshore Product Development (OPD), we always focus more on having best practices for software development and quality testing than the best practices of delivering the software to our clients. Managing software releases also involve quality work which is actually the representation of what is contained in a software release. For example, a release report should effectively communicate what is there in that particular release, no matter what is written in the code or what test reports have been published. The point here to understand is that a release is something that the management at Client’s office is always focused on, no matter how the outcome has been achieved.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;"> </span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">Effective software release management is not only meant for the one who is responsible to deliver a software release but also for those who are actively involved in any manner to provide a successful software release to the client. Here are some best practices that we can follow:</span></p>
<p class="MsoNormal" style="center;"><span style="small;"> <a href="http://blogs.globallogic.com/wp-content/uploads/2012/02/release-management3.jpg"><img class="alignright size-full wp-image-2054" src="http://blogs.globallogic.com/wp-content/uploads/2012/02/release-management3.jpg" alt="" width="324" height="272" /></a></span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"><span style="Calibri;">1. Release plan</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">The first and foremost point is to assess the current state of the project and deciding on the release frequency with delivery dates. Are there any dependencies for on-time deliveries? Does it require changing the dates due to these dependencies?</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">The release cycle must be as accurate as it can be. Do not define the release cycle based on when the Customer wants it, but when it can be delivered with desired quality. Remember that it needs to be tested thoroughly and it becomes really worse if you miss the dates than the release process itself.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"> </span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"><span style="Calibri;">2. Release infrastructure</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">Before you start the next release start thinking in advance about what kind of infrastructural issues/dependencies might be there at Client’s site. The release infrastructure should be in place at an early date for avoiding any fallbacks. In our project, the client planned to move its infrastructure from individual servers to the virtual environment. So, the questions were: What difference does it make for us? What can be the dependencies to deliver the release on time? Do we have access to the new virtual environment? What supporting software(s) are required for our application, are they available? How much time will it take for the complete setup to be available on the release date?</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;"> </span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"><span style="Calibri;">3. Standardization and Automation</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">It helps in standardizing and automating the release process. The release process should be standardized as to what is contained in a release. What are the common deliverables for all the releases? What additional deliverable is required in particular releases? E.g. in next release, if there are changes to the underlying database schema, then the particular release should have an extra deliverable which is the data migration scripts.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">Deliver the release as a software package and automate the deployment process as far as possible.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">It’s always better to review the contents before clicking the ‘Release’ button.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;"> </span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"><span style="Calibri;">4. Release report</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">Each release is provided with a Release report that should contain all release details i.e. deliverables/artifacts, release scope, issues resolved, known issues, deployment details (e.g. configurations), etc.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;"> </span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"><span style="Calibri;">5. Setting expectations</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">Never hide but communicate the importance of a particular release within your team to empower everyone involved in the process.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"> </span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><strong><span style="small;"><span style="Calibri;">6. Agility in Release process</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">The release process should be flexible enough to accommodate for any interim patch releases or any rollbacks to previous releases that are required.</span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="yes;"><span style="small;"> </span></span></p>
<p class="MsoNormal" style="0in 0in 0pt;"><span style="small;">Good software release management always helps in gaining Customer confidence and it needs the skill to review, adapt to improvements and great communication. It also helps in satisfying existing customers and hopefully winning new ones.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/managing-software-releases-in-offshore-product-development/feed</wfw:commentRss>
		</item>
		<item>
		<title>Agile can be Dangerous</title>
		<link>http://blogs.globallogic.com/agile-can-be-dangerous</link>
		<comments>http://blogs.globallogic.com/agile-can-be-dangerous#comments</comments>
		<pubDate>Tue, 21 Feb 2012 06:20:39 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2034</guid>
		<description><![CDATA[CAESAR
Good friends, go in, and taste some wine with me;
And we, like friends, will straightway go together.
BRUTUS[Aside]
That every like is not the same, O Caesar,
The heart of Brutus yearns to think upon!
 Julius Caesar: Act2, Scene2 (the scene right before Caesar's death)
I wonder if it is not the same with Agile. Many projects which fail [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><code><strong>CAESAR</strong></code></p>
<p><code>Good friends, go in, and taste some wine with me;<br />
And we, like friends, will straightway go together.</code></p>
<p><code><strong>BRUTUS[Aside]</strong></code></p>
<p><code>That every like is not the same, O Caesar,<br />
The heart of Brutus yearns to think upon!</code></p>
<p><code> </code><code>Julius Caesar: Act2, Scene2 (the scene right before Caesar's death)</code></p></blockquote>
<p>I wonder if it is not the same with Agile. Many projects which fail use &#8220;<em><strong>something like </strong>agile</em>&#8220;, think they are using &#8220;<strong><em>true</em></strong> <em>agile</em>&#8221; and are doomed to die. Caesar did not have the benefit of hindsight and a lot of instances where he saw things &#8220;like friendship&#8221; dooming him. We do..</p>
<p>I was speaking with one of my friends who had just returned from a project retrospective meeting after it had failed. Following are some excerpts that he recalled:</p>
<p><strong>PMCSM (project manager, a recent convert to scrum master through certification)</strong>: &#8220;We used a lot of agile throughout the development life cycle, yet it failed. Guess waterfall was better&#8221;</p>
<p><strong>LSD (Local Scrum Don, and thus the interrogator)</strong>: So what elements of agile did you use?</p>
<p><strong>PMCSM</strong>: Elements? The whole hog man! Bug tracking on Jira, collaboration on wiki, daily stand ups, 3-week sprint releases and what not. We even played planning poker, did not know it will all come to this!</p>
<p><strong>LSD</strong>: Planning poker is good fun. Did the whole team play it?</p>
<p><strong>PMCSM</strong>: Do I look like I will let the whole team play a game for hours just because some moron wrote you should? The leads and me sorted the stuff out. We used the extra person hours on more productive things</p>
<p><strong>LSD</strong>: Did everyone attend the daily stand ups?</p>
<p><strong>PMCSM</strong>: Every member, every night, without fail. That is what the book says, right?</p>
<p><strong>LSD</strong>: At nights, Oh! And how long were these</p>
<p><strong>PMCSM</strong>: Around an hour but sometimes more, we did not miss covering any of the issues. What kind of meeting gets over in 10 minutes, you tell me?</p>
<p><strong>LSD</strong>: Did you have sprint demos at the end of each sprint?</p>
<p><strong>PMCSM</strong>: No, the damned sprint product never came in a state it could be demo&#8217;d. And we were always in a rush to start with the next sprint. But we did everything else on Agile</p>
<p><strong>LSD</strong>: And why was that? What did the devs say?</p>
<p><strong>PMCSM</strong>: They gave some crap about requirements coming in late. I scrambled a lot to get those to their desk before they started the task. Still they whined. What do I do if the client did not blow up the stories before the sprint started. If I delayed the sprint start, the relationship would have taken a hit.</p>
<p><strong>LSD</strong>: And do you think the relationship is in a state of Nirvana today since we did not stop the sprints then. Did you have the retrospective meetings too?</p>
<p><strong>PMCSM</strong>: On stopping the sprint, let us not get all too cynical now that it has failed. It is easy for you to say this now. You can not imagine the pressure that was at that point to keep the development going. The client CTO was breathing down my neck to keep it on and please bear with them. The retrospectives sounded like too much. Anyway, everyone was already aware of what went right and what did not and people were busy planning out the next sprint. So, we did away with that</p>
<p>&#8212;-</p>
<p>It all lasted for a good two hours. Neither was able to convince the other.</p>
<p>We come across such teams and managers every day. And that makes me think that Scrum is not for the weak at heart, its not for the people who are steeped deep in waterfall and keep counting person hours till the end of time and sweat at the thought of moving a story out mid sprint. If you can not commit to it, Scrum is not for you. You&#8217;d have to leave the bird in your hand to find the two in the bush. Else, waterfall is probably a more suitable development model.</p>
<p>The learnings from the above conversation:</p>
<p><strong>Agile is light on processes, not loose on them</strong>: Many managers enjoy agile since they feel it frees them up from the process overhead. They are correct, but only partially. Agile, by definition, is a very light-on-processes-framework. However, the few tenets it stipulates must be adhered to. Iteration planning meetings create a sense of belongingness and ownership to the sprint deliverable. Many old school waterfall managers count the person hours spent on this and pass this. That is one of the worst things to do and defeats Scrum even before getting started</p>
<p><strong>Implement and Inspect is not a principle, it is the way of life</strong>: Numerous projects get into issues using agile since they do not abide by the rule to give frequent &#8220;potentially shippable&#8221; releases. The end of the sprint should be a sacred time and the demos/retrospectives as good as written in stone. Else, you are being neither here nor there. We bargained a bullet proof design phase just so that the product gets customer attention regularly and they eventually get what they asked for.</p>
<p><strong>It&#8217;s the people, silly</strong>: Clients and managers alike, at times, use agile to push things too hard for the team. In the name of bi-weekly releases, a lot of pressure is built on the team and they eventually burn out. The tenet of agile is to make the team all important - seek their opinion on what can be done, let them decide effort estimates, allow them the liberty and will to own the product. By thrusting estimates they have to meet or having them sit on two-hour long night calls in the name of stand up will make them hate all three - the manager, agile and the product - does not augur well for a world class product.</p>
<p><strong>It merits a repeat - agile is not for the weak at heart</strong>: Have the courage to delay a sprint start if stories have not come in. Have the courage to scrap a sprint midway if there are too many changes. If you are not doing this, the short term impact is on the morale of the team and the quality of sprint release. The long term impact is that the laxity enters the genes of the business guys. Just delay a sprint by a week or scrap one sprint midway and listen to the music at the other end. It may correct your problem once and for all. If you just keep being too good, you may become the bad guy in the end.</p>
<p>The conversation at the beginning may seem outrageous but it is an everyday story on failed projects who were using something like agile. Much like Caesar, they thought they were in good company and did need not to watch their back. Again, much like Caesar, they meet the same fate - end up dead or dusted.</p>
<p>Thoughts?</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/agile-can-be-dangerous/feed</wfw:commentRss>
		</item>
		<item>
		<title>Sybase (SAP) DataWindow.NET</title>
		<link>http://blogs.globallogic.com/sybase-sap-datawindownet</link>
		<comments>http://blogs.globallogic.com/sybase-sap-datawindownet#comments</comments>
		<pubDate>Mon, 20 Feb 2012 05:16:27 +0000</pubDate>
		<dc:creator>rajkumar.subrayan</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Sybase DataWindow.NET]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=2004</guid>
		<description><![CDATA[About Sybase (SAP) DataWindow .NET
Sybase DataWindow .NET is a 4GL RAD product that helps boost performance of .NET application development by rapidly building and deploying data driven applications, easily incorporating complex business rules and delivering sophisticated data presentation.
 
Just One Product Does it All
Some .NET plug-ins will simplify data binding, but don&#8217;t offer many display [...]]]></description>
			<content:encoded><![CDATA[<p><span style="#ffffcc"><strong>About Sybase (SAP) DataWindow .NET</strong></span><br />
Sybase DataWindow .NET is a 4GL RAD product that helps boost performance of .NET application development by rapidly building and deploying data driven applications, easily incorporating complex business rules and delivering sophisticated data presentation.</p>
<p><strong> </strong></p>
<p><span style="#ff9900;"><strong>Just One Product Does it All</strong></span><br />
Some .NET plug-ins will simplify data binding, but don&#8217;t offer many display options. Others focus on impressive graphics but require extensive, tedious coding. Many of these tools leave you wanting more - they tease you with a<strong> </strong>slick presentation style on your screen, but the printed version often doesn&#8217;t match up. DataWindow .NET provides a<strong> </strong>variety of sophisticated and adaptable presentation layers with minimal coding, the ability to easily build complex<strong> </strong>SQL queries, define validation rules, filter, sort, and manipulate data, as well as apply a variety of sophisticated column<strong> </strong>edit styles - all with point-and-click ease. And now with DataWindow .NET v2.5, you can easily build a DataWindow<strong> </strong>using a Web Service as a datasource, further simplifying your development tasks.</p>
<p>DataWindow .NET is the perfect data manipulation and reporting component for both WinForm and WebForm .NET projects and it supports Microsoft® Visual Studio 2005, ASP.NET 2.0, and ADO.NET 2.0.</p>
<p><strong> </strong></p>
<p><strong>Features &amp; Benefits</strong><br />
DataWindow .Net includes hundreds of built-in functions, properties and declarative programming options, providing developers with high levels of productivity in a virtually code-free tool. The new WebForms for ASP.NET and Microsoft handwriting recognition support makes adding complex forms and signature recognition to application an easy task.</p>
<p>New with version 2.5, DataWindow .NET provides a set of plug-ins that enable developers to create their DataWindows inside of Visual Studio .NET without ever having to leave the IDE. And, with a new Web services DataWindow, you can easily access, manipulate and display data from Web services.</p>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="25%" valign="top"><strong><em>Reduced costs</em></strong></td>
<td width="75%" valign="top"><em>Greatly   simplifies development and deployment of enterprise-level data driven   applications. Get your projects done faster than ever before.</em></td>
</tr>
<tr>
<td width="25%" valign="top"><em><strong>Improved productivity</strong></em></td>
<td width="75%" valign="top"><em>Allows   developers to easily build data-intensive applications in hours or days with   minimal coding</em></td>
</tr>
<tr>
<td valign="top"><em><strong>Minimized risk</strong></em></td>
<td width="75%" valign="top"><em>Proven   technology, tried and tested by hundreds of thousands of users allows new   developers to benefit from the mature and robust 4GL graphic programming   component</em></td>
</tr>
<tr>
<td width="25%" valign="top"><em><strong>Faster development</strong></em></td>
<td width="75%" valign="top"><em>4GL   component with built-in functions and properties reduces coding required.</em></td>
</tr>
<tr>
<td width="25%" valign="top"><em><strong>Flexible</strong></em></td>
<td width="75%" valign="top"><em>Code   in your .NET language of choice. DataWindow .NET Boosts performance of Visual   Studio .NET, Borland&#8217;s C# Builder and #devel</em></td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
<p><strong><br />
DataWindow .NET components</strong><br />
DataWindow .NET 2.0 is a set of Microsoft .NET assemblies that enable you to use DataWindow® objects in applications built with tools that support the .NET Framework. If Microsoft Visual Studio .NET 2005 is installed on your system, the DataWindow assemblies are integrated into the Visual Studio .NET 2005 Toolbox.</p>
<p>DataWindow Designer 2.0 is a tool that you use to build the DataWindow objects you use in DataWindow .NET.</p>
<p>DataWindow Reference 2.0 provides dynamic Help for the DataWindow assembly in Microsoft Help 2 format. If Microsoft Visual Studio .NET 2005 is installed on your system, the DataWindow Reference is integrated into the Visual Studio .NET 2005 Help system.</p>
<p><strong></strong></p>
<p><strong> </strong></p>
<p><strong>Installation</strong><br />
DataWindow .NET 2.0 works with the full release version of Visual Studio 2005. Installation did not work with the Visual Studio 2005 beta or with the C# Express Edition. Installation is simple and straightforward. Sybase uses InstallShield to guide users through the installation.</p>
<p><a href="../wp-content/uploads/2012/02/dw_install1.jpg"><img class="alignnone size-medium wp-image-2012" src="../wp-content/uploads/2012/02/dw_install1-300x244.jpg" alt="" width="300" height="244" /></a></p>
<p><a href="http://blogs.globallogic.com/wp-content/uploads/2012/02/dw_install2.jpg"><img class="alignnone size-medium wp-image-2015" src="http://blogs.globallogic.com/wp-content/uploads/2012/02/dw_install2.jpg" alt="" width="138" height="198" /></a> <a href="http://blogs.globallogic.com/wp-content/uploads/2012/02/dw_install3.jpg"><img class="alignnone size-medium wp-image-2016" src="http://blogs.globallogic.com/wp-content/uploads/2012/02/dw_install3.jpg" alt="" width="124" height="124" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/sybase-sap-datawindownet/feed</wfw:commentRss>
		</item>
		<item>
		<title>JSMS Configuration on Various Platforms</title>
		<link>http://blogs.globallogic.com/jsms-configuration-on-various-platforms</link>
		<comments>http://blogs.globallogic.com/jsms-configuration-on-various-platforms#comments</comments>
		<pubDate>Fri, 27 Jan 2012 12:13:48 +0000</pubDate>
		<dc:creator>farida.khan</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[jsms]]></category>

		<category><![CDATA[sms]]></category>

		<guid isPermaLink="false">http://blogs.globallogic.com/?p=1974</guid>
		<description><![CDATA[Introduction
Its been a tough job configuring this API on various platforms for the project. There was no striaght and simple way I could get from even the Internet.
So writing down my own experience I have followed to configure this SMS API on Windows and Linux Platforms. Hope it would be useful for others who would
need [...]]]></description>
			<content:encoded><![CDATA[<h3><span style="18pt;">Introduction</span></h3>
<p>Its been a tough job configuring this API on various platforms for the project. There was no striaght and simple way I could get from even the Internet.<br />
So writing down my own experience I have followed to configure this SMS API on Windows and Linux Platforms. Hope it would be useful for others who would<br />
need this API to be configured in their projects.</p>
<p>JSMS is a Java API for sending and receiving Short Messages (SMS) and Multimedia Messages (MMS). The API supports a wide range of communication protocols.</p>
<p><strong>1. Supported Protocols</strong></p>
<p>Receiving and Sending of messages by using any GSM Device capable of sending SMS messages and also by using the most common SMSC communication protocols:</p>
<ul>
<li>GSM (GSM devices)</li>
<li>UCP (Universal Computing Protocol)</li>
<li>CIMD2 (Computer Interface to Message Distribution)</li>
<li>SMPP (Short Message Peer-to-Peer)</li>
<li>TAP/IXO (Telocator Alphanumeric Protocol)</li>
<li>MM1 (MMS over GPRS)</li>
<li>MM7 (MMS exchange using SOAP messages over http(s))</li>
</ul>
<p><strong>2. Where to get jSMS?</strong></p>
<p>You can download a copy of the jSMS-API from http:// www.objectxp.com /. The API shipped either as a gzipped tar-archive (UTechnix users) or as ZIP-file (Windows users).</p>
<h3><span style="18pt;">Configuration on Windows Platform</span></h3>
<p><strong>Pre-assumption</strong>: Java is installed on the Windows machine and JAVA_HOME is set.</p>
<p>Follow the below steps:<br />
1.  Unzip the downloaded file to your target directory (using a tool like WinZIP)</p>
<p>2.  Copy javax.comm.properties file in the directory jSMS-&lt;ver&gt;\lib to the                        following locations on windows:<br />
JAVA_HOME\jre\lib<br />
JAVA_HOME\jdk&lt;ver&gt;\jre\lib</p>
<p>3. Make the necessary changes in the jsms.conf file which is at path jSMS-&lt;ver&gt;\bin</p>
<p>4. Copy the license properties that you received via email into the jsms.conf file</p>
<p>5. Change the property connector.serial.port to contain the port that you have the GSM device connected to (e.g. COM1).</p>
<p>6. Copy the following DLL files:</p>
<ul>
<li>win32com.dll from path jSMS-&lt;ver&gt;\lib to c:\WINDOWS\system32 folder</li>
<li>jdunxp.dll from path jSMS-&lt;ver&gt;\lib to c:\WINDOWS\system32 folder</li>
</ul>
<p>Now you are ready to send the SMS from your machine through the connected GSM device.</p>
<p><strong>Testing on Windows:</strong></p>
<p>1. Change directory to jSMS-&lt;ver&gt;\bin and double click the sms.bat file</p>
<p>2. Give the recipient’s mobile number</p>
<p>3. Specify the message to be sent</p>
<p>4. The message should be sent to the recipient</p>
<p>If received you have done it! <img src='http://blogs.globallogic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3><span style="18pt;">Configuration on Linux Platform</span></h3>
<p><strong>Pre-assumption</strong>: Java is installed on the Linux machine and JAVA_HOME is set.</p>
<p>1. Download the java communications API for linux platform from the URL:         <a title="http://www.oracle.com/technetwork/java/index-jsp-141752.html" href="http://www.oracle.com/technetwork/java/index-jsp-141752.html" target="_blank">http://www.oracle.com/technetwork/java/index-jsp-141752.html</a></p>
<p>2. unpack the download zip file using the command:</p>
<p><em><strong>unzip comm3.0_linux.zip</strong></em></p>
<p>3. Install the library using copy command:</p>
<p><strong><em> cp commapi/lib/libLinuxSerialParallel.so</em></strong></p>
<p><strong><em> JAVA_HOME/jre/lib/ext/libLinuxSerialParallel.so</em></strong></p>
<p>4. Install the comm.jar using the copy command:</p>
<p><strong><em> cp commapi/jar/comm.jar</em></strong></p>
<p><strong><em> JAVA_HOME/jre/lib/ext/comm.jar</em></strong></p>
<p>5. Install the javax.comm.properties using the copy command as below:</p>
<p><strong><em> cp commapi/docs/javax.comm.properties</em></strong></p>
<p><strong><em> JAVA_HOME/jre/lib/javax.comm.properties</em></strong></p>
<p>6. Make the necessary changes in the jsms.conf file which is at path jSMS-&lt;ver&gt;\bin</p>
<p>A. Copy the license properties that you received via email into the jsms.conf file.</p>
<p>B. Change the property connector.serial.port to contain the port that you have the GSM device connected to (e.g. dev/ttsy1).</p>
<p>Now you are ready to send the SMS from your machine through the connected GSM device.</p>
<p><strong>Testing on Linux:</strong></p>
<p>1. Open the terminal navigate to the folder <span>jSMS-&lt;ver&gt;\bin</span></p>
<p>2. Execute the sms.sh file using the below command:</p>
<p><strong><em>sh ./sms.sh</em></strong></p>
<p>3. Give the recipient’s mobile number.</p>
<p>4. Specify the message to be sent.</p>
<p>5. The message should be sent to the recipient</p>
<p>If received you have done it! <img src='http://blogs.globallogic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.globallogic.com/jsms-configuration-on-various-platforms/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

