<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nagarro Blog</title>
	<atom:link href="http://www.nagarro.com/blog/rss2" rel="self" type="application/rss+xml" />
	<link>http://www.nagarro.com/blog</link>
	<description>Nagarro blog: software development, design, architecture and usability</description>
	<lastBuildDate>Tue, 24 Aug 2010 20:57:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Global Services 100 List Appreciates Nagarro. And We Really Appreciate That.</title>
		<link>http://www.nagarro.com/blog/global-services-100-list-appreciates-nagarro-and-we-really-appreciate-that/</link>
		<comments>http://www.nagarro.com/blog/global-services-100-list-appreciates-nagarro-and-we-really-appreciate-that/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 19:31:00 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=657</guid>
		<description><![CDATA[As recent news about JetBlue demonstrates, it’s always nice to feel appreciated. Ironically, I just returned home from a vacation during which my family and I were subjected to some of the worst airline customer service I can recall in my lifetime (the airline shall remain unnamed). The fact that this occurred at the height [...]]]></description>
			<content:encoded><![CDATA[<p>As <span style="text-decoration: underline;"><a href="http://www.npr.org/templates/story/story.php?storyId=129186990&amp;ps=cprs">recent news about JetBlue demonstrates</a></span>, it’s always nice to feel appreciated. Ironically, I just returned home from a vacation during which my family and I were subjected to some of the worst airline customer service I can recall in my lifetime (the airline shall remain unnamed).<span id="more-657"></span> The fact that this occurred at the height of the JetBlue media frenzy underscores the fact that miserable employees will always create unhappy customers.</p>
<p>A little appreciation goes a long way. Global Services magazine and NeoAdvisory recently showed their appreciation for Nagarro by <a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Nagarro-Named-Global-Services-.aspx"><span style="text-decoration: underline;">naming us to the Global Services 100 list for the second time</span></a>. We appreciate being showcased among the world’s top IT outsourcing firms, and appreciate the customers that enabled us to showcase our successes. But most of all, we appreciate the Nagarro employees that allowed us to achieve success with our customers.</p>
<p>One of the findings that came out of the Global Services 100 survey is that in 2010, outsourcing firms should focus on getting and keeping the right talent. I would add to that: Keeping the right talent <em>happy</em>. Of course, this is nothing new at Nagarro, and while we can’t promise that every single Nagarro employee will be overjoyed every minute of the day, we <em>can</em> promise that employee satisfaction is a top priority, that we pride ourselves on running a meritocracy that rewards performance- and that we have never once had an employee evacuate the company via the emergency slide!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/global-services-100-list-appreciates-nagarro-and-we-really-appreciate-that/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nagarro Customer Coulomb Technologies Featured in LA Times Video</title>
		<link>http://www.nagarro.com/blog/nagarro-customer-coulomb-technologies-featured-in-la-times-video/</link>
		<comments>http://www.nagarro.com/blog/nagarro-customer-coulomb-technologies-featured-in-la-times-video/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 19:14:36 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=650</guid>
		<description><![CDATA[Recently, LA Times did a video feature on electric charging stations in LA &#8211; including a tour of those installed  on the Santa Monica pier. Nagarro&#8217;s customer Coulomb Technologies&#8217; ChargePoint system was the highlight of the video- which showed how the user can operate the networked charging station, and check charging status using a nifty [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, LA Times did a video feature on electric charging stations in LA &#8211; including a tour of those installed  on the Santa Monica pier. Nagarro&#8217;s customer Coulomb Technologies&#8217; ChargePoint system was the highlight of the video- which showed how the user can operate the networked charging station, and check charging status using a nifty iPad application from anywhere. Nagarro has been working with Coulomb Technologies to develop the some of the software components of their offerings, and is proud to be a part of their success story.</p>
<p>You can check out the video here-</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="300" height="450" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="PaperVideoTest" /><param name="bgcolor" value="#ffffff" /><param name="align" value="middle" /><param name="flashvars" value="&amp;titleAvailable=true&amp;playerAvailable=true&amp;searchAvailable=false&amp;shareFlag=N&amp;singleURL=http://latimes.vidcms.trb.com/alfresco/service/edge/content/f8880914-5b95-4437-88c7-74a5e568dcbe&amp;propName=latimes.com&amp;hostURL=http://www.latimes.com&amp;swfPath=http://latimes.vid.trb.com/player/&amp;omAccount=tribglobal&amp;omnitureServer=latimes.com" /><param name="src" value="http://latimes.vid.trb.com/player/PaperVideoTest.swf" /><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="300" height="450" src="http://latimes.vid.trb.com/player/PaperVideoTest.swf" quality="high" allowfullscreen="true" wmode="transparent" flashvars="&amp;titleAvailable=true&amp;playerAvailable=true&amp;searchAvailable=false&amp;shareFlag=N&amp;singleURL=http://latimes.vidcms.trb.com/alfresco/service/edge/content/f8880914-5b95-4437-88c7-74a5e568dcbe&amp;propName=latimes.com&amp;hostURL=http://www.latimes.com&amp;swfPath=http://latimes.vid.trb.com/player/&amp;omAccount=tribglobal&amp;omnitureServer=latimes.com" align="middle" bgcolor="#ffffff" name="PaperVideoTest"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-customer-coulomb-technologies-featured-in-la-times-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagarro Empowers HKMP Technologies to Secure Strategic Sales Win</title>
		<link>http://www.nagarro.com/blog/nagarro-empowers-hkmp-technologies-to-secure-strategic-sales-win/</link>
		<comments>http://www.nagarro.com/blog/nagarro-empowers-hkmp-technologies-to-secure-strategic-sales-win/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 23:46:47 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=640</guid>
		<description><![CDATA[At Nagarro we pride ourselves on taking a personal interest not just in the success of each project, but also in the success of each customer. So when one of our custom software products directly benefits a customer’s bottom line, that’s about as good as it gets for us. As you can see from Nagarro’s [...]]]></description>
			<content:encoded><![CDATA[<p>At Nagarro we pride ourselves on taking a personal interest not just in the success of each project, but also in the success of each customer. So when one of our custom software products directly benefits a customer’s bottom line, that’s about as good as it gets for us. As you can see from Nagarro’s press release today- <span style="text-decoration: underline;"><a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Nagarro-Empowers-HKMP.aspx" target="_blank">Nagarro Empowers HKMP Technologies to Secure Strategic Sales Win</a></span>, today is a good day here at Nagarro.<span id="more-640"></span></p>
<p>HKMP Technologies came to us with a tall order– upgrading its market-leading paperless accounting software on a tight deadline in order to secure a strategic customer deal. To make matters more complicated, a new release of Microsoft Silverlight – the technology platform for the product – was scheduled right in the middle of the development cycle.</p>
<p>Our team here at Nagarro approached the problem creatively,<span style="text-decoration: underline;"> </span><a href="http://www.hkmpt.com/pages/press/release13.php"><span style="text-decoration: underline;">allowing HKMP to successfully seal a critical new deal</span> </a>and improve its eco-footprint. For more details, please check out our new<a href="http://www.nagarro.com/Industry%20Solutions/Finance/Case%20Studies/HKMP-Case-Study.aspx"> <span style="text-decoration: underline;">HKMP Technologies case study</span></a> and <span style="text-decoration: underline;"><a href="http://www.nagarro.com/Clients/Video%20testimonials.aspx">customer testimonial video</a></span>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-empowers-hkmp-technologies-to-secure-strategic-sales-win/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Case study: load balancing high transaction volume databases</title>
		<link>http://www.nagarro.com/blog/case-study-load-balancing-high-transaction-volume-databases/</link>
		<comments>http://www.nagarro.com/blog/case-study-load-balancing-high-transaction-volume-databases/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 06:33:10 +0000</pubDate>
		<dc:creator>Girish Chhabra</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[database scaling]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/case-study-load-balancing-high-transaction-volume-databases/</guid>
		<description><![CDATA[Recently, while working on a SQL server optimization project, we had the opportunity to look into one interesting problem. We had a huge database (to the tune of 800GB) which was being hammered with approximately 30000 transactions per second. Database load was expected to grow by a factor of 100 in coming days and the [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, while working on a SQL server optimization project, we had the opportunity to look into one interesting problem. We had a huge database (to the tune of 800GB) which was being hammered with approximately 30000 transactions per second. Database load was expected to grow by a factor of 100 in coming days and the idea was to devise a solution which could handle that load. This was a SQL server 2005 enterprise edition database hosted on an 8 processor fifth Generation server. We wouldn&#8217;t say this server was on its knees with this load but yes there were wait times longer than expected and to add to that there were times when data traffic suddenly went up significantly and in those times DB was not able to keep up. </p>
<p> <span id="more-637"></span>
<p>Though this is not a very common scenario in many of the modern day applications out there but this definitely is a hallmark of databases handling loads from specific industries like banking. Applications intended for these industries normally have huge volume of small database transactions. In this article, we present one of the approaches you can take to handle a scenario such as this.</p>
<h4>Introducing Broker Hub</h4>
<p>To demonstrate the problem which has these type of database requirements, let&#8217;s use the example of a Broker Hub &#8211; a stock broking hub. Stock broking applications have very high volume of small database transactions and also there are spurts in database activity depending on market conditions. For simplicity sake, let&#8217;s assume that we were at a point when database design and usage pattern for Broker hub database was in the most optimal state. </p>
<h4>First choice &#8211; Scale up</h4>
<p>So to optimize Broker Hub further, we had a number of ideas and first choice was obviously to increase the hardware capacity. Increasing the hardware capacity did help the case. We could handle upwards of 50000 transactions a second by moving to a better system with 16 processors and a SAN array of high speed disks. But above 50000 in our load environments, we could still see the database to be the bottleneck. </p>
<p>Next obvious idea was to try SQL Server 2008 which has support for performance optimization features like advanced compression (reducing the overall disk IO) and support for virtually unlimited number of objects (2,147,483,647) and database size (524,272 TB). Again we could see the difference. Without enabling features like compression we could achieve a bigger number of around 70000 transactions per second. </p>
<h4>Would it work? Probably not long term.</h4>
<p>Probably enabling compression and using other features to optimize performance would have resulted in a higher figure but the problem here was that there was a limit to this. Adding hardware or moving to newer version of a database (or even to a different database) wouldn&#8217;t have given us the virtually unlimited (100 times 30000 transactions per minute) capacity we were looking at. Obviously we needed some way to deploy more than one server to split the load and thus increase the capacity to handle very high transaction loads. In simpler terms we needed a scale out solution instead of scale up for our database. Looking around for out of the box solutions in the market didn&#8217;t help, simply because there aren&#8217;t many scale-out solutions available in the market to load balance SQL server. Oracle has launched such a solution but even that requires syncing between different servers in cluster which takes up a lot of network bandwidth thus reducing the overall effectiveness of the solution. </p>
<h4>Scale out &#8211; Approach </h4>
<p>After a lot of brainstorming sessions, it was decided that it was time to create our own scale out solution. The idea was to create a design which could help us scale out as our user base grew but at the same time being able to handle sudden increases in transaction volumes. But as it happens all the time, we didn&#8217;t have too much money to be spent on this. We looked at various existing products such as SharePoint to see how they stored their data and came up with a very simple first draft of the scale out solution. It looked very similar to way SharePoint does load balancing for its data stores. We had a cluster of database servers connected to the Broker Hub. Each database was configured to handle a set of users with specific user Ids and thus held data only for those users. Merge replication was used to replicate data from all databases to a central database which was used for all reporting. Here&#8217;s how it looked like:</p>
<p><img style="border-bottom: 0px; border-left: 0px; margin: 10px auto; display: block; float: none; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.nagarro.com/blog/wp-content/uploads/2010/06/clip_image002.jpg" width="575" height="490" /></p>
<p>Broker Hub front end had to be modified a bit in terms of process flow. In this case, each user logging into Broker Hub had to be connected to a specific database based on his user id. The task of identifying which database has the information related to the user trying to log in was handled by a new module added to the application called DB Load balancer. The process flow in this approach looked like this:</p>
<ul>
<li>User foo with User ID (n) logs in.</li>
<li>Application calls Custom DB load balancer to find out that all data specific to user foo is on database server DB 2.</li>
<li>Application creates a connection to DB 2 on behalf of this user.</li>
<li>All user transactions from User 1 are directed to DB 2 thereafter.</li>
<li>Periodically user data is synchronized to the master database.</li>
</ul>
<h4>Design Decisions for this approach</h4>
<p>This approach was pretty simple to implement and could achieve the results we were looking for. But there were a few practical issues:</p>
<ul>
<li>We have to introduce concept of ID buckets. So every transaction table on each server was assigned unique bucket from which it could allocate Ids. With this we overcame the problem of how to maintain unique IDs. </li>
<li>All the masters would be replicated using transaction with update option. So a change on one gets replicated all over.</li>
<li>Adding new users was not as simple as before. Every database was configured for a specific set of users and this set increased sequentially. This meant that we always had to add the new user in the last server available and if last server was full then we had to deploy a new database even for a single user (and probably even before the last server was at its full capacity). This was accepted as an acceptable fact as this would happen once a while.</li>
<li>Any admin report had to combine the data from all the servers to be useful which meant an additional job to aggregate all the data. This was accepted as a design reality.</li>
</ul>
<h4>Conclusion</h4>
<p>So we could see very clearly that we were achieving the desired performance figures for this approach. Our aim was to find out how best we could achieve load balancing capabilities for the specific database load our application was creating and that was achieved. It actually became a life saver for us in more than one situation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/case-study-load-balancing-high-transaction-volume-databases/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Verdict is In – Nagarro Custom Judging Software Found Green as Charged</title>
		<link>http://www.nagarro.com/blog/the-verdict-is-in-%e2%80%93-nagarro-custom-judging-software-found-green-as-charged/</link>
		<comments>http://www.nagarro.com/blog/the-verdict-is-in-%e2%80%93-nagarro-custom-judging-software-found-green-as-charged/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 00:36:44 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=623</guid>
		<description><![CDATA[A few months ago we mentioned the Moody’s Mega Math Challenge, organized by Nagarro customer SIAM (the Society for Industrial and Applied Mathematics). This week we are pleased to report that, for the first time ever, the judging process for the contest has gone paperless [link to release on Nagarro press room] thanks to custom software built by Nagarro. The new software allowed seven teams of judges to view hundreds of detailed submissions online – securely, remotely and at their own convenience – thus eliminating printing, mailing and redistribution of printed hard copies.

[embed video]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.nagarro.com/blog/?s=siam">A few months ago we mentioned the Moody’s Mega Math Challenge</a>, organized by Nagarro customer <a href="http://www.siam.org/">SIAM</a> (the Society for Industrial and Applied Mathematics). This week we are pleased to report that, for the first time ever, <a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Math-Goes-Green.aspx">the judging process for the contest has gone paperless</a> thanks to custom software built by Nagarro. The new software allowed seven teams of judges to view hundreds of detailed submissions online – securely, remotely and at their own convenience – thus eliminating printing, mailing and redistribution of printed hard copies.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/ljw7F33tFZE&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/ljw7F33tFZE&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Nagarro is proud to partner with SIAM to develop paperless systems as an eco-friendly alternative to manual processes. To learn more about how Nagarro’s <a href="http://www.nagarro.com/Services/Application-Development.aspx">custom software development services</a> can help your company&#8217;s business goals, please contact us at <a href="mailto:info@nagarro.com">info@nagarro.com</a>.</p>
<p><em>Read </em><a href="../../blog" target="_blank">Nagarro&#8217;s new blog! </a><br />
<em>Become a fan of Nagarro on </em><a href="http://www.facebook.com/pages/Nagarro/49016990962" target="_blank">Facebook</a><br />
<em>Follow Nagarro on </em><a href="http://www.twitter.com/nagarro" target="_blank">Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/the-verdict-is-in-%e2%80%93-nagarro-custom-judging-software-found-green-as-charged/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagarro News from SAPPHIRE NOW 2010 –Nagarro and Patrimonio Hipotecaria Star in SAP Video</title>
		<link>http://www.nagarro.com/blog/nagarro-news-from-sapphire-now-2010-%e2%80%93nagarro-and-patrimonio-hipotecaria-star-in-sap-video/</link>
		<comments>http://www.nagarro.com/blog/nagarro-news-from-sapphire-now-2010-%e2%80%93nagarro-and-patrimonio-hipotecaria-star-in-sap-video/#comments</comments>
		<pubDate>Tue, 18 May 2010 04:58:56 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP BPM]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=610</guid>
		<description><![CDATA[I’m at SAPPHIRE NOW 2010 this week, with our customer Patrimonio Hipotecaria – who is here all the way from Monterrey, Mexico &#8211; to talk about our recent successes using SAP BPM for banking and loan processing. Patrimonio’s implementation of IS Banking, along with Nagarro’s automation of their proprietary business processes using SAP BPM has [...]]]></description>
			<content:encoded><![CDATA[<p>I’m at SAPPHIRE NOW 2010 this week, with our customer <a title="Patrimonio Hipotecaria" href="http://www.nagarro.com/Services/SAP-Consulting/Case%20Studies/Patrimonio-Casestudy.aspx" target="_blank">Patrimonio Hipotecaria</a> – who is here all the way from Monterrey, Mexico &#8211; to talk about our recent successes using SAP BPM for banking and loan processing. Patrimonio’s implementation of IS Banking, along with Nagarro’s automation of their proprietary business processes using SAP BPM has made them an impressive success story for SAP. The video was shot at the Monterrey offices of Patrimonio, and features Alejandro Marroquin the CIO of Patrimonio and Manish Agarwal, the SAP Project Lead from <a title="Nagarro Software" href="http://www.nagarro.com" target="_blank">Nagarro.</a></p>
<p> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/XUPlfM50Uig&amp;hl=en_US&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/XUPlfM50Uig&amp;hl=en_US&amp;fs=1&amp;rel=0" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>If you are going to be at SAPPHIRE, please drop by Patrimonio’s session for a viewing of the video, an interactive discussion and more information on SAP BPO best practices:</p>
<p><strong>Real-Life Integration and Process Management</strong></p>
<p>Wednesday, May 19</p>
<p>3:00 &#8211; 3:20 PM presentation</p>
<p>3:30-3:50 PM discussion</p>
<p>Theater 3 Lines of Business</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-news-from-sapphire-now-2010-%e2%80%93nagarro-and-patrimonio-hipotecaria-star-in-sap-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conceptualizing a dynamic web service demo engine</title>
		<link>http://www.nagarro.com/blog/conceptualizing-a-dynamic-web-service-demo-engine/</link>
		<comments>http://www.nagarro.com/blog/conceptualizing-a-dynamic-web-service-demo-engine/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 02:31:00 +0000</pubDate>
		<dc:creator>Ashish Dixit</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[dynamic rendering]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/conceptualizing-a-dynamic-web-service-demo-engine/</guid>
		<description><![CDATA[Introduction: Ever since the dawn of the Internet Application Service Providers have developed internet based applications for which they can charge through a subscription based business model. Earlier there was no standardization across these online service offerings, but web services emerged to create various standards for providing these online services: SOAP, UDDI, etc. Internet businesses [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction: </strong>Ever since the dawn of the Internet Application Service Providers have developed internet based applications for which they can charge through a subscription based business model. Earlier there was no standardization across these online service offerings, but web services emerged to create various standards for providing these online services: SOAP, UDDI, etc. Internet businesses adopted web services quickly and started introducing pay-to-use services on the Internet. Many companies even made publishing web services through a subscription model as their core business (weather services, financial data, etc.).</p>
<p> <span id="more-603"></span>
</p>
<p><strong>Problem: </strong>One of the challenges that you face, when you are selling web services is this: &quot;how do you showcase your product to a potential customer&quot;. The answer can be simple, make a demo web page which allows prospects to play with the web service and try it out before subscribing to it. This is indeed simple, if you are selling one or two web services. However, if you are providing anything more than a handful of services, then creating, maintaining, updating, and updating a web page for every service and its various versions that you sell can be a nightmare.</p>
<p><strong>Solution</strong>: A solution for such a scenario can be the use of an engine which can dynamically render a user interface for any given web service on demand. Let&#8217;s call this as the &#8216;web service demo engine&#8217;.</p>
</p>
<p>The advantages for such an engine are obvious:</p>
<ul>
<li>no additional effort when publishing new services </li>
<li>smaller code-base to maintain </li>
</ul>
<p>There are various challenges to as well, if such an engine is to be implemented. These include:</p>
<ul>
<li>the engine needs to be extensible to and flexible to absorb any changes to existing web services. </li>
<li>web service parameters can vary from being simple data types (such as integers) to collections, custom objects, etc. The demo engine needs to be able to interpret any data type and render its UI efficiently. </li>
<li>similarly, the web service response may contain a variety of data types (though XML) &#8211; tables, charts, images, etc. The engine should be able to interpret this data an render the output correctly. </li>
<li>the engine should render the UI to allow users to enter the input data for the web service, and should perform basic business rule validation to ensure input data makes sense. </li>
<li>the basic goal is that the engine should be completely configurable, and should not require re-coding whenever a new service is released. </li>
</ul>
<p>As can be seen, some of this information is not even present in the WSDL of the web service, so any engine that hopes to achieve all of the above needs some help other than the WSDL. A possible solution is to have a configuration file published with every new web service that carries this information. Such a configuration file would carry a number of items:</p>
<ul>
<li>business data definition </li>
<li>input controls information </li>
<li>output controls information </li>
<li>information about grouping of input and output controls </li>
<li>business rules for input validation </li>
<li>output data rendering information </li>
<li>information about the web service itself </li>
<li>mapping for input control to web service parameters </li>
</ul>
<p>This configuration file can be generated by hand, or auto-generated partially through the use of custom code attributes or custom tools when the web-service itself is being developed.&#160; Through the use of this information, an engine which renders demo pages for any given web service is conceivable.</p>
<p>How is creating a configuration file per web service better than creating individual web pages per service? There are several ways in which this is better:</p>
<ul>
<li>the configuration files generation can be largely automated. </li>
<li>the central demo engine makes it easy to have consistent UI and style when rendering. </li>
<li>you only manage one code base. Imagine if tomorrow, you wanted to add specific authentication mechanisms to provide access to the demo pages. If you had a demo engine, you only will have to make that change in one place. </li>
<li>it decouples the rendering of the UI from the web service itself &#8211; a web page per service is very tightly coupled with the service it is demonstrating. </li>
</ul>
<p>Has anyone implemented a similar solution or encountered a similar problem and provided a different solution? We would love to discuss this through the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/conceptualizing-a-dynamic-web-service-demo-engine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nagarro Named Among Top 20 “Rising Star” Outsourcing Firms in US and Western Europe</title>
		<link>http://www.nagarro.com/blog/nagarro-named-among-top-20-%e2%80%9crising-star%e2%80%9d-outsourcing-firms-in-us-and-western-europe/</link>
		<comments>http://www.nagarro.com/blog/nagarro-named-among-top-20-%e2%80%9crising-star%e2%80%9d-outsourcing-firms-in-us-and-western-europe/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 18:28:05 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Nagarro]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=594</guid>
		<description><![CDATA[Last month I posted that Nagarro was named a “Rising Star” in the 2010 Global Outsourcing 100® List by the International Association of Outsourcing Professionals® (IAOP®). I am now pleased to report that – as seen in the Fortune Magazine F500 issue on newsstands today – Nagarro has been awarded distinction in five categories of [...]]]></description>
			<content:encoded><![CDATA[<p>Last month I posted that <a href="http://www.nagarro.com/blog/nagarro-named-a-%E2%80%9Crising-star%E2%80%9D-in-iaop%E2%80%99s-2010-global-outsourcing-100-list/">Nagarro was named a “Rising Star” in the 2010 Global Outsourcing 100® List</a> by the International Association of Outsourcing Professionals® (IAOP®). I am now pleased to report that – as seen in the Fortune Magazine F500 issue on newsstands today – Nagarro has been awarded distinction in five categories of this award, including Top 20 “Rising Star” Outsourcing Firms, both in the US and Europe.</p>
<p>However, the most important achievements in winning this award are Nagarro’s near-perfect scores in customer satisfaction and employee management. As our customers know very well, Nagarro is only as good as the people who work here. As Nagarro’s CEO, I find it tremendously rewarding to know that all the hard work that goes into employee development behind the scenes has resulted in the desired effect: Satisfied customers.</p>
<p>A special thanks goes out to the hundreds of <a title="Nagarro Software" href="http://www.nagarro.com" target="_blank">Nagarro</a> employees working hard to help our customers achieve success. For me, this is what it’s all about.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-named-among-top-20-%e2%80%9crising-star%e2%80%9d-outsourcing-firms-in-us-and-western-europe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP SOA Best Practices : SAP ESR Usage</title>
		<link>http://www.nagarro.com/blog/sap-soa-best-practices-sap-esr-usage/</link>
		<comments>http://www.nagarro.com/blog/sap-soa-best-practices-sap-esr-usage/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 14:57:57 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP SOA]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=598</guid>
		<description><![CDATA[SAP ESR and SAP SOA best practices for managing non-SAP and SAP services in the enterprise.]]></description>
			<content:encoded><![CDATA[<p><a title="SAP SOA Implementation" href="http://www.nagarro.com/Services/SAP-Consulting.aspx" target="_blank">SAP</a> ESR and SAP SR are the core tools for the SAP SOA modeling and implementation. In this blog, we provide the evolution and role of the SAP ESR for SAP SOA implementation.</p>
<p><span id="more-598"></span></p>
<p><strong>What is SAP ESR<br />
</strong></p>
<ul>
<li>SAP ESR is the evolution of Integration Repository (IR) in SAP XI. IR was already representing the end points as message interfaces. Message Interfaces were already exposed as WSDL. SAP has added the Modelling capability for Process Component Models (which is an extension on top of the earlier Integration Scenarios), and streamlined the usage of end points (now called Service Interfaces). It has also streamlined the usage of data types which are now called global data types.</li>
<li>The service organization concept is similar to that of IR. All Service Interfaces are within a SCV and a namespace.</li>
<li>SAP ESR provides the advantage of providing a consistent naming convention of Service Interface.</li>
<li>Enterprise Service Builder (ES Builder) offers a modeling environment to create various models in the Enterprise. It was earlier called the Integration Builder in the <a title="SAP XI" href="http://www.nagarro.com/Services/SAP-Consulting/SAP-ISV-Services.aspx" target="_blank">SAP XI environment</a>.</li>
</ul>
<p><strong>Salient features of SAP ESR:<br />
</strong></p>
<ul>
<li>ES Builder allows to create Process Component Model (ProComp Model)</li>
<li>In SAP NW 7.0 (2004s) and SAP NW ‘04, service interfaces have one operation per service. In SAP NW PI 7.1 the Enterprise Services Repository offers multiple operations per service.</li>
<li>Global Data Types: Approved SAP-wide using the Governance process. Reusable semantic building blocks for service interfaces and message types.</li>
</ul>
<p><strong>Why to use SAP ESR:<br />
</strong></p>
<ul>
<li>SAP ESR is the central repository for modeling the service interface. We model the service operations, and their request/response structures. This allows us to have a CENTRAL enterprise wide repository for managing these definitions.</li>
<li>SAP ESR provides the capability for organizing the service definitions based on software components, their versions and namespaces. It also allows us to maintain service versions (since services invariably would get revised over time).</li>
<li>Enable SOA design governance across the organization. We can model the Process Component architecture models in ES Repository. From the ProComp models, we can drill down to standards based service interface design (Service Metadata). The service interfaces are based on GDTs that provide resusable uniform representation of business structures.</li>
</ul>
<p>SAP ESR is positioned to be the central enterprise wide repository for managing all service definitions for SAP and nonSAP services.</p>
<p>Our recommendation for SAP customers is to use SAP ESR for modeling and managing all SOA service definitions for SAP and non-SAP services across the enterprise.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-soa-best-practices-sap-esr-usage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Case study: an application updater for application suites</title>
		<link>http://www.nagarro.com/blog/case-study-an-application-updater-for-application-suites/</link>
		<comments>http://www.nagarro.com/blog/case-study-an-application-updater-for-application-suites/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 02:11:00 +0000</pubDate>
		<dc:creator>Gaurav Arya</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ClickOnce]]></category>
		<category><![CDATA[UAB]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/case-study-an-application-updater-for-application-suites/</guid>
		<description><![CDATA[When you are developing a windows application, it is necessary to have an updater strategy built-in. We all know that enhancements and fixes are a part of the software development process. Best practices and frameworks exist for creating application updaters services, and integrating them in your windows application. Microsoft provides ClickOnce technology which makes it [...]]]></description>
			<content:encoded><![CDATA[<p>When you are developing a windows application, it is necessary to have an updater strategy built-in. We all know that enhancements and fixes are a part of the software development process. Best practices and frameworks exist for creating application updaters services, and integrating them in your windows application. Microsoft provides ClickOnce technology which makes it very easy to package your application so that it can easily updated whenever there is an update in the application. Another approach is the Updater Application Block (UAB) which is a bit more difficult to implement, but also offers a great deal more flexibility in what you can do with it.</p>
<p> <span id="more-602"></span>
</p>
<p>One of our customers had a requirement which was slightly different from the standard update requirement. This customer offers a suite of applications (much like MS Office). There is a further twist, the business case for this customer is such that even within the same application, the end user might be able to run multiple versions of these applications side-by-side (like you can run Visual Studio 2005 and 2008 side by side). Each of these applications and the various active versions of a given application could have updates released independently of each other. One would think that all of these could be implemented as separate ClickOnce packages, but that would have been a maintenance nightmare on the update server, and also would have presented a very poor experience for the end user.</p>
<p><strong>Problem statement</strong> &#8211; Create an updater solution which uses a single application to provide automatic update notifications for multiple applications, and manages download and installation for all of these updates.</p>
</p>
<p>Our solution was to create a utility application on the client end which acts more like an Application Manager. This application keeps track of all the applications installed on the client (and those that are not installed), and manages the updates and notifications for all of them. The solution mirrors the concept presented in the Microsoft UAB. Here is what it looks like:</p>
<p><img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nagarro.com/blog/wp-content/uploads/2010/04/image.png" width="391" height="177" /></p>
<p>The application manager can be implemented through a variety of paradigms. It can be a service which is always running in the background. It can be implemented as an application launcher &#8211; this means that to launch any of the applications in the suite, you first have to launch the application manager. There can be other ideas on how it can be implemented.</p>
<p>The basic solution for how it works is similar to the UAB. It keeps track of the currently installed application on the client machine (perhaps through reading registry settings). It keeps track if new releases by requesting a the server for a manifest file which contains information about the various versions of the applications present in the application suite &#8211; specifically, it contains information about the latest versions of the applications present on the update server, and information about how they can be accessed. The application manager then compares this information from the manifest to the local manifest that it maintains of the installed applications. The way this differs from the UAB is that in UAB, the manifest on the server contains metadata about the releases of a single application. In our scenario, it contains the information for multiple applications.</p>
<p>The application manager can provide various services such as provide notifications when updates are available, maintain user preferences for update notifications, download updates, install selective updates, or install updates automatically (or based on a schedule). All of these, and many other rich update features can be implemented through the use of the application manager.</p>
<p>On the server side, the process is simplified because whenever any of the applications are changed, a single change has to be made to a single manifest file/data source. For all updates, only one manifest needs to be managed, which makes update management easier and less error prone. The benefit of using an Updater Service (instead of simply requesting the file directly from the server) is that the manifest information can then be kept in a database, from where the service can generate the manifest file. Or another implementation could be that the manifest file is generated from a well-defined directory structure on the server. The point is that using an interface such as a service allows you to have more flexibility on how you implement your server. Another benefit could be to build-in licensing or role-based manifest generation (to prevent access to certain applications or updates).</p>
<p>Finally, the application manager itself needs to be updated. We chose to use ClickOnce for the Application Manager itself. The reason is the ease of deployment and update for a single application using ClickOnce is still the best. So, the use case for setting up new client machines becomes very simple. First install application manager to using ClickOnce. Then the application manager downloads and installs everything else.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/case-study-an-application-updater-for-application-suites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP SOA Service Design Principles and Best Practices</title>
		<link>http://www.nagarro.com/blog/sap-soa-service-design-principles-and-best-practices/</link>
		<comments>http://www.nagarro.com/blog/sap-soa-service-design-principles-and-best-practices/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 15:09:04 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP enterprise services]]></category>
		<category><![CDATA[SAP SOA]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=592</guid>
		<description><![CDATA[Essential design principles and best practices for SAP SOA based custom enterprise services.]]></description>
			<content:encoded><![CDATA[<p>For SAP SOA design and development, it is important to understand the best practices for identifying the granularity and technical characteristics of the enterprise service. In this blog, we provide essential design principles and best practices for designing such enterprise services.</p>
<p><span id="more-592"></span></p>
<p>Design Principles for service design and identification:<strong> </strong></p>
<ol>
<li><strong>Granularity:</strong> The service should have a broad level functionality to be sufficiently useful to a large range of consumers. The service should not be too fine-grained i.e. not have a narrow functionality to be of use to a limited set of consumers.</li>
<li><strong>True reuse at the Enterprise level:</strong> The service should have functionality to be of use across the enterprise by providing generic functionality in its functional domain.</li>
<li><strong>Durable (standing the test of time/change in the landscape): </strong>A good service would stand the test of time and the test of constant change in the enterprise landscape.</li>
</ol>
<p>Best Practices for Technical Characteristics</p>
<ol>
<li><strong>Idempotent:</strong> The Service should provide the same result when called more than once. In web service operations, due to technical failures, the caller may not get a valid reponse to its service invocation. The caller would invoke the business service again, which would lead to a repeated business transaction (an obvious blunder). Hence, for transactions, we have to ensure that the business transaction happens only once. A design approach is to use a unique GUID in the web service call, which would be used in the service response to correlate the request-response. In case of a repeated service invocation, the duplicate call would get detected due to the repetition of the unique GUID parameter.</li>
<li><strong>Security Considerations: </strong>Considering the broad appeal of the service across the enterprise, many consumers are expected to invoke the service. Hence, it is important to control the security aspects of calling this business service such as roles, authentication and authorization. Even if the service is not a transaction (not committing any business data) and if it is a read-only service, the security has to be controlled to restrict the data subset being requested by the caller.</li>
<li><strong>Error Control: </strong>Due to the distributed nature of services and participation in distributed business processes, the service should fail elegantly and provide a human-readable trace to provide an easy method to troubleshoot error causes. Additionally, the service should reverse-compensate any business data transactions on encountering errors and preserve data integrity.</li>
</ol>
<p>The above are the essential aspects for designing good services that endure the test of time. These learnings are based on our direct experience in identifying enterprise services and establish SOA design and governance principles across customer projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-soa-service-design-principles-and-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP BPM vs Savvion Lombardi Pegasystems</title>
		<link>http://www.nagarro.com/blog/sap-bpm-vs-savvion-lombardi-pegasystems/</link>
		<comments>http://www.nagarro.com/blog/sap-bpm-vs-savvion-lombardi-pegasystems/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 14:43:48 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP BPM]]></category>
		<category><![CDATA[SAP Netweaver]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=585</guid>
		<description><![CDATA[sAP BPM comparison and recommendations vs Savvion Lombardi Pegasystems Metastorm
]]></description>
			<content:encoded><![CDATA[<p>SAP BPM is a relatively recent offering from SAP. SAP customers are looking to evaluate SAP BPM in comparison to the mainstream BPM vendors such as Savvion, Lombardi, Pegasystems, Metastorm and others. In this blog, we recommend the usage of SAP centric products such as SAP BPM for customers having major investments in SAP.<span id="more-585"></span></p>
<p>SAP runs most of the core business processes across its customers. The SAP Business Suite provides comprehensive transactional support for core business processes such as financials, sales, procurement, manufacturing, operations, HR etc. SAP has built a rock solid business process platform for managing these core processes on the SAP application server to manage processes within the SAP ERP product.</p>
<p>With mergers, acquisitions and extended supply chain, the business processes are spanning multiple systems and business partners. SAP has recognized this industry need; SAP has a clear roadmap towards business process execution and management for extended processes spanning multiple systems, applications, users and partners.</p>
<p>SAP BPM suite is the business process platform for managing these extended processes. However, the SAP BPM product set is a relatively new entrant in the well entrenched BPM market. Hence, customers would tend to evaluate SAP BPM with the mainstream BPM vendors before taking a decision on the BPM adoption.</p>
<p>A few important BPM product evaluation criteria are:<br />
1. Support for long running processes, process versioning, compensating transactions<br />
2. BPM infrastructure related to performance, load balancing and scalability<br />
3. Integration of business rules<br />
4. Security, role based access<br />
5. Reporting capabilities<br />
6. Business activity monitoring<br />
7. Simulation capability<br />
8. Design and Development environment, productivity<br />
9. Operational support, monitoring and management<br />
10. Pricing, vendor stability, installed base, customer references, consultants availability</p>
<p>SAP BPM may not hit the top place today in comparison to the best-of-breed BPM products. However, SAP customers need to look at the holistic view of adopting and standardizing on the SAP platform for all their business and technology needs.</p>
<p>Advantages to standardizing on the SAP BPM platform:<br />
1. Native integration with SAP Business Suite<br />
2. Rapid prototyping capability for integration to SAP suite<br />
3. Reuse of your team&#8217;s skills in SAP development using WebDynpro and ABAP<br />
4. Integration with SAP security and consistent role management<br />
5. Familiar SAP Portal look-and-feel to users for SAP BPM interactions<br />
6. Unified monitoring through SAP Solution Manager<br />
7. Pricing in line with your contract for the SAP product bundle</p>
<p>Our recommendation to customers having a SAP-centric strategy is to adopt SAP BPM for business process management. SAP BPM is central to SAP&#8217;s strategy on business process management, and the product is getting better with every release. Native integration to SAP products (SAP ECC, SAP SCM, SAP CRM etc.), usage of skills of the SAP development team and faster development would outweigh the adoption of a new BPM product in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-bpm-vs-savvion-lombardi-pegasystems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP and MES (Manufacturing Execution System)</title>
		<link>http://www.nagarro.com/blog/sap-and-mes-manufacturing-execution-system/</link>
		<comments>http://www.nagarro.com/blog/sap-and-mes-manufacturing-execution-system/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 14:06:39 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP ERP]]></category>
		<category><![CDATA[SAP MES]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=582</guid>
		<description><![CDATA[Integration of SAP ERP with MES software for shop floor control and automation]]></description>
			<content:encoded><![CDATA[<p>The MES software are adopted by many customers for managing the production and material flow on the shop floor. In this blog, we look at the integration between SAP and the MES software.<span id="more-582"></span></p>
<p>MES stands for Manufacturing Execution System which is used to manage the operations; for example, production order, process data, work instruction storage etc. It is related to the manufacturing and operations. The main purpose of any MES system is to gain visibility, flexibility in operations and manage the supply chain effectively along with consistent documentation. In the market, there are numerous MES systems specific to industry type, product nature and manufacturing complexity.</p>
<p>In general, MES is vendor specific and as per explicit need of the customer. MES systems are independent of ERP systems and are &#8220;add-on&#8221; software. Usually, it is difficult to find all our requirements in any ERP suite that can manage the complex manufacturing flow of products; in such situations, specialized software products such as MES are suited, where ERP functionalities are not sufficient to run the operations. Indeed, MES assists in achieving the multifaceted requirements of the organization.</p>
<p>At the highest level, MES needs integration between the ERP and shop floor automation. SAP maintains the record of materials, BOM, routings and orders; the MES maintains the records/transactions such as WIP (work in progress). For implementing the MES, the consultant has to perform detailed analysis of MES requirements such that they can be mapped with the manufacturing environment. The consultant has to perform the analysis of the integration with SAP PP since there is overlap of functionality offered by SAP and MES software.</p>
<p>MES plays a major role when there are many shared resources or work centers, complex routings (master recipes) and substantial effort to manage the production of material into finished product. MES increases operation excellence and manages asset and its utilization, which in turn reduces overall operational cost of the business.</p>
<p>MES provides capabilities such as plant data collection, production process quality management, order tracking; additionally, the MES system provides detailed scheduling of operations, production process management, performance monitoring, resource allocation, manpower allocation and management control of engineering documents. Resource allocation can be manual or automated in MES. There is real time exchange of messages between the SAP ERP and MES system regarding various facets of the manufacturing operations. Let’s say in case of production management, one can easily download production schedule from SAP to MES system, upload production confirmation/consumption to SAP.  In case of asset management in MES, we can download equipment list from SAP and upload equipment runtime data to MES.</p>
<p>ISA (Instrumentation, Systems, and Automation Society) S95 standard describes the connectivity between ERP and the MES system; this includes MES functionality and database schema, message formats between application systems etc.</p>
<p>Integration &#8211; There are two major integration options for MES integration with SAP<br />
1. SAP xMII (Manufacturing Integration and Intelligence) &#8211; SAP xMII facilitates real-time transactional integration between plant shop floor and enterprise (SAP ERP) systems out-of-the box. By using the schemas available in the xMII repository, we can perform faster integration between xMII and the MES systems conforming to the IS95 industry standard interfaces.<br />
2. SAP PI : This is the integration middleware platform within the SAP NetWeaver suite. We can use SAP PI to exchange information between the MES and SAP ERP products.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-and-mes-manufacturing-execution-system/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SAP CAF to SAP BPM Migration Methodology Techniques and Best Practices</title>
		<link>http://www.nagarro.com/blog/sap-caf-to-sap-bpm-migration-methodology-techniques-and-best-practices/</link>
		<comments>http://www.nagarro.com/blog/sap-caf-to-sap-bpm-migration-methodology-techniques-and-best-practices/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 11:03:10 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP BPM]]></category>
		<category><![CDATA[SAP CAF]]></category>
		<category><![CDATA[SAP Netweaver]]></category>
		<category><![CDATA[SAP WebDynpro]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=579</guid>
		<description><![CDATA[SAP CAF to SAP BPM migration technique and best practices for rapid migration with reduced effort.]]></description>
			<content:encoded><![CDATA[<p>Many customers are having business processes implemented in SAP CAF. With the availability of SAP BPM in SAP CE 7.1, customers needs methodology and techniques to migrate their SAP CAF models to SAP BPM. This blog presents our design recommendations to provide a future proof business process design, and SAP CAF to SAP BPM migration best practices.<span id="more-579"></span></p>
<p>SAP CAF provides discrete steps or activities which can be assigned to a role. The activities in the SAP CAF process can exchange data through process context parameters which is similar to a &#8220;global memory&#8221; where the common process data can be placed and can be accessed from any step in the SAP CAF process.</p>
<p>Though SAP CAF provides a rapid development facility of providing a code-free activity for common integrations such as web service, RFC &#8230;, in real world business processes, we have to use custom developed WebDynpros to implement each business process step.</p>
<p>Our design recommendation for SAP CAF processes is as follows:</p>
<ol>
<li>Do not use the CAF process context for exchanging business data. Keep the process context light. Instead, use a unique process identifier across the process steps to identify the currently running process.</li>
<li>Design each process step as a standalone WebDynpro application. While establishing the functionality of this standalone WebDynpro application, think of it as a reusable component which can be reused later in any future business process step. The only input to this WebDynpro is the unique process instance ID. The standalone WebDynpro application would retrieve the business data from the persistent storage based on this process ID, and present the User Interface to the end user. The user would provide business data to this WebDynpro application; the WebDynpro would conduct its business processing; it would persist the business data into the persistent storage and mark this step as complete.</li>
</ol>
<p>SAP BPM is similar to SAP CAF in the business modelling and process steps:</p>
<ol>
<li>There are business activities in the business process model</li>
<li>SAP BPM provides process context for storing process specific business data.</li>
</ol>
<p>In our experience, if we conduct the design based on our recommendations for SAP CAF process implementation, the migration effort to SAP BPM is significantly reduced. The WebDynpro applications need minor changes to conform to the SAP BPM framework vs the SAP CAF framework for calling WebDynpro methods.</p>
<p>In conclusion, our recommended design approach for standalone WebDynpro design towards reusability, and exchanging minimum data in the process context has stood the test of rapid migration from SAP CAF to SAP BPM with minimum effort or rework.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-caf-to-sap-bpm-migration-methodology-techniques-and-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Workflow and BPM Products : Comparisons and Recommendations</title>
		<link>http://www.nagarro.com/blog/sap-workflow-and-bpm-products-comparisons-and-recommendations/</link>
		<comments>http://www.nagarro.com/blog/sap-workflow-and-bpm-products-comparisons-and-recommendations/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:43:28 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP BPM]]></category>
		<category><![CDATA[SAP Netweaver]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[SAP SOA]]></category>
		<category><![CDATA[SAP Workflow]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=576</guid>
		<description><![CDATA[We provide recommendations for adopting the SAP Workflow, SAP BPM, SAP PI BPM products for implementing your workflow requirements.]]></description>
			<content:encoded><![CDATA[<p>SAP product set has multiple frameworks and tools for workflow and business process management capability such as SAP ABAP Workflow, SAP PI BPM, SAP CE BPM, SAP CE CAF, SAP MDM Workflow, SAP BW Process Chains and SAP Portal Ad Hoc Workflow. We provide product positioning and recommendations for adopting each of these SAP Workflow and BPM products for implementing your workflow requirements.<span id="more-576"></span></p>
<ul>
<li>SAP ABAP workflow is meant to streamline a business process that is completely contained within the SAP server. Typical usages are procurement approvals, leave or travel approvals etc where all the business data and business objects are within the SAP instance.</li>
</ul>
<ul>
<li>SAP PI BPM is used for cross-system integration and managing a higher level business process between disparate systems. A typical scenario is a Sales Order acceptance process where several systems would need to be consulted before accepting the order such as a inventory check, global ATP check etc.</li>
</ul>
<ul>
<li>SAP CE provides workflow capability at the User Interaction level where the user can see a sequence of screens to complete a business process. SAP CAF was the workflow product to provide the BPM capability for implementing a UI centric business process.</li>
</ul>
<ul>
<li>SAP BPM is now replacing the SAP CAF product set to provide a standards based BPM capability. SAP BPM provides modeling and implementation for a UI centric business process &#8211; we can develop the business process based on the BPMN notation supported by most mainstream BPM modeling tools.</li>
</ul>
<ul>
<li>SAP MDM workflow is a lightweight workflow capability within the SAP MDM product to allow the various processing steps for master data management such as cleansing, deduplication, referential integrity and broadcast to other consumers. It is a workflow engine for exclusive use within the SAP MDM product set for finer grained processing.</li>
</ul>
<ul>
<li>SAP BW Process chains are a workflow capability for sequencing data processing steps within SAP BW such as index management, PSA/ODS load, cube load, statistics and aggregate creation.</li>
</ul>
<ul>
<li>SAP Portal provides a capability for creating a workflow on the fly &#8211; it is SAP Portal Ad Hoc workflow capability. This feature allows the portal user to have better collaboration experience such as document proof reading and approval from other team members.</li>
</ul>
<p>Considering the richness of the SAP product suite, there will always be workflow capabilities that are best suited for the specific product set.</p>
<p>Based on our experience, we recommend the following products for your workflow requirements:</p>
<ul>
<li>SAP BPM for UI centric business processes</li>
<li>SAP PI BPM for cross-system business processes</li>
<li>SAP Workflow for workflows within the SAP instance</li>
</ul>
<p>As always, use SAP SOA based interfaces for all interactions between SAP systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-workflow-and-bpm-products-comparisons-and-recommendations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagarro Grows Customer Base in Key Segments by 40% in 2009</title>
		<link>http://www.nagarro.com/blog/nagarro-grows-customer-base-in-key-segments-by-40-in-2009/</link>
		<comments>http://www.nagarro.com/blog/nagarro-grows-customer-base-in-key-segments-by-40-in-2009/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:05:18 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=573</guid>
		<description><![CDATA[In spite of the difficult economic conditions, the number of customers in each of our core market segments – large enterprises, midsize enterprises and technology companies – rose by nearly 40% across the board. Moreover, the range of industries these companies represent covered a wide range of verticals, including technology, manufacturing, aerospace, financial services, healthcare, [...]]]></description>
			<content:encoded><![CDATA[<p>In spite of the difficult economic conditions, the number of customers in each of our core market segments – large enterprises, midsize enterprises and technology companies – rose by nearly 40% across the board. Moreover, the range of industries these companies represent covered a wide range of verticals, including technology, manufacturing, aerospace, financial services, healthcare, retail, media, education and government customers.</p>
<p>What does this tell us? It is difficult to say with certainty that the recession is a thing of the past. However, we can conclude that regardless of size, industry or geography, companies recognize the value of using custom software products to make the most of their unique differentiators. Nagarro is proud to partner with the more than three dozen new customers who invested in long-term competitive strength. We are looking forward to an exciting 2010!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-grows-customer-base-in-key-segments-by-40-in-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make your assumptions explicit</title>
		<link>http://www.nagarro.com/blog/make-your-assumptions-explicit/</link>
		<comments>http://www.nagarro.com/blog/make-your-assumptions-explicit/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 03:06:39 +0000</pubDate>
		<dc:creator>Abhijat Vatsyayan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=545</guid>
		<description><![CDATA[To me, one of the central ideas in programming, and engineering in general, has been how you connect smaller components to build bigger ones. Whether the structures arising from these connections are thought of as layering of components on top of each other (hierarchical/vertical) or are thought of as components living at the same level  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><span style="color: #000000;">To me, one of the central ideas in programming, and engineering in general, has been how you connect smaller components to build bigger ones. Whether the structures arising from these connections are thought of as layering of components on top of each other (hierarchical/vertical) or are thought of as components living at the same level<span id="more-545"></span>  (horizontal), the interfaces that enable connections are the key to how well the sum total of these parts work.  Interfaces are also the key to how easily some of these connections can be broken and re-connected. <!--more-->Description of an interface that I have liked best (by which all I mean is that it was closest to how I myself looked at interfaces) is the one provided by Parnas – “interfaces are assumptions that components make about each other”. As designers, our central goal should be to make these assumptions as explicit and self enforcing as possible. Implicit assumptions are, indeed, the root cause of much evil in the software world.</span></p>
<p><span style="color: #000000;">Since a programming language is just a tool for instructing a general purpose machine to perform certain activities (i.e. program the machine), the complexity rarely lies in the programming language. The complexity lies in the world and the abstractions that we agree upon for simulating certain aspects of the real world in our systems. We often try to bridge gaps in our understanding of the world by making assumptions. In an ideal (simpler, non-real) world, we wouldn&#8217;t have to make any assumptions. In the real world, the best we can do is to make every assumption as explicit as possible and get all stakeholders to buy into those assumptions.</span></p>
<p><span style="color: #000000;">An assumption can be made explicit through documentation but its better if the assumption can be formally described and automatically enforced. Good programs force developers to think through and be conscious of the assumptions even in absence of any documentation.</span></p>
<p><span style="color: #000000;">The idea of making assumptions explicit is not restricted to software interfaces alone. It is just as important to keep this in mind when you gather requirements, write specifications, create design documents, and design and document your processes. It is so important that I, at times, feel that  programmers should have lawyers working with them. Which (sort of) leads me to my other complaint: configuration heavy frameworks. We have spent a lot of time and effort making our programming languages (and APIs to certain extent) explicit and self enforcing, but with every file  based configuration (it’s actually not just file based but files will suffice for the time), we tend to hide some of the assumptions in an isolated, implicit and non-enforceable piece. Google&#8217;s Guice tries to avoid configuration files and Spring has been supporting annotation based dependency injection for a while now but the overwhelming trend even today seems to be: when in doubt, control by configuration.  The specification designers of the Java Enterprise Editions realized this several years ago but there still are configuration heavy frameworks out there. As a programmer, when I start looking into a new framework or a development environment, it’s not the core technology or a new programming language that takes time to learn. It’s always the configuration that takes the longest to figure out.</span></p>
<p style="text-align: justify;"><span style="color: #000000;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/make-your-assumptions-explicit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Integration Best Practices for ISV Development</title>
		<link>http://www.nagarro.com/blog/sap-integration-best-practices-for-isv-development/</link>
		<comments>http://www.nagarro.com/blog/sap-integration-best-practices-for-isv-development/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 16:23:30 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[SAP Netweaver]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=561</guid>
		<description><![CDATA[ SAP integration best practices for flexible SOA based integration for ISV ]]></description>
			<content:encoded><![CDATA[<p>ISV software companies are developing integrations to the SAP platform so that they can address the large SAP customer base. SAP integration approaches are important to provide a modern integration strategy, keep up with the various SAP <span id="more-561"></span>versions and provide a solution suitable for all the SAP customer&#8217;s release versions. There are several SAP integration approaches and we would describe the best practices for selecting them.</p>
<p>At a high level, the various SAP integration approaches are: File, Database, SAP RFC, SAP IDOC and SAP web services. The file and database are not specific to the SAP platform, and are a very common mechanism for data exchange. However, they suffer from latency issues, and are suitable for large data transfers or where the connecting application has rudimentary integration capabilities.</p>
<p>The SAP RFC and SAP IDOC have been the traditional means of integration. SAP RFC is suitable for request-response style of communication. SAP IDOC is suitable for bulk data transfers (10MB and larger message sizes typically). The SAP RFC and SAP IDOC are compatible with the oldest SAP versions, and they are a safe approach towards SAP integration for guaranteeing backward compatibility.</p>
<p>The SAP recommended integration mechanism is to use web services. These web services can be implemented and exposed by the SAP platform which can be easily invoked by the non-SAP application for request-response or data exchange. The web service support is fully supported in SAP ECC6. The web service support is weaker in the earlier SAP releases. However, most SAP customers are in the process of upgrading to SAP ECC6 and we should adopt the web service approach towards integration with the SAP platform. It can be safely assumed that most customers would be at SAP ECC6 release to make use of the web service based integration. This approach complies with the best practices and integration approach recommended by SAP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-integration-best-practices-for-isv-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Remote Consulting : Practical ? Are customers doing it ?</title>
		<link>http://www.nagarro.com/blog/sap-remote-consulting-practical-are-customers-doing-it/</link>
		<comments>http://www.nagarro.com/blog/sap-remote-consulting-practical-are-customers-doing-it/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 11:10:12 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=556</guid>
		<description><![CDATA[SAP Remote consulting, remote services and offsite / offshore based support is being adopted by many customers globally.]]></description>
			<content:encoded><![CDATA[<p>SAP remote consulting is being increasingly adopted by customers globally. There are major benefits for SAP customers such as access to high quality SAP consulting services, access to high quality SAP talent, access to SAP consultants for fractional requirements, reduced consulting<span id="more-556"></span> rates compared to local rates and many others. SAP outsourcing and SAP remote consulting services is being adopted as a central strategy by many large customers globally.</p>
<p>Understandably, customers have hesitation and lack of clarity on how to work with their service provider for remote SAP consulting services. Customers would tend to pay higher to get local SAP consultants rather than &#8220;try&#8221; this new method of getting SAP development and support services.</p>
<p>There are challenges of timezone, language and the absence of physical face-to-face meetings which are the immediate concerns of any customer. Many service providers are located in India, and they are several hours ahead of the customers in Europe and the Americas. The consultants are fluent in spoken and written English, and have exposure to major European languages. We are able to address these challenges through hiring of local consultants that interact with the customer locally. Our teams work on flexible hours to match the working hours of the customer; we use collaboration tools like instant messenger, screen sharing and video conferencing.</p>
<p>Many large customers have been operating internally across their distributed global offices, and they are comfortable operating across languages and timezones. SAP AG, for instance, has the development teams distributed across Walldorf, Germany and the development centers in India and other locations.</p>
<p>Many mid-size SAP customers in the USA and Europe are now seriously considering the option of remote consulting and remote support development due to the access to expert SAP skills and compelling cost advantages. These SAP customers are the mid-size organizations that have traditionally used the local SAP consultants; they are now reaching out to SAP service providers to start a pilot for remote consulting and remote support services.</p>
<p><strong>Conclusion</strong></p>
<p>SAP remote consulting has challenges but it is a practical and cost effective option for getting effective and dependable SAP services. Many SAP customers are able to develop a deep partner relationship with their service providers. SAP customers should attempt to make use of this remote consulting service to complement their existing SAP service processes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-remote-consulting-practical-are-customers-doing-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nagarro Named a “Rising Star” in IAOP’s 2010 Global Outsourcing 100 List</title>
		<link>http://www.nagarro.com/blog/nagarro-named-a-%e2%80%9crising-star%e2%80%9d-in-iaop%e2%80%99s-2010-global-outsourcing-100-list/</link>
		<comments>http://www.nagarro.com/blog/nagarro-named-a-%e2%80%9crising-star%e2%80%9d-in-iaop%e2%80%99s-2010-global-outsourcing-100-list/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 23:31:17 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=550</guid>
		<description><![CDATA[This week we announced that Nagarro has been named to the 2010 Global Outsourcing 100® List by the International Association of Outsourcing Professionals® (IAOP®). Nagarro was selected as a “Rising Star,” a category designated for the top 25 emerging companies on the list (the remaining 75 “Leaders” are considered large companies based on revenues and [...]]]></description>
			<content:encoded><![CDATA[<p>This week we announced that <a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Nagarro%20Named%20to%202010%20Global%20O.aspx" target="_blank"><span style="text-decoration: underline;">Nagarro has been named to the </span><span style="text-decoration: underline;">2010 Global Outsourcing 100® List</span></a> by the International Association of Outsourcing Professionals® (IAOP®). Nagarro was selected as a “Rising Star,” a category designated for the top 25 emerging companies on the list (the remaining 75 “Leaders” are considered large companies based on revenues and headcount).</p>
<p>Nagarro is proud to be listed alongside some of the industry’s most highly regarded outsourcing firms. We fared well in evaluations of our HR practices, management team strength and corporate social responsibility programs. But ultimately, we took the greatest pride in being able to provide <a href="http://www.nagarro.com/NewsEvents/News_Events.aspx"><span style="text-decoration: underline;">objective third-party validation</span></a> and <a href="http://www.nagarro.com/Clients/Our%20Customers%20Speak.aspx"><span style="text-decoration: underline;">glowing customer references</span></a>. As we add this award to Nagarro’s accolades, we are once again grateful to all the customers, partners and employees who have helped Nagarro continue to achieve success.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-named-a-%e2%80%9crising-star%e2%80%9d-in-iaop%e2%80%99s-2010-global-outsourcing-100-list/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Embedding BI in Web Applications</title>
		<link>http://www.nagarro.com/blog/embedding-bi-in-web-applications/</link>
		<comments>http://www.nagarro.com/blog/embedding-bi-in-web-applications/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 14:24:17 +0000</pubDate>
		<dc:creator>vishal.jindal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/embedding-bi-in-web-applications/</guid>
		<description><![CDATA[There was a time when business intelligence was synonymous with intelligence being created long after an activity has taken place. With the business becoming more competitive, there is an inherent need to create intelligence on the fly during the transaction process itself. Business cannot wait for the data to be loaded in the data warehouse [...]]]></description>
			<content:encoded><![CDATA[<p>There was a time when business intelligence was synonymous with intelligence being created long after an activity has taken place. With the business becoming more competitive, there is an inherent need to create intelligence on the fly during the transaction process itself. Business cannot wait for the data to be loaded in the data warehouse during the night batch process and then the analytics routines to run to create intelligence the next day.<span id="more-544"></span> For this to happen, the BI interfaces need to integrated with the transactional application to provide a seamless feel to the end user.<br />
This seamless integration between transactional and BI systems is brought about by using web services in service oriented architecture. The request for information is passed via a web service to the DW or any other data store and the result which may be analytical reports can be transferred via the same services. This integration of analytical function with transaction is called embedded BI.<br />
Similarly on the data integration side, data can be integrated from multiple data sources in real time. Many companies are using traditional ETL tools in a web service environment to achieve this integration. Many data providers use BI delivery mechanisms wrapped in web services to deliver data to their customers.<br />
For creating these embedded business intelligence applications, understanding both domains of service architecture and business intelligence is important, but the key requirement here is to understand the bigger process in which both transaction and decision making is woven together. The application of this concept is huge and can create really enriched applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/embedding-bi-in-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagarro SAP Consulting Provides Banking Solutions in Mexico</title>
		<link>http://www.nagarro.com/blog/nagarro-sap-consulting-provides-banking-solutions-in-mexico/</link>
		<comments>http://www.nagarro.com/blog/nagarro-sap-consulting-provides-banking-solutions-in-mexico/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 09:21:03 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=540</guid>
		<description><![CDATA[Nagarro SAP Consulting has kicked off a challenging new engagement with Mexican mortgage and lending company Patrimonio Hipotecaria.
As part of a company-wide upgrade to the SAP platform, our SAP Consulting team is using the SAP Netweaver ™ platform, SAP IS-Banking and numerous other SAP technologies to help catapult Patrimonio Hipotecaria to the next level of [...]]]></description>
			<content:encoded><![CDATA[<p>Nagarro SAP Consulting has kicked off a challenging new engagement with Mexican mortgage and lending company Patrimonio Hipotecaria.</p>
<p>As part of a company-wide upgrade to the SAP platform, our SAP Consulting team is using the SAP Netweaver ™ platform, SAP IS-Banking and numerous other SAP technologies to help catapult Patrimonio Hipotecaria to the next level of success. Our team will create a 12-fold increase in overall system capacity for Patrimonio Hipotecaria –while improving the consumer experience as well as streamlining internal efficiencies.</p>
<p>You can read more about this new customer engagement in our <a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Nagarro-Taps-Mexican-IT-Market.aspx">recent press release</a> and <a href="http://www.nagarro.com/Documents/Nagarro_Casestudy_Patrimonio.pdf">new customer case study</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-sap-consulting-provides-banking-solutions-in-mexico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing Cloud Based Systems  &#8211; 3. Scalability, Performance and Software Engineering</title>
		<link>http://www.nagarro.com/blog/designing-cloud-based-systems-3-scalability-performance-and-software-engineering/</link>
		<comments>http://www.nagarro.com/blog/designing-cloud-based-systems-3-scalability-performance-and-software-engineering/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 11:26:23 +0000</pubDate>
		<dc:creator>Abhijat Vatsyayan</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=525</guid>
		<description><![CDATA[Scalability and robustness
Since a very compelling business reason for using cloud computing is the ability to scale on demand and when needed, using the best practices and guidelines for designing large scale  distributed systems is a good starting point. While academia has a preference for   distributed transactions, ACID properties, and all kinds of consensus protocols, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Scalability and robustness</strong></p>
<p>Since a very compelling business reason for using cloud computing is the ability to scale on demand and when needed, using the best practices and guidelines for designing large scale  distributed systems is a good starting point. While academia has a preference for   distributed transactions, ACID properties, and all kinds of consensus protocols, you are better off with loosely coupled systems where nodes will eventually reach a consistent state (as opposed to waiting for all nodes in a very large system to  reach a consistent state before proceeding). Considering the state of existing systems, loosely coupled self healing self regulating systems should be preferred over system with exotic distributed transactional properties and consensus protocols.<span id="more-525"></span></p>
<p>Be prepared to lose computational appliances. As you already know, stateful systems are bad for scalability. Avoid storing the state in server sessions. If you are designing a client-server system from scratch, do not store client sessions on the server. For typical web applications, this means that your HTTP calls should be stateless. GWT and other rich AJAX or Flex clients let you do this relatively easily.</p>
<p>You should also try to avoid solutions that try to replicate state across multiple nodes. This almost always leads to overly complicated solutions. You are better off being prepared for  loss of data and designing with the assumption  that client application state, if at all available on the server side, may not  be synchronized across all nodes. UDP, which is often used for discovery, and negotiating other information may not even be available on many cloud platforms.</p>
<p>These are important design decisions that you must make right up front.  Retrofitting these into existing solution might be impossible.</p>
<p><strong>Software engineering</strong></p>
<p>In addition to strictly technical design and runtime issues, you also need to take into account other software engineering issues which affect you development.</p>
<p>As already discussed, you need to have a pool of engineers who understand the technologies you will be using. You may find it hard to find many engineers who have had experience with large scale, self healing, self managing systems. While one of the objectives of most cloud platforms is to take these complexities away from the developers, you will need engineers who understand these concerns.</p>
<p>You also need to find out if the platform you have selected provides good tools for development, deployment and debugging. You should ask the same questions you ask when selecting any technology.</p>
<ul>
<li>Find out if the platform integrates with the IDE you are planning to use (or if the platform comes with an IDE that will serve your development needs).  I would recommend staying away from custom IDEs. Amazon, Google and Microsoft support industry standard IDEs for their respective platforms.</li>
<li>You need to design for testability right from day one and your design should be testable on the platform.</li>
<li>If your organization has an enterprise architecture, you need to be sure that your design and tools meet the standards and approaches laid down by it. Different network topologies, moving data in and out of the cloud and integrating systems running in the cloud with the systems inside the enterprise will come with its own set of challenges. While most enterprises have already started looking into cloud as a viable means for extending their computational needs, they may not be ready for a complete adoption.</li>
<li>Security is an important aspect that you may not have full visibility into when you are running on someone else’s platform. Work with your security experts, quality assurance and compliance team to make sure everyone understands the security risks. A perceived security risk and lack of visibility could be a major problem while adopting any new technology (anyone remember trying to use Java RMI across enterprise firewalls?) and clouds are no exception. In fact the shared nature of the services makes security a bigger concern.</li>
<li>Finally, you need to design for monitoring. It is best if the platform supports automated monitoring. Otherwise you may need to design for it right from day one. Even when the platform provides some tools, you may still have to monitors aspects not supported by the platform tools.</li>
</ul>
<p>This discussing should provide you with a good starting point for creating your own best practices and guidelines. These are important design decisions that you should try to get right  up front.  Retrofitting these into existing solution might be impossible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/designing-cloud-based-systems-3-scalability-performance-and-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP SOA and Web Services &#8211; what determines an Enterprise Service</title>
		<link>http://www.nagarro.com/blog/sap-soa-and-web-services-what-determines-an-enterprise-service/</link>
		<comments>http://www.nagarro.com/blog/sap-soa-and-web-services-what-determines-an-enterprise-service/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 11:58:56 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP enterprise services]]></category>
		<category><![CDATA[SAP eSOA]]></category>
		<category><![CDATA[SAP ESR]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[SAP SOA]]></category>
		<category><![CDATA[SAP SR]]></category>
		<category><![CDATA[SAP web services]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=533</guid>
		<description><![CDATA[SAP SOA design provides guidelines to determine enterprise service and web services. Through SAP eSOA tools, it is possible to manage SAP enterprise services and web services through classification in SAP ESR and SAP SR.]]></description>
			<content:encoded><![CDATA[<p>SAP SOA is now a mainstream architectural strategy being followed by SAP customers for providing future proof integration to SAP and non-SAP systems. However, customers are not clear on the SAP SOA guidelines, and how to truly model, design and develop enterprise level services.<span id="more-533"></span></p>
<p><strong>What is SOA<br />
</strong></p>
<p>Service Oriented Architecture (SOA) is a software design strategy in which there is a service provider and many service consumers. SOA is similar to the distributed computing principles of loosely coupled architecture. SOA differs from the traditional client server architecture in terms of distributing the functionality over separate business objects exposed through service interfaces, loose coupling through independent business objects, durable interface contracts and promoting reuse of functionality through a loosely coupled architecture.</p>
<p><strong>What is a Web Service<br />
</strong></p>
<p>A web service is an interface implementing the industry standards of SOAP and WSDL (and usually HTTP) to expose functionality to a web service consumer. It is a technical implementation to expose functionality through a standards based protocol.</p>
<p>The use of web services has enabled a tremendous leap in enterprise integration. Till a few years back, most applications provided proprietary or rudimentary methods of integration, such as SAP provided SAP RFC, BAPI, IDOC based integrations. Such integrations warranted the use of middleware adapters to provide integration with SAP.</p>
<p>The use of web services now allows a direct integration between applications with the SAP business suite.</p>
<p>Hence, we recommend the usage of web services as a central integration strategy for all integration initiatives.</p>
<p>With the proliferation of web services, it is a challenge to catalog and manage the usage of services in the enterprise. Hence, SAP has provided a robust set of SOA toolsets to manage the usage of services in the enterprise.</p>
<p><strong>What is an SAP Enterprise Service<br />
</strong><br />
An SAP Enterprise service is technically a web service, and it has the following attributes:</p>
<ul>
<li>Based on web services standards of WSDL and SOAP</li>
<li>Based on SAP global data types</li>
<li>The service has been modeled within SAP ESR using business objects, process components and the SAP enterprise model</li>
<li>Published in the SAP SR (service registry)</li>
<li>Guarantee on the availability and functional correctness</li>
</ul>
<p><strong>What if my Web Service does not qualify to be an Enterprise Service<br />
</strong><br />
There are scenarios where the web service interface exposed by an enterprise application is not globally relevant, and is really a technical interface to a localized business functionality. The usage of such a web service may be limited to the department in the organization and its particular IT applications having its own semantics.</p>
<p>Such web services are not Enterprise Services. However, SAP SOA tools can be used to manage and catalog such localized and non enterprise services as well. The SAP SR provides rich taxonomy capabilities to catalog and manage all such services.</p>
<p><strong>Summary<br />
</strong><br />
Web services should be the central integration strategy for all integration initiatives to provide a standards based integration to applications. However, not all web services are meant to be used at an enterprise level across the organization.</p>
<p>The SOA Governance body should approve all enterprise service candidates based on the above mentioned criteria, and use the SAP SOA toolset for cataloging and managing all service in the enterprise.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-soa-and-web-services-what-determines-an-enterprise-service/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Designing Cloud Based Systems  &#8211; 2. System Integration and Development Considerations</title>
		<link>http://www.nagarro.com/blog/designing-cloud-based-systems-2-system-integration-and-development-considerations/</link>
		<comments>http://www.nagarro.com/blog/designing-cloud-based-systems-2-system-integration-and-development-considerations/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 19:03:06 +0000</pubDate>
		<dc:creator>Abhijat Vatsyayan</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=522</guid>
		<description><![CDATA[Enterprise Application Integration
You need to consider how your system integrates with other systems in your organization. Clouds are good but one-off systems that use cloud but do not integrate with existing systems will diminish the payoffs of using a cloud.
You need to consider how your system and its data get integrated with existing data. This [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Enterprise Application Integration</strong></p>
<p>You need to consider how your system integrates with other systems in your organization. Clouds are good but one-off systems that use cloud but do not integrate with existing systems will diminish the payoffs of using a cloud.</p>
<p>You need to consider how your system and its data get integrated with existing data. This may need to be done both ways. Without access to existing data or data created and maintained by your cloud based system, you will again limit the potential of your system under design.<span id="more-522"></span></p>
<p>You may also need to integrate your application with your enterprise’s existing authentication and authorization solution.</p>
<p>Even if integration is not an immediate concern, an architectural choice can make it impossible to integrate even in future. You will need to worry about different networks and firewalls and if the protocols you will use to integrate these systems will work across these networks and firewalls.</p>
<p><strong>Development Considerations</strong></p>
<p>Once you start building the system, you will need to take into account how many engineers and support people are comfortable with the technologies you are using (in this case – something cloud based). You may need to take training and documentation time into account in your plans.</p>
<p>If you need to move large amounts of data between your internal computers and the cloud, you will need to either have sufficiently fast network connections or take the associated delays into account. This delay could play a major role in how you trouble-shoot issues, provide other kinds of support, take backup or just make the data collected by your application available to the users within your internal network.</p>
<p>Offshore development is a reality and if your application is either developed and/or maintained by a team working offshore, network speeds,  latency and round trip times will all come to play a major role. This means your choice of development and support tools and environments should work well over a bad network. VNC and Xserver-clients do not behave well, text terminals work better, light-weight HTML based clients work best. You also need to worry about moving large amounts of data in and out of the cloud from your development and support centers.</p>
<p>If you have specific regulatory compliance requirements, you need to be sure that the platform complies with the standard. For example, Amazon EC2 instances are not PCI (payment card industry) compliant so you should not plan on storing credit card information on Amazon EC2 instances. There could be regulations  regarding sending customer data out of country and when you store data in a cloud,  you (or even the provider) may have no control on where (which node) that data  could be at any given time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/designing-cloud-based-systems-2-system-integration-and-development-considerations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing Cloud Based Systems  &#8211; 1. Introduction</title>
		<link>http://www.nagarro.com/blog/designing-cloud-based-systems-1-introduction/</link>
		<comments>http://www.nagarro.com/blog/designing-cloud-based-systems-1-introduction/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 22:22:03 +0000</pubDate>
		<dc:creator>Abhijat Vatsyayan</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=519</guid>
		<description><![CDATA[Definitions and architecture
I am not a big fan of using definitions as a starting point.  In technology many useful and successful concepts have escaped definition. People still argue about what exactly is an object in an object-oriented system.  There is no scarcity of definitions for software architecture. The internet cannot be pinned down to a simple [...]]]></description>
			<content:encoded><![CDATA[<h3>Definitions and architecture</h3>
<p>I am not a big fan of using definitions as a starting point.  In technology many useful and successful concepts have escaped definition. People still argue about what exactly is an object in an object-oriented system.  There is no scarcity of definitions for software architecture. The internet cannot be pinned down to a simple definition. A definition, however, it is still useful in certain contexts.<span id="more-519"></span></p>
<p>While people might argue about the exact definition of cloud computing (which is probably a futile effort at this time), a working definition can be used to evolve a shared meaning. This is especially useful in software architecture where clear communication among stakeholders is extremely important. Software architects interact closely with business, users, developers, testers, compliance groups and others and before you move your architecture to the cloud, you should state exactly what cloud computing means  in the context of the system you are designing.</p>
<p>Definitions will differ based on whether you are a consumer of the cloud based  services or a provider and with more and more of private and hybrid clouds out there,  organizations and enterprises are fast becoming internal providers of cloud based  computing services which is blurring the line between providers and consumers of a  cloud “style” service.  Today, from a consumer’s point of view, a cloud based compute service:</p>
<ul>
<li>is implemented as a pool of servers though the consumer may not have direct access to the underlying pool.</li>
<li>is characterized by very high degree of automation typically providing both  programmatic access (for integration) and graphical or command line user interfaces.</li>
<li>provides an abstraction of compute services along with constraints that enable  the provider’s offering.</li>
<li>is priced on a pay-as-you-go basis. Consumers only pay for what they use.</li>
</ul>
<p>When you take these along with (effective) infinite scalability and pay-per-use utility model into consideration and design a system for the cloud, there are several issues that you should take  into account. I will discuss a few architectural considerations that must be taken into account while designing a cloud based system. The usual design principles and best practices for building a cloud based are not very different from what you probably already use as part of your enterprise architecture standards and/or other best practices for building large scale distributed systems; but some of these may be unique.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/designing-cloud-based-systems-1-introduction/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SAP Customer&#8217;s UI Technology Choices: SAP WebDynpro vs Microsoft .NET vs Java</title>
		<link>http://www.nagarro.com/blog/sap-customers-ui-technology-choices-sap-webdynpro-vs-microsoft-net-vs-java/</link>
		<comments>http://www.nagarro.com/blog/sap-customers-ui-technology-choices-sap-webdynpro-vs-microsoft-net-vs-java/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 11:48:19 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=516</guid>
		<description><![CDATA[This blog illustrates the decision criteria and strategy for selecting SAP NetWeaver (SAP BPM, SAP BRM, SAP WebDynpro) or Microsoft or Java for custom application for a SAP customer.]]></description>
			<content:encoded><![CDATA[<p><strong>Background</strong><br />
Most SAP customers have enterprise applications developed in other mainstream development platforms such as Microsoft, Java and others. Many customers have existing legacy applications built on multiple technologies and platforms (too numerous to list here).</p>
<p>Going forward, SAP customers are tending to standardize on the SAP platform for running their core business operations. However, for development of custom applications, customers do not have a clear approach towards selecting SAP NetWeaver or the other mainstream platforms for development.<span id="more-516"></span></p>
<p><strong>UI Technology Choice Criteria</strong><br />
Most enterprise vendors such as SAP, Oracle, Microsoft and IBM offer a complete technology stack with comparable features such as Portal, content management, knowledge management, enterprise search, data warehousing, middleware integration, mobility, application server and solution management tools.</p>
<p>A custom application is usually not isolated. In our opinion, the decision to select a development platform for custom applications should be determined based on the following criteria:</p>
<ul>
<li>Developer Skills: If your development team is most comfortable with SAP ABAP (rather than Java), then it would enable you to develop custom applications faster, accurate and perfectly aligned with business expectations. If your development team does not have SAP skills but Microsoft dotNET or Java, then it may be rational to develop custom applications on the Microsoft platform with integration to SAP.</li>
<li>IT comfort to support the development platform: If your SAP IT team is not comfortable with supporting the SAP J2EE application server (for maintenance, patching, upgrade, transports, security), then it may make sense to stick with the SAP ABAP development platform.</li>
<li>Depth of SAP Integration and SAP Business Processes: An SAP platform based development would accelerate development if there is significant SAP integration and business process interaction involved. A custom application is usually not isolated. If the majority of business data is resident in SAP, then an SAP platform based development would be faster and more accurate to end user requirements.</li>
<li>Comfort of end users: This is an important criteria in determining the technology for end user applications. For example, if the end user has a strong liking for Adobe Flex based reports or dashboards, then, getting a similar look-and-feel on other platforms may be a challenge.</li>
</ul>
<p>It should be noted that SAP NetWeaver has strong User Interface and data visualization capabilities. With the introduction of Adobe Flex integration, we can show &#8220;cool&#8221; tables, charts and graphics within an SAP application.</p>
<p><strong>.NET based UI scenarios</strong><br />
If the development team is very comfortable using .NET for all application development, then .NET can be the natural choice for custom applications that have integration to SAP.</p>
<p><strong>SAP WebDynpro based scenarios</strong><br />
SAP NetWeaver is a compelling choice for core business processes that fetch majority of their business data from SAP systems. SAP NetWeaver provides WebDynpro for User Interface development, SAP BPM for a guided business process and SAP BRM for business rules. Most of the development is through model based development,  thereby reducing manual coding to the &#8220;framework exit points or hooks&#8221;. Since SAP NetWeaver has a native integration to all SAP Business Suite systems, this reduces integration effort, increases accuracy of data mapping, and a much higher end user satisfaction with the business process.</p>
<p><strong>Recommendation</strong><br />
As shown above, the use of a development platform is dependant on several criteria, and every customer has unique drivers to opt for a development platform.</p>
<p>In our experience, customers having both SAP and a nonSAP platform (such as Microsoft .NET) have benefited by developing SAP centric business processes on SAP NetWeaver. The SAP and Microsoft platforms co-exist and there is a conscious strategy and decision criteria to determine the use of SAP or Microsoft for a custom application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-customers-ui-technology-choices-sap-webdynpro-vs-microsoft-net-vs-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagarro among first to offer custom application development on Google App Engine cloud computing platform</title>
		<link>http://www.nagarro.com/blog/nagarro-among-first-to-offer-custom-application-development-on-google-app-engine-cloud-computing-platform/</link>
		<comments>http://www.nagarro.com/blog/nagarro-among-first-to-offer-custom-application-development-on-google-app-engine-cloud-computing-platform/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 22:02:37 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=500</guid>
		<description><![CDATA[Last week we announced that Nagarro has joined the Google Enterprise Partner™ program, which extends the power of Google across the enterprise and helps customers get more value out of their Google Enterprise™ deployments. Through this partnership, Nagarro has become one of the first software development firms offering custom application development on Google’s cloud computing platform, [...]]]></description>
			<content:encoded><![CDATA[<p>Last week we<img class="alignleft size-full wp-image-504" title="GEP_Logo" src="http://www.nagarro.com/blog/wp-content/uploads/2009/12/GEP_Logo1.JPG" alt="GEP_Logo" width="109" height="95" /> announced that Nagarro has joined the Google Enterprise Partner™ program, which extends the power of Google across the enterprise and helps customers get more value out of their Google Enterprise™ deployments. Through this partnership, Nagarro has become one of the first software development firms offering custom application development on Google’s cloud computing platform, Google App Engine™.</p>
<p> For our customers, this means that Nagarro continues to be a trusted resource for the newest, most advanced tools and technologies available.  We will keep you posted on our work with Google App Engine as it evolves.  If you have any experiences with Google App Engine to share, we would love to hear your comments as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-among-first-to-offer-custom-application-development-on-google-app-engine-cloud-computing-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Know a High School Math Whiz?</title>
		<link>http://www.nagarro.com/blog/know-a-high-school-math-whiz/</link>
		<comments>http://www.nagarro.com/blog/know-a-high-school-math-whiz/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 21:53:30 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=495</guid>
		<description><![CDATA[Know a high school math whiz? Registration is open for Moody’s Mega Math Challenge
Nagarro shares a love of mathematics with customer SIAM (the Society for Industrial and Applied Mathematics).  This year, Nagarro’s custom applications will be automating the judging process for the Moody’s Mega Math Challenge, an Internet-based math contest co-hosted with SIAM. Participating teams [...]]]></description>
			<content:encoded><![CDATA[<p>Know a high school math whiz? Registration is open for Moody’s Mega Math Challenge</p>
<p>Nagarro shares a love of mathematics with customer <a href="http://www.siam.org/">SIAM</a> (the Society for Industrial and Applied Mathematics).  This year, Nagarro’s custom applications will be automating the judging process for the <a href="http://m3challenge.siam.org/">Moody’s Mega Math Challenge</a>, an Internet-based math contest co-hosted with SIAM. Participating teams of students are given 14 hours to solve an open-ended, realistic, applied math-modeling problem focused on real-world issues.</p>
<p>The content spotlights applied mathematics as a powerful problem-solving tool, a viable and exciting profession, and a vital contributor to advances in an increasingly technical society. Scholarship prizes total $100,000.</p>
<p>If you know a high school math whiz from Maine through Washington, DC who might be interested in participating, please feel free to share information on the contest. <a href="http://m3challenge.siam.org/participate/">Registration</a> closes on February 26, 2010.</p>
<p>Who knows, the winners could be your future employees (or our future customers)…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/know-a-high-school-math-whiz/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SAP Remote Consulting: The practical way to get quality consulting at affordable prices</title>
		<link>http://www.nagarro.com/blog/sap-remote-consulting-the-practical-way-to-get-quality-consulting-at-affordable-prices/</link>
		<comments>http://www.nagarro.com/blog/sap-remote-consulting-the-practical-way-to-get-quality-consulting-at-affordable-prices/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 14:12:55 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=492</guid>
		<description><![CDATA[SAP consulting remotely is catching up as organizations realize the true potential of having access to quality talent in a flexible manner. The direct impact is on cost reduction for SAP support services inhouse and access to SAP talent for a variety of SAP functional areas.]]></description>
			<content:encoded><![CDATA[<p>In most organizations, the SAP infrastructure is maintained through a team of SAP consultants sitting full time in the head office. The SAP team looks after all SAP functional areas, SAP technical development, SAP BASIS maintenance, and interacts with the business to resolve all their SAP issues.<span id="more-492"></span></p>
<p>Often, there are issues related to:<br />
- Having a full time SAP consultant to address a functional area where there are few support requests or development requests<br />
- Having a SAP consultant to manage and juggle many different functional areas. This leads to SLA issues when many issues pile up simultaneously<br />
- Unable to address complex issues due to high costs involved in getting a Senior SAP consultant to the customer location<br />
- Unable to implement advanced SAP modules (such as SAP APO) due to lack of inhouse talent for current and future support needs for these advanced modules</p>
<p>For all the above reasons, the customer organization continues to stick with the current implementation and the older SAP releases, and unable to innovate or implement advanced SAP products.</p>
<p>Remote consulting is catching up with many customers to address all the above issues.</p>
<p>Remote consulting allows you the following benefits:<br />
- Access to advanced SAP skills and SAP talent. It is a fact that many Senior SAP consultants are unable to travel as much as they would like to! Hence, many Senior SAP consultants are constrained to serve their local geographic areas only.<br />
- Cost reduction and control of SAP support budget. Remote consulting is always significantly cheaper than calling the Senior SAP consultant to physically arrive at our offices.<br />
- Access to SAP functional services on Fractional basis. Many SAP service providers offer SAP services at less than full time basis. This is valuable for companies to get support for SAP services that have less support requests.</p>
<p>Today, many customer organizations are becoming receptive to the idea of SAP services delivered remotely. For many large global organizations, they are already geographically distributed over multiple locations and timezones and collaborating over the phone, Webex and VPN. For most organizations, remote consulting fits seamlessly with their current SAP team. Considering the advantages of access to sparse SAP talent and huge cost advantages, SAP remote consulting is the smart way to get access to SAP talent.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/sap-remote-consulting-the-practical-way-to-get-quality-consulting-at-affordable-prices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Architectural Principles for usage of SAP PI in a SOA environment</title>
		<link>http://www.nagarro.com/blog/architectural-principles-for-usage-of-sap-pi-in-a-soa-environment/</link>
		<comments>http://www.nagarro.com/blog/architectural-principles-for-usage-of-sap-pi-in-a-soa-environment/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 21:15:29 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/architectural-principles-for-usage-of-sap-pi-in-a-soa-environment/</guid>
		<description><![CDATA[We discuss the architectural principles and best practices for usage of SAP PI in an Enterprise SOA environment in a SAP centric landscape.]]></description>
			<content:encoded><![CDATA[<p>In our experience working with customers who want to adopt Enterprise SOA in an SAP environment, many customers tend to believe that SAP PI is a prerequisite to enabling and consuming enterprise services. Since SAP&#8217;s service management tools of SAP ESR and SAP SR are provided by the SAP PI infrastructure, customers tend to believe that they need to use SAP PI in all service interactions.</p>
<p>In this blog, we would present guidelines and best practices for usage of SAP PI in an Enterprise SOA environment.<span id="more-489"></span></p>
<p><strong>Usage of SAP ESR and SAP SR for managing enterprise services:<br />
</strong>- SAP ESR and SAP SR should be used for modeling and publishing enterprise services in the landscape.<br />
- SAP ESR and SAP SR are provided by SAP PI and SAP CE infrastructures. Hence, the customer could install either SAP PI or SAP CE to get access to the SAP ESR and SAP SR instances.<br />
- SAP ESR should be used to model and manage all SOA assets. We can use it to model SAP and nonSAP services. SAP ESR models can be used to directly implement the service implementation in SAP. With SAP ESR model, it is not possible to directly implement a .NET or J2EE service. However, the .NET or Java service signature can be made to conform to the Service definition described in SAP ESR.<br />
- Enterprise Services Repository used to define re-useable services rather than classical interfaces<br />
- SAP SR can be used to manage the publication of SAP and nonSAP services.</p>
<p><strong>Usage Scenarios of SAP PI:<br />
</strong>- All web services and enterprise services that are being exposed to the customer should go through SAP PI. This is to ensure scalability, security and availability, since going through a managed middleware ensures the quality of service (QoS) for the enterprise service. For example, we cannot expose an application web service directly to a customer in a B2B scenario since the security and load are unpredictable<br />
- SAP PI is used to create abstraction between heterogeneous sender and receiver systems based on SOA standards to provide unified access to legacy systems.<br />
- SAP PI 7.1 is for mainly leveraging functionalities for service enablement, and service and process orchestration<br />
- Integration between non-SAP system and non-SAP system.<br />
- Use SAP PI for both A2A, B2B integrations including EDI<br />
- Use SAP PI for service enabling legacy applications that lack a framework for exposing web services.<br />
- For SAP PI 7.1, many SOA enabling standards or WS standards are supported as part of this release making it the core technology enabler of Enterprise SOA. (e.g. WS Reliable Messaging, WS Security, SAML, WS Policy, WS PolicyAttachment  etc.)<br />
- For a predominantly SAP landscape, SAP PI should be the strategic integration platform and the enterprise wide service bus</p>
<p><strong>When not to use SAP PI in enterprise SOA:<br />
</strong>- Recent release of the SAP platform (SAP ECC6) has native capability to expose enterprise services. The service should be modeled in SAP ESR and implemented in SAP ECC6. This service is readily available for consumption across the enterprise without the intervention of SAP PI or any other middleware.<br />
- SAP PI usage is not recommended for synchronous communication since it places a significant load on the infrastructure services for servicing a synchronous request. Also, SAP PI cannot guarantee the QoS and response time in processing a sync request.<br />
- For User Interface scenarios (such as a WebDynpro UI), the UI can directly consume enterprise services. SAP PI should not be used in UI driven scenarios if the backend is exposed as enterprise services.<br />
- If a nonSAP backend such as .NET or J2EE or any other platform is exposing business services in a UI scenario, SAP PI is not needed for intermediation. The UI such as SAP Portal based User Interface through various SAP NetWeaver technologies (SAP CAF, SAP BPM, WebDynpro etc.) can directly consume nonSAP services.</p>
<p>In conclusion, SAP PI should be the strategic integration platform in a SAP centric landscape. However, SAP PI should be used as an intermediary if it adds value between the sender and the receiver entities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/architectural-principles-for-usage-of-sap-pi-in-a-soa-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Case study: How a usability workshop can work wonders</title>
		<link>http://www.nagarro.com/blog/case-study-how-a-usability-workshop-can-work-wonders/</link>
		<comments>http://www.nagarro.com/blog/case-study-how-a-usability-workshop-can-work-wonders/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 11:54:22 +0000</pubDate>
		<dc:creator>Manas Fuloria</dc:creator>
				<category><![CDATA[Usability]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=482</guid>
		<description><![CDATA[We have all heard the usability spiel: that technology is more or less a commodity, that ease of use – and in fact “delight of use” &#8211; should be paramount. We have also heard the horror stories of expensive enterprise and consumer applications that failed miserably because they were just too “kludgy” to use. Yet [...]]]></description>
			<content:encoded><![CDATA[<p>We have all heard the usability spiel: that technology is more or less a commodity, that ease of use – and in fact “delight of use” &#8211; should be paramount. We have also heard the horror stories of expensive enterprise and consumer applications that failed miserably because they were just too “kludgy” to use. Yet even today, for every wonderfully user-centric design (think iPhone) there are dozens of desktop or web applications that are boring at best, and simply unusable at worst.</p>
<p>Why is this so? Perhaps the problem is that when you are early in the SDLC, there are so many other challenges and moving parts that you have little time to worry about usability. You worry that bringing the “naïve” users in for design discussions will just derail the project or send it off on a tangent. On the other hand, if you wait till you are through with version 1, you have been compromised as well &#8211; it requires great courage to admit at this point that usability is poor and that major elements of the application have to be re-designed.</p>
<p>These are formidable challenges. Yet we at Nagarro recently had a very positive series of usability-related discussions with a major client, which may be useful to recount in this context.<br />
<span id="more-482"></span><br />
The client is one of the world’s leading travel-related companies. We are building a business-critical application for this company that will be used by a handful of users. The IT project management on the client side had invested a lot of intellectual muscle into the functional and algorithmic design of the application. We too put in a lot of effort to make mockups of the entire application UI and these were approved by the client – but by the IT project management, not by the users. The users did see the application from time to time, but in short bursts and they definitely did not have enough time to play with it and give their feedback.</p>
<p>Then after we had a successful development release and were reviewing progress with senior folks on both sides, we all collectively realized that the usability of the application left quite a bit to be desired. It was a depressing moment.</p>
<p>It wasn’t just a matter of aligning data elements or fiddling with the color palette.</p>
<p>It wasn’t even a matter of trying to streamline workflows to reduce the number of clicks required for each task.</p>
<p>It was the fact that the application’s UI looked like it had been designed by highly analytical engineers and scientists, which it in fact had. Would the users – who were neither engineers nor scientists &#8211; find it easy to use? Would they buy into it? Would they find all the features that they would need?</p>
<p>Luckily, the client team comprised very intelligent and wise folks. Rather than blame the team members on either side, the client’s senior VP-level executive said, “We should think of this as continuous improvement. You all did a great job, but we now see it can make it even better. Let’s see this as a positive opportunity and move forward.”</p>
<p>So, no blame game, no recriminations, no requests for “free rework”. The gentleman basically had the wisdom to see that when you are building something highly innovative, you may have to iterate to get the design just right.</p>
<p>Still, on our part, we offered the client a free usability workshop with our best consultant, a person skilled at combining “right brain” creative thinking with the “left brain” analytical thinking required for software design. The users were the star participants in the workshop, which started from first principles – what exactly is it that the users want to achieve? Our engineering team got the chance to put itself into the shoes of the users and try to come up with metaphors and overarching design principles that would work for them and, hopefully, delight them.</p>
<p>The workshop ran for two days and turned our previous thinking on its head. Yet everyone was thrilled with the insights and we agreed we’d run such workshops for each new project. The client agreed to fund a few person-months of effort to upgrade the user interface. Perhaps the cost of the overall development rose by 10%. But as a result, the chances of the application being very successful and useful in the hands of the users probably doubled or tripled.</p>
<p>And that’s always the most important metric!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/case-study-how-a-usability-workshop-can-work-wonders/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benefits of SAP Integration / SAP based product capability for Independent Software Vendors (ISV)</title>
		<link>http://www.nagarro.com/blog/benefits-of-sap-integration-sap-based-product-capability-for-independent-software-vendors-isv/</link>
		<comments>http://www.nagarro.com/blog/benefits-of-sap-integration-sap-based-product-capability-for-independent-software-vendors-isv/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 12:13:17 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=477</guid>
		<description><![CDATA[For an ISV looking to break-into the SAP customer base (which consists of a significant number of Fortune 1000 companies), it is almost mandatory to demonstrate SAP compliance. In this blog, we provide approaches for the ISV to reach this milestone.]]></description>
			<content:encoded><![CDATA[<p>Independent Software Vendors (ISV) are companies that have niche product offerings for a certain industry area. ISVs typically have acquired their deep understanding of an industry through years of working in their particular focus areas. You would typically find the ISVs to have &#8220;champions&#8221; and well know industry experts in their area of expertise. Hence, these ISVs are extremely well known in the industry, and they may enjoy comfortable market share in the particular industry vertical in a certain geography.<span id="more-477"></span></p>
<p>So far so good. With increasing globalization of the customer base, we are witnessing several movements that are making the ISVs to sit up and take action to preserve their market share. First of all, the customers themselves are getting acquired by larger companies, and &#8220;acquiring&#8221; globally recognized names. The decision making policies are now getting centralized, and all decisions need to adhere to &#8220;global standards&#8221; such as compliance of new software products, interoperability, multilingual multicurrency support etc. Additionally, the ISVs are seeing increasing competition from the larger &#8220;less specialized&#8221; players who are coming up with offerings to compete head-on with the ISVs. Finally, the customers are now less excited about buying &#8220;best of breed&#8221; applications, and leaning towards solutions from a single product vendor which complies to their global IT standards. For ISVs, deep functionality is not enough to break into larger customers who have a certain gate-criteria for qualifying all software solutions.</p>
<p>SAP is the predominant ERP globally; it is run by a large number of global corporations across Auto, High Tech, CPG, Retail, Chemical, Pharmaceutical, Oil&amp;Gas etc. These global corporations have acquired global footprint across Americas, Europe and Asia with distributed IT management teams. For consistent management, most corporations mandate SAP compliance of all software solutions.</p>
<p>For an ISV looking to break-into the SAP customer base (which consists of a significant number of Fortune 1000 companies), it is almost mandatory to demonstrate SAP compliance. SAP compliance would be one of the earliest concerns to be brought up by the IT during the product evaluation and due diligence phase.</p>
<p>Then why wait ?</p>
<p>SAP compliance can be achieved through the following two approaches:<br />
- Migration of the product&#8217;s important features to the SAP platform: Though this may seem like a more difficult approach, it is not. We have helped customers to rapidly build important features of the product using the SAP NetWeaver platform in a short span of a few weeks. The initial product release is adequate to support the ISV Marketing team to start socializing with the SAP customers.<br />
- Integration of the ISV product with SAP: This is a common approach to integrate the ISV product with the SAP business suite. We typically use SAP PI (SAP XI) middleware platform to provide data conversion between the ISV product and SAP proprietary data formats.</p>
<p>Finally, nothing beats SAP Certification! An SAP certified product or SAP certified integration provides assurance to the customer that the deliverable meets SAP&#8217;s quality and data interoperability standards.</p>
<p>How do we do it ? ISVs are understandingly not SAP experts. The best way is to partner with an SAP Services provider who has previous experience in working with ISVs and has completed several such projects. The ISV should not need to learn SAP or get into the nitty-gritty of SAP Certification, all these activities are the responsibility of the SAP services provider.</p>
<p>What would be the effort ? As with any IT project, we need to set the boundaries and scope of work to reach the effort and costs. As a rough estimate, an ISV can achieve their initial goals through a 3 month project with a 3 person team; With capable SAP expertise available offshore, the offshore costs should hopefully justify an SAP migration project to make it into your engineering and marketing budgets for the next quarter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/benefits-of-sap-integration-sap-based-product-capability-for-independent-software-vendors-isv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance Tuning a Complex Application: An Example</title>
		<link>http://www.nagarro.com/blog/performance-tuning-a-complex-application-an-example/</link>
		<comments>http://www.nagarro.com/blog/performance-tuning-a-complex-application-an-example/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 19:33:48 +0000</pubDate>
		<dc:creator>Ram Kripal Prasad</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=464</guid>
		<description><![CDATA[We recently undertook an exercise to analyze the database performance, and subsequently optimize the overall performance for large, data-intensive business application. This post outlines the approach we adopted to analyze the problem, and how we went about arriving at solutions.
A Bit of Background
The application database is SQL Server 2005, single instance (non replicated, non clustered). [...]]]></description>
			<content:encoded><![CDATA[<p>We recently undertook an exercise to analyze the database performance, and subsequently optimize the overall performance for large, data-intensive business application. This post outlines the approach we adopted to analyze the problem, and how we went about arriving at solutions.<span id="more-464"></span></p>
<p><strong>A Bit of Background</strong><br />
The application database is SQL Server 2005, single instance (non replicated, non clustered). The database has patient data (Electronic Medical Records) and the end clients (clinics and hospitals) access this data via web services. The database had around 3 million records, which they expected to scale to around 5 million. The software product vendor was receiving performance related complaints from end customers, and had solicited our help in resolving these issues.</p>
<p><strong>Analysis</strong><br />
The first step was to establish the nature of the performance problems. For this we worked with the business and development teams of ISV to determine the nature of the performance issues. Users had reported performance problems in the following situations:</p>
<ul>
<li>Longer than expected response times for transactions or queries.</li>
<li>Insufficient transaction throughput to complete the required workload.</li>
<li>Decrease in transaction throughput.</li>
</ul>
<p>We needed to</p>
<ul>
<li>Determine if the performance degrades with increased load or with increase in data in the system.</li>
<li>Determine the volume of historical data and if they cause long running queries.</li>
<li>Examine the hardware configuration (RAID, multiple disk controllers) of disk subsystems.</li>
<li>Take regular measurements of resource utilization and database activity and determine whether there is a disproportionate utilization of CPU, memory, disks or network. System Monitor (aka Performance Monitor) helps to identify potential hardware bottlenecks w.r.t. a few key counters (see <a href="http://www.sql-server-performance.com/articles/per/performance_audit_part2_p1.aspx"><span style="color: #0000ff;">http://www.sql-server-performance.com/articles/per/performance_audit_part2_p1.aspx</span></a>) and potentially obvious performance problems.</li>
</ul>
<p>The next step was to establish performance objectives. For this we developed a plan for measuring the system performance. The most common metrics used for measuring database application performance are:</p>
<ul>
<li>transactions per second (TPS)</li>
<li>response time</li>
</ul>
<p>We then needed to define clear objectives for the above metrics. Selecting a tool (we evaluated some of the many available; refer: <a href="http://www.testingfaqs.org/t-load.html"><span style="color: #0000ff;">http://www.testingfaqs.org/t-load.html</span></a>) that can automate measuring the TPS and/or response times by generating peak / off–peak / average load conditions.</p>
<p>We would regularly monitor the application performance on these metrics to get a feedback on whether the optimization changes are reaping any improvements.</p>
<p>The next post shall cover a discussion of the various solution approaches that could be adopted to improve the database problems once the problems (or at least some pattern that may be imminent in the problem) have been identified. I shall describe the various areas and perspectives of looking for a solution to the database performance problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/performance-tuning-a-complex-application-an-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing Remote Development for SAP NetWeaver Projects</title>
		<link>http://www.nagarro.com/blog/how-to-conduct-remote-development-for-sap-netweaver-projects/</link>
		<comments>http://www.nagarro.com/blog/how-to-conduct-remote-development-for-sap-netweaver-projects/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 12:41:34 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=468</guid>
		<description><![CDATA[Overview and best practice for conducting SAP Netweaver project with a distributed team and remote located offsite team.]]></description>
			<content:encoded><![CDATA[<p>SAP NetWeaver projects are characterized by a high degree of core development activities, and less of business re-engineering or process re-engineering or SAP systems configuration. Hence, the extent for interaction with the customer&#8217;s Business team is much less as compared to a &#8220;traditional&#8221; SAP development project.<span id="more-468"></span></p>
<p>An SAP NetWeaver project would typically consist of identifying new business processes to be implemented, new SAP BW reporting, new data integrations etc. The SAP Netweaver is a platform that provides implementation of new processes and data visualization applications where the SAP ECC is at the backend. Hence, the need for SAP ECC core configurations is minimal.</p>
<p>As with any development project, the initial phase of the project needs close understanding of business requirements. This requires the Business process consultant to personally interact with the business and identify the business requirements through workshops, white boarding and discussions over printouts/charts/sheets etc. This process typically takes 10% of the total project effort for capturing the high level requirements. This phase of the projet has to be conducted onsite to fully interact with the business and understand their true requirements and aspirations.</p>
<p>Thereafter, the next level of details can be arrived at by the remote development team located at the offshore location. This includes creation of mock User Interface and mock process walkthrough to confirm the requirements. This is a partial development activity and can be efficiently conducted offsite. All artifacts can be discussed with the customer team remotely, with the partial assistance of the onsite consultant. This activity may take about 20% of the total project effort.</p>
<p>Thereafter, the design and development phase of the project can be totally conducted offshore. This phase takes 40% of the total project effort and needs access to deep SAP Netweaver expertise. We do not need close co-ordinatation with the business for this phase. Hence, this phase is ideally suited for offshore execution because it needs access to deep SAP Netweaver expertise and can lead to significant cost reductions for the customer.</p>
<p>The object is unit tested, and then provided to the customer for integration testing and acceptance testing. Thereafter, the approved objects can be deployed to production. All these activities take the remaining 30% of the project effort.</p>
<p>As we can observe, the initial phase of capturing high level business requirements needs an onsite presence to determine scope and negotiate with the Business to reach a technically feasable and cost-effective solution. Almost all the remaining activities can be efficiently conducted offsite to leverage the team knowledge and SAP Netweaver expertise available in the offshore team.</p>
<p>In our direct experience, we are observing customers to benefit through SAP NetWeaver offshoring by getting access to Netweaver experts located at offshore locations, and also get cost savings due to lower cost offshore pricing. This lives up to our motto of doing the &#8220;right activities at the right location&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/how-to-conduct-remote-development-for-sap-netweaver-projects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Behind the Scenes at Qtrax</title>
		<link>http://www.nagarro.com/blog/behind-the-scenes-at-qtrax/</link>
		<comments>http://www.nagarro.com/blog/behind-the-scenes-at-qtrax/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 18:29:25 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=455</guid>
		<description><![CDATA[
We recently caught up with Chris Roe, CTO of Qtrax, in New York to find out more about his experience as a Nagarro customer. Qtrax and Nagarro have been working around the clock for months preparing for the launch of Qtrax 1.0, the industry’s first free and legal peer-to-peer music download service.  Qtrax had a [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/-df0hsTH-VA&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/-df0hsTH-VA&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>We recently caught up with Chris Roe, CTO of <a href="http://music.qtrax.com/">Qtrax</a>, in New York to find out more about his experience as a Nagarro customer. Qtrax and Nagarro have been working around the clock for months preparing for the launch of Qtrax 1.0, the industry’s first free and legal peer-to-peer music download service.  Qtrax had a tall order – linking a massive music file system with ad-serving features while enabling millions of site visitors to rapidly download an unlimited number of high-quality music files.</p>
<p>Oh, and did we mention that they needed it done in just four months? Click on the video to hear how Nagarro rose to the challenge.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/behind-the-scenes-at-qtrax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET Reflection: The untouchable? No, not at all.</title>
		<link>http://www.nagarro.com/blog/net-reflection-the-untouchable-no-not-at-all/</link>
		<comments>http://www.nagarro.com/blog/net-reflection-the-untouchable-no-not-at-all/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 14:08:25 +0000</pubDate>
		<dc:creator>Vikas Burman</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/net-reflection-the-untouchable-no-not-at-all/</guid>
		<description><![CDATA[I am a big fan of .NET reflection. However most often you will hear more of critics than praise. The biggest of all &#8220;It’s slow.&#8221; Web is full of cautions and warnings telling you not to use it. Some will go as far as saying that if you care for performance, do not even think [...]]]></description>
			<content:encoded><![CDATA[<p>I am a big fan of .NET reflection. However most often you will hear more of critics than praise. The biggest of all &#8220;<em>It’s slow.</em>&#8221; Web is full of cautions and warnings telling you not to use it. Some will go as far as saying that if you care for performance, do not even think about using reflection. If you go on and read beyond the highlight points, you will realize that a large percentage of these warnings and cautions are discussing a particular scenario where some developer failed to get what s/he was trying to achieve. And while being judgmental with the experiment a generalized statement like this comes up as an end result.<span id="more-453"></span></p>
<p>The problem of making such general rules about programming practices is that you tend to miss out the benefits by following these rules too literally in every context. Think it on the lines – Reflection or any feature for that matter, if included must have a valid reason for its presence. We should be able to see and know how and when to use it and when specifically to avoid it.</p>
<p>Reflection is slow; but the question is <em>how slow is slow?</em> One should worry about performance but this worry should not keep you away from making best use of a technology. If you look around in .NET world, you will realize that .NET framework itself uses a lot of reflection. Ability to store meta-data about your code and to be able to use it at runtime opens the door to a whole lot of possibilities limited only by your imagination.</p>
<p><!--more--></p>
<p>If you rethink it it’s just one another way of storing and working with information; difference being that this information is stored in code itself. So instead of retrieving information from some XML file or database, you are pulling it in from the code itself. Therefore your concerns towards writing optimized code while reading data from XML (e.g., load once read many times) or from database (e.g., making fewer trips to database), etc. will not be much different when using reflection. You might want to fetch type info once and hold it for future calls as well instead of fetching it every time you need it.</p>
<p>As in case of database, we know where to use joins, on which columns to create indexes and which <em><strong>where</strong></em> clauses to use to get optimized execution time; in case of reflection too there is a well defined grammar to make optimized reflective calls. For example, using <strong><em>BindingFlags</em></strong> enumeration correctly, not trying to use <strong><em>IgnoreCase</em></strong> flag, and limiting your searches to <strong><em>public</em></strong> or <strong><em>static</em></strong> or <strong><em>instance</em></strong> members as required, will definitely give you best possible results. <a href="http://msdn.microsoft.com/en-us/magazine/cc163759.aspx">Joel Pobar’s post</a> talks at length about how reflection works internally and is a good reference to understand how to avoid performance pitfalls.</p>
<p>Don’t just assume that reflection will hit the performance, but use it, test it, tweak it for performance optimization and enjoy the flexibility it provides. If you think your problem statement has a solution in reflection; don’t hesitate in going ahead just because someone says that it will be slow. If this turns out to be slow; there are ways to optimize it too. For instance <a href="http://msmvps.com/blogs/jon_skeet/archive/2008/08/09/making-reflection-fly-and-exploring-delegates.aspx">Jon Skeet’s post</a> talks about using <strong><em>Delegate.CreateDelegate</em></strong> to turn a <strong><em>MethodInfo</em></strong> into a strongly-typed delegate. This can improve performance massively in scenarios where you need to set the same properties multiple times. Essentially this means that a lot of the type checking is done once when you created the delegate, rather than on every invocation.</p>
<p>Let’s explore a scenario where reflection is no harm to use and probably the only way you can achieve the end result with.</p>
<p><strong><em>You want dynamic extensibility to your desktop application; your revenue model includes selling various groups of features separately. You do not want to build multiple deployment packages and you want to be able to provide even more features to your customers after they have started using your application.</em></strong> How would you do it?</p>
<p>You might do this by developing a plug-in model in your application.</p>
<p>You may define an <em>IMyAppPlugin</em> interface which can be implemented in each of your application’s plug-in assembly implementing a specific feature. At minimum you may have following definition:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">interface</span> IMyAppPlugin
{
    Guid Identifier { get; }
    <span class="kwrd">string</span> Name { get; }
    <span class="kwrd">string</span> Copyright { get; }
    <span class="kwrd">bool</span> Start(IHostApp hostApp);
    <span class="kwrd">void</span> Stop();
    <span class="kwrd">bool</span> Run();
}</pre>
<p>You will not have any reference of these assemblies in your project at design time. Its only at runtime when you will try to discover these plug-in assemblies (using some mechanism such as looking in specific folder or registry, an XML file or anything else) and load it using reflection.</p>
<p>You will write code to find and create instance of the class that implements this IMyAppPlugin interface. Once you have this object you can initialize it by calling its <em>Start()</em> method passing your application’s reference as required. You may also write code to add access points (such as menu items) for this dynamic functionality to appear in your application’s user interface when this plug-in is successfully loaded.</p>
<p>A call to <em>Run()</em> method anytime after this will do what is desired.</p>
<p>So essentially what we are doing here is that we have loaded the assembly using reflection and we are calling methods dynamically again using reflection. If we just go by numbers, yes dynamically invoking a method is slow. Referring to <a href="http://www.west-wind.com/weblog/posts/351.aspx">Rick Strahl’s post</a> we can say that invoking a method dynamically is about 3.5 to 4 times slower than directly calling of a method. But again the question needs to be asked – <em>how slow is slow?</em> Here we are talking about few milliseconds extra. Unless you are making calls in a loop for a large number of times, does it really matter in the larger perspective of a typical application? Most likely – No!</p>
<p>Remember .Net Framework and especially ASP.Net uses a lot of reflection internally to provide dynamic execution of code and controls.</p>
<p>Talking again about the above scenario, if not reflection, do we have some other relevant approach of dynamically extending the application? You may talk about using COM interfaces to achieve it – but reflection or no reflection – the essence of every approach is to dynamically resolve the address of the method to be called, which is the only major difference wrt static calls where this address is readily available.</p>
<p>This is just one scenario where reflection proves to be the most effective and simplified approach to work with. There are a lot of other scenarios where reflective access to properties, fields and methods provides enormous flexibility that simply wouldn&#8217;t be there otherwise.</p>
<p>With <a href="http://msdn.microsoft.com/en-us/library/dd233052(VS.100).aspx">Dynamic Language Runtime</a> (DLR) in .NET 4.0 we are heading towards a cleaner reflection. Eventually this may replace reflection how we see it today, due to its simplified code and caching advantages. In-fact as mentioned in this <a href="http://blogs.msdn.com/hugunin/">Jim hugunin’s post</a>, it appears that DLR too internally makes good use of reflection.</p>
<p>In short, do not shy away from using reflection, just because you hear warnings about it. Always verify if these warnings apply to your project or scenario. Often they will not. As they say, “trust but verify!</p>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/net-reflection-the-untouchable-no-not-at-all/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My Tryst with “The Gu”</title>
		<link>http://www.nagarro.com/blog/my-tryst-with-%e2%80%9cthe-gu%e2%80%9d/</link>
		<comments>http://www.nagarro.com/blog/my-tryst-with-%e2%80%9cthe-gu%e2%80%9d/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 04:28:56 +0000</pubDate>
		<dc:creator>Harish Tejwani</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=440</guid>
		<description><![CDATA[I recently got the opportunity to represent Nagarro at a Microsoft Event,  where Scott Guthrie was speaking. Scott runs Microsoft’s Developer Division and is a great visionary and speaker. After the keynote there was a informal session of developers with “The Gu” on what’s coming in .NET. It was amazing to see how Scott [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got the opportunity to represent Nagarro at a Microsoft Event,  where Scott Guthrie was speaking. Scott runs Microsoft’s Developer Division and is a great visionary and speaker. After the keynote there was a informal session of developers with “The Gu” on what’s coming in .NET. It was amazing to see how Scott went down to lowest level details in explaining everything and anything related to .NET technologies be it on Silverlight 3.0, .NET RIA Services, ASP.NET MVC, IIS 7.0, SEO and so on.<span id="more-440"></span></p>
<p>At end there was Q&amp;A session where I ended up raising my hand and asking a question  “with so many technology choices available even in .NET for same tasks, the choice picking correct ones becomes tougher, with lack of guidance and gave several examples”. The reply was “That’s a great question” followed by a long answer – explaining the reason why this has happened and a nod of creating more practices and patterns around this topic. Highly encouraged, I ended up asking many more – till I was shut down by moderator! I ended up getting his autograph and a picture together using my low end camera phone – but a moment to remember!</p>
<div id="attachment_443" class="wp-caption alignleft" style="width: 160px"><img class="size-thumbnail wp-image-443" title="Tryst with Gu" src="http://www.nagarro.com/blog/wp-content/uploads/2009/10/Tryst-with-Gu-150x150.jpg" alt="My Tryst with Gu" width="150" height="150" /><p class="wp-caption-text">With &quot;The Gu&quot;</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/my-tryst-with-%e2%80%9cthe-gu%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing Series: Exploring the Google App Engine Java Runtime Environment</title>
		<link>http://www.nagarro.com/blog/cloud-computing-series-exploring-the-google-app-engine-java-runtime-environment/</link>
		<comments>http://www.nagarro.com/blog/cloud-computing-series-exploring-the-google-app-engine-java-runtime-environment/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 17:42:59 +0000</pubDate>
		<dc:creator>Ram Kripal Prasad</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Runtime Environment]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=418</guid>
		<description><![CDATA[Google recently released a Java runtime environment for their App Engine platform. As a software development organization, this offering is of special interest to Nagarro, as it offers several advantages over competing cloud hosting environments. Hosting a Java application on Google’s infrastructure provides automatic scaling and load balancing, a feature that is of interest to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-424" title="Various Cloud Formations" src="http://www.nagarro.com/blog/wp-content/uploads/2009/09/photo_13459_20090818-150x150.jpg" alt="Various Cloud Formations" width="78" height="78" />Google recently released a Java runtime environment for their App Engine platform. As a software development organization, this offering is of special interest to Nagarro, as it offers several advantages over competing cloud hosting environments. Hosting a Java application on Google’s infrastructure provides automatic scaling and load balancing, a feature that is of interest to a number of our software product development ISV customers. To better understand the issues and risks, we conducted an internal exercise to assess the technical effort required to port an existing application to the Google App Engine for Java (GAE-J).<span id="more-418"></span><br/><br/><strong>A Bit of Background</strong><br/><br/>GAE-J is a complete development stack that uses familiar Java technologies like JSPs, servlets and JavaScript to build and host web applications. With GAE-J we would write the application code, test it on the local machine and upload it to Google with a simple click of a button or a command line script. Once the application is uploaded to the Google infrastructure, it would host and scale the application for us. We would then, no longer need to worry about system administration, bringing up new instances of the application, clustering the database or buying new machines.<br/><br/>GAE-J provides access to many popular services from the enterprise applications world, including a scheduler, logging that can be reported from the Google Application console, mail, caching and URL fetch. It also provides elegant integration with technologies like Spring, Sitemesh, Struts etc.<br/><br/>GAE-J also makes it easy to serve static files like Images, CSS style sheets, JavaScript code, movies and Flash animations can served directly to the browser from separate servers that those that invoke servlets.<br/><br/>As you would expect from initiatives by Google, GAE-J comes with extensive online documentation &#8211; including quick start guides which I found invaluable. Also, Google provides many tools that make coding and developer testing simple and quick. GAE-J provides a local sandbox (based on Jetty) that should be used for testing before deploying into the cloud. The development web server simulates the App Engine Java runtime environment and all of its services, including the datastore. The <span style="color: blue;">Google Plugin for Eclipse </span>can run the server in the Eclipse debugger. You can also run the development server from the command line.<br/><br/><strong>Our Experience</strong><br/><br/>We found that using Google App Engine has great advantages, but it also has serious limitations. Google has implemented a tight security model on GAE-J, and you can&#8217;t write to the file system, it is read-only. You can only store data using the Google Datastore API. On first look, this seemed like a big restriction, but given the fact that the servers are clustered, it made sense in the long run.<br/><br/>In the GAE-J sandbox, the application code only runs in response to a web request or a <em>cron</em> job, and must return response data within 30 seconds in any case. A request handler cannot spawn a sub-process or execute code after the response has been sent.<br/><br/>Uploading the initial data is another challenge; however, that may be solved by providing the capability to upload data into the data store of the application itself.<br/><br/>It is also evident that GAE-J is still in its infancy and has glaring restrictions (for example: GAE-J sets a hard limit to the number of application and static files in the application; refer to <a href="http://code.google.com/appengine/docs/java/runtime.html#Quotas_and_Limits"><span style="color:blue;">The Java Servlet Environment &#8211; Quotas and Limits</span></a>.) IMO that needs to be addressed ASAP; to continue its evolution into a serious contender in the Cloud Services industry.<br/><br/>In conclusion, we found that moving an existing project to GAE-J’s infrastructure is not a trivial job, but it can be done. There are a big number of areas that differ between traditional web applications and Google’s app engine. I agree with Abhijat’s post on <a title="Cloud Computing Demystified: Part-I" href="../cloud-computing-demystified-part-i/"><span style="color:blue;">Cloud Computing Demystified: Part-I</span></a> <strong><em>#<span style="font-family:"> the real cost of using these services </span></em></strong>that identifying and reconciling all these differences would require significant work; esp. in view of the fact that in many cases it may be imperative that the changes (refactoring / re-organizations) made MUST work nicely with the traditional deployment as well. Specifically, certain areas such as the constraints from traditional relational database methodology, restrictions on the number of URLMap entries etc. may induce a re-design of the application and add to the challenges of migrating to the GAE-J cloud.<br/><br/>It would be much easier to develop a new project on GAE-J where innovative architectures for an application could be explored, rather than trying to port an existing application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/cloud-computing-series-exploring-the-google-app-engine-java-runtime-environment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;Customer Facing Innovation&#8221; &#8211; a View from the Midsize Enterprise Summit</title>
		<link>http://www.nagarro.com/blog/customer-facing-innovation-a-view-from-the-midsize-enterprise-summit/</link>
		<comments>http://www.nagarro.com/blog/customer-facing-innovation-a-view-from-the-midsize-enterprise-summit/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 16:48:43 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[IT budgets]]></category>
		<category><![CDATA[Midsize Enterprises]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=412</guid>
		<description><![CDATA[As we interact with CIOs of midsize companies at the MES show, there are several common themes that come out in the conversations. While cost-cutting has been the overwhelming focus of IT organizations in the last year, there seems to be a change in objectives going forward. More CIOs seem to be focused on ways [...]]]></description>
			<content:encoded><![CDATA[<p>As we interact with CIOs of midsize companies at the MES show, there are several common themes that come out in the conversations. While cost-cutting has been the overwhelming focus of IT organizations in the last year, there seems to be a change in objectives going forward. More CIOs seem to be focused on ways to increase business revenues, rather than containing costs. The projects that are being funded are the ones that involve customer facing solutions, challenging IT to provide innovation that is targeted at end customers, rather than internal business users.</p>
<p>A number of companies have had positive experiences with server virtualization over the last couple of years, and are looking to take the next step &#8211; virtualizing their desktop systems. Cloud computing, especially storage is finding increased traction in the midsize organizations, as they look to improve business continuity and disaster recovery plans. Another trend seems to be the increased focus on building relationships with external service companies in this market segment, as IT executives seek to do more with less.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/customer-facing-innovation-a-view-from-the-midsize-enterprise-summit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagarro Boosts Competitive Strategy for QISoft</title>
		<link>http://www.nagarro.com/blog/nagarro-boosts-competitive-strategy-for-qisoft/</link>
		<comments>http://www.nagarro.com/blog/nagarro-boosts-competitive-strategy-for-qisoft/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 23:21:17 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[Netweaver]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=391</guid>
		<description><![CDATA[Today Nagarro announced a new SAP NetWeaver project with QISoft, a customer in the manufacturing execution systems (MES) space. As a provider of Windows-based software, QISoft had been facing a major competitive obstacle in attracting customers running SAP on the backend. Nagarro is developing a new SAP-based product suite to allow QISoft to compete more effectively.
With [...]]]></description>
			<content:encoded><![CDATA[<p>Today Nagarro announced <a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Nagarro-Boosts-QISoft.aspx">a new SAP NetWeaver project with QISoft</a>, a customer in the manufacturing execution systems (MES) space. As a provider of Windows-based software, QISoft had been facing a major competitive obstacle in attracting customers running SAP on the backend. Nagarro is developing a new SAP-based product suite to allow QISoft to compete more effectively.<span id="more-391"></span></p>
<p>With our expertise in software product development, manufacturing and SAP consulting, we knew Nagarro was a great fit for QISoft. But the winning the business was only the beginning. The real success story here is that Nagarro is making an immediate, positive impact on QISoft’s long-term competitive advantage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-boosts-competitive-strategy-for-qisoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing Demystified: Part-I</title>
		<link>http://www.nagarro.com/blog/cloud-computing-demystified-part-i/</link>
		<comments>http://www.nagarro.com/blog/cloud-computing-demystified-part-i/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 18:05:41 +0000</pubDate>
		<dc:creator>Abhijat Vatsyayan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=336</guid>
		<description><![CDATA[I recently took part in a panel discussion on cloud computing and how it relates to software architecture. The event used an online event organizer for signing up and the website wouldn&#8217;t let me register for the event. I later found out that I could not sign-up because the event was sold out. This says [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><span style="color: #000000;">I recently took part in a panel discussion on cloud computing and how it relates to software architecture. The event used an online event organizer for signing up and the website wouldn&#8217;t let me register for the event. I later found out that I could not sign-up because the event was sold out. This says something about the hype surrounding cloud computing which has become the in-thing to be &#8217;seen with&#8217;. The panel discussion was interesting and animated and one takeaway for me was that everybody had their own idea of what cloud computing is and to some it was barely more than a buzzword.<span id="more-336"></span> </span></p>
<p style="text-align: justify;"><span style="color: #000000;">So, is cloud computing merely hype? While there truly is value in what is provided by Amazon (<span style="color: #800080;"><a title="Cloud Computing provider" href="http://aws.amazon.com/ec2/" target="_blank">EC2</a> </span>and <span style="color: #800080;"><a title="AWS" href="http://aws.amazon.com/" target="_blank">other services</a></span>), <span style="color: #800080;"><a title="Google App Engine" href="http://code.google.com/appengine/">Google&#8217;s App Engine</a></span>, <span style="color: #800080;"><a title="Azure" href="http://www.microsoft.com/azure/default.mspx" target="_blank">Microsoft&#8217;s Azure</a></span> and a few others, the providers (or at least their marketing teams), if you ask me, have not helped a whole lot.  It seems like every company that used to provide virtual private servers is now a cloud computing provider. So are companies that used to provide hosting solutions, and every company that used to be a destination for an outsourced data center. Soon, we will have clouds of every other conceivable kind! When a term can be applied to pretty much anything, the term starts losing its meaning. Cloud computing, which I would put in the first stage of Gartner&#8217;s Hype-Cycle (hype followed by disillusionment followed by realization), is the latest buzzword that marketing teams love to apply to anything they can. I asked representatives from several companies that claim to provide cloud solutions what did they really mean when they talked about a &#8220;cloud&#8221;. When pushed, pretty much all of them ended up saying &#8211; &#8220;its just a buzzword&#8221;.</span></p>
<p style="text-align: justify; "><span style="color: #000000;">Getting back to the panel discussion, there were several strands of discussion which I would have liked to address in detail but couldn&#8217;t because of time constraints. So I decided to use this blog to move the discussion online (and to also share it with a wider audience). In this and subsequent posts, I will try to summarize as well as share my view of this technology, starting with some of the points from the panel. </span></p>
<ul style="text-align: justify;">
<li><span style="color: #000000;"><strong>Cloud computing is nothing new:</strong> Cloud computing, like most other technologies, is an evolution, not a revolution. If it does end up changing the way we develop, deploy and manage software (and other components), we might start calling it a revolution but at this time, it represents incremental but very useful changes in several existing technologies and how it all comes together. Most offerings use virtualization, deliver services over the Internet and expose HTTP based APIs for accessing and controlling the services. But what is truly important for me is not whether its new or old; but whether it solves my technical and business problems. There are several class of applications and organizations for which EC2, Azure or Google App Engine is the right choice.  Moreover, I can not think of  a single service in the late 90s or early 2000s where I could provision Linux boxes in a matter or minutes by just signing up on a website using a credit card.  If nothing else, the sheer ease of use and affordability (at least in the beginning) is an innovation worth taking note of (and make use of if, it makes sense). My take on it &#8211; it works great when you use it to solve the problem it was designed to solve.</span></li>
<li><span style="color: #000000;"><strong>There is no such thing as infinite scalability:</strong> The use of term &#8220;Infinitely Scalable&#8221; by the cloud computing service providers, in my opinion, is misguided. A better term to use would be &#8220;Sufficiently Scalable&#8221; but it does not have the same ring to it. Amazon&#8217;s or Google&#8217;s infrastructure can effectively provide &#8220;<em>sufficient</em>&#8221; scalability for small application. If you are mostly running on a couple of Xeons with 12GB of Ram or so, a typical spike in demand might need you to scale up by 4 or 5 times which can easily be handled by the Amazons of this world. I suspect, however, that you can not run another Amazon on Amazon&#8217;s infrastructure (especially during Christmas time!). There is a slightly different but related discussion about differences of scale and statistical models which I will not get into.</span></li>
<li><span style="color: #000000;"><strong>What about the security of my data</strong>? Its no less secure that using a hosting solution of the past. While people like to complaint about Hypervizor breaches and how most cloud computing providers (especially those who provide infrastructure as a service)  use virtualization, the reality is that Hypervisors are far more secure that the operating systems they run. The two main and mostly related reasons for this is that the people who build Hypervizors realize this (and they are a pretty smart bunch), and that the Hypervizors are kept as small as possible. While I am not an expert in this area, the last time I was talking to one of the experts in Hypervizor and virtual machine security, he took pains to point out that inspite of the fact that it is bad for his business, Hypervizor breaches are extremely rare and that most Hypervizors are quite secure. I would, however, like to point out that what happens in case of a security breach is still not clear. We simply do not know enough about this stuff. And if you have contractual or legal requirements that prohibit you from moving your data into the cloud, you will simply have to wait until the lawyers catch up with the technology and the providers address these concerns directly through their SLAs. </span></li>
<li><span style="color: #000000;"><strong>The clouds are not interoperable<em>.</em></strong> Because every-body&#8217;s offering of &#8220;cloud&#8221; services is different, the questions of interoperability while being a very important question, does not make sense at this time. The really compelling offerings today are from Amazon (EC2 being the big one, but there is also SQS and S3 and a few others), Google (app engine) and Microsoft&#8217;s Azure.  EC2 gives you virtual Linux servers (and now windows too) and options of launching pre-configured servers. If all you are truly using is the Linux platform, nothing stops you from moving over to someone else who will also provide you Linux boxes (either virtualized or real). While you may have to make a lot of changes to migrate your Java application over to Google App Engine, taking your application out of the App Engine and deploying it somewhere else should not be a problem (assuming you have appropriately abstracted out the areas that use Google specific APIs). I have heard talks of Azure supporting Java (and a few other platforms) in the future and it will be interesting to see how portable Java applications will be between Google App Engine and Azure. </span></li>
<li><span style="color: #000000;"><strong>What is the real cost of using these services?</strong> This is a tough one and merits at least a white paper of its own. I do not have a clear answer but I say this &#8211;  two main advantages of the cloud, <em>the ability to scale up when you need to, and pay only for what you use</em> go a long way in making cloud computing solutions cost effective. If you know your usage and it does not vary much, you do not really need to use a cloud computing provider.  There is work needed for moving an existing application either completely or partially into the cloud and you should not, as a matter of basic engineering principle, use a cloud simply because its the in-thing. It will not make sense and it will not be cost effective. You may, however, have other reasons for using Amazon or Google (for example, cloud computing payment models let you convert your capital expenses into operational expenses). </span></li>
</ul>
<p style="text-align: justify;"><span style="color: #000000;">In my next post on cloud computing, I will list some of the prevalent definitions of cloud computing and try to factor out the characteristics that make most sense to me (especially for providers that we are most interested in) and try to come up with a working definition of the term that is most relevant to us as software architects/designers/engineers.</span></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/cloud-computing-demystified-part-i/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A better way to test email sending functionality is to use your own SMTP Server</title>
		<link>http://www.nagarro.com/blog/a-better-way-to-test-email-sending-functionality-is-to-use-your-own-smtp-server/</link>
		<comments>http://www.nagarro.com/blog/a-better-way-to-test-email-sending-functionality-is-to-use-your-own-smtp-server/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 07:09:14 +0000</pubDate>
		<dc:creator>Vaibhav Gadodia</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tools and Utilities]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[SMTP Server]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/a-better-way-to-test-email-sending-functionality-is-to-use-your-own-smtp-server/</guid>
		<description><![CDATA[A large number of applications today have some kind of a notification mechanism built-in. More often than not, an email is used to send these notifications. Typically, while developing these applications, developers use their own inbox to send notifications to. Or they setup some dummy account to send test emails to; or sometimes they might [...]]]></description>
			<content:encoded><![CDATA[<p>A large number of applications today have some kind of a notification mechanism built-in. More often than not, an email is used to send these notifications. Typically, while developing these applications, developers use their own inbox to send notifications to. Or they setup some dummy account to send test emails to; or sometimes they might send test mails to real users (it&#8217;s been known to happen).<span id="more-335"></span></p>
<p>There are many limitations to this approach:</p>
<ul>
<li>one has to deal with dummy messages arriving in the inbox, when all that you want to test is your email sending code.</li>
<li>automating the testing of the email sending code will result in a large number of emails being generated and delivered to your inbox.</li>
<li>code that is supposed to deliver large amounts of email will generate a lot of load on the Internet bandwidth (and yes that can be a problem).</li>
<li>if you are testing on a copy of a production database, you might inadvertently end up sending test emails to real users.</li>
</ul>
<p>There are other issues present as well. One solution to solving these problems is to use your own SMTP server to handle all these emails in a manner that it receives an email and doesn&#8217;t sent it forward. So, it is like a dummy SMTP server. But setting up an SMTP server is usually a hassle.</p>
<p><!--more--></p>
<p>There are plenty of options out there which make your job much easier than you think it is. In this post, I am going to list some solutions which can be used (though there are many more). The basic premise behind this approach is to run a local SMTP server (either on the developer box, or the test server, or both, or somewhere on the LAN). This local SMTP server address is what is configured as the server address in your application which is being tested. Any mail sent to such a server is kept with the server and not forwarded, thus preventing all the above listed issues.</p>
<p>Following are some of the more popular out-of-the-box programs that can be used (click on the names to go to their websites):</p>
<ul>
<li><a href="http://invalidlogic.com/papercut/"><strong>Papercut</strong></a><strong> </strong>- this is a simple windows application which will run in your System Tray and simulate an SMTP server; it receives and stores any messages it receives. It allows you to view the messages. It sits in your system tray and alerts you whenever a new message arrives.</li>
<li><a href="http://www.donovanbrown.com/post/2008/10/20/Neptune.aspx"><strong>Neptune</strong></a><strong> &#8211; </strong>this is another application which will do a similar task. It is however a little more advanced. It has an admin API interface which allows you to run custom queries to analyze the messages that it processes. It doesn&#8217;t have a UI through which you can view the received message though &#8211; but sometimes all you need to check is if the messages are being delivered. Very useful in a bulk messaging scenario.</li>
<li><a href="http://smtp4dev.codeplex.com/"><strong>smtp4dev</strong></a> &#8211; this is another option similar to Papercut, which again sits in the system tray and will let you know whenever any message arrives and will let you look at the message details.</li>
</ul>
<p>There are many more out there which can be used to do similar things with some features here and there (for example, Neptune doesn&#8217;t generate all SMTP responses). Here&#8217;s a post by Phil Haack from long ago which is also interesting: <a href="http://haacked.com/archive/2006/05/30/ATestingMailServerForUnitTestingEmailFunctionality.aspx">A testing mail server for unit testing email functionality</a>.</p>
<p>So, when you feel the need to test your email sending code the next time, it might make sense to have one of the tools (or something similar) available.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/a-better-way-to-test-email-sending-functionality-is-to-use-your-own-smtp-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Want to Know What our Customers Think?</title>
		<link>http://www.nagarro.com/blog/want-to-know-what-our-customers-think/</link>
		<comments>http://www.nagarro.com/blog/want-to-know-what-our-customers-think/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 18:01:45 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=329</guid>
		<description><![CDATA[
Get a look behind the scenes at Pacific Southwest Container, a midsize manufacturer of sustainable custom packaging.  Nagarro’s custom applications enable PSC to optimize use of printing materials and equipment, reducing PSC’s costs and waste. End result? Cost savings are passed along to customers, while PSC improves its environmental footprint. Please view this short [...]]]></description>
			<content:encoded><![CDATA[<p><code><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/l4CJ8sOUgSw&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/l4CJ8sOUgSw&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></code></p>
<p>Get a look behind the scenes at <em>Pacific Southwest Container</em>, a midsize manufacturer of sustainable custom packaging.  Nagarro’s custom applications enable PSC to optimize use of printing materials and equipment, reducing PSC’s costs and waste. End result? Cost savings are passed along to customers, while PSC improves its environmental footprint. Please view this short video and let us know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/want-to-know-what-our-customers-think/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using ActiveRecord for Database Setup and Migration: A How-to</title>
		<link>http://www.nagarro.com/blog/using-activerecord-for-database-setup-and-migration/</link>
		<comments>http://www.nagarro.com/blog/using-activerecord-for-database-setup-and-migration/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 15:20:08 +0000</pubDate>
		<dc:creator>Ram Kripal Prasad</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LAMP]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=305</guid>
		<description><![CDATA[One of the first places where the ActiveRecord pattern first appeared, was in the book Patterns of Enterprise Architecture by Martin Fowler. The ActiveRecord pattern embeds the knowledge of how to interact with the database directly into the class performing the interaction.
Per Wikipedia  
With ActiveRecord, a database table or view is wrapped into a class, thus [...]]]></description>
			<content:encoded><![CDATA[<p>One of the first places where the ActiveRecord pattern first appeared, was in the book <em>Patterns of Enterprise Architecture</em> by <em>Martin Fowler</em>. The ActiveRecord pattern embeds the knowledge of how to interact with the database directly into the class performing the interaction.<span id="more-305"></span></p>
<p>Per <em><a href="http://en.wikipedia.org/wiki/Active_record_pattern">Wikipedia</a></em>  </p>
<blockquote><p>With ActiveRecord, a database table or view is wrapped into a class, thus an object instance is tied to a single row in the table. After creation of an object, a new row is added to the table upon save. Any object loaded gets its information from the database; when an object is updated, the corresponding row in the table is also updated. The wrapper class implements accessor methods or properties for each column in the table or view.</p></blockquote>
<p>This pattern is often implemented by ORM and Object Persistence Tools like Hibernate (Java) and ActiveRecord (ruby). The implementation framework handles generating the necessary SQL appropriate for the database being used and executing them over a database connection.</p>
<p>Recently, in a couple of projects I used ActiveRecord Migrations to manage database setup and migrations.<br />
Below, I shall present a walk though the steps that I followed to get a set of ActiveRecord migrations working on my Ubuntu-9.0.4 desktop.</p>
<p>1. Check if you have ruby installed:</p>
<p>     <em>ruby -v</em></p>
<p>You&#8217;d see something like the following: <em>ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]</em></p>
<p>If not, then install ruby by executing the following from a terminal window:</p>
<p>     <em>sudo aptitude install <strong>ruby</strong></em></p>
<p>Also, install <a href="http://rake.rubyforge.org/">rake, – ruby&#8217;s build program with capabilities similar to make</a> using:</p>
<p>    <em>sudo aptitude install <strong>rake</strong></em></p>
<p>2. Install <a href="http://rubygems.org/read/book/1">rubygems</a>:</p>
<p>    <em>sudo aptitude install <strong>rubygems1.9</strong></em></p>
<p>3. Install the following ruby-gems</p>
<ul>
<li>ActiveRecord: <em>sudo gem install <strong>activerecord</strong></em></li>
<li>Database adapter: I used the MySQL database; so I needed to install the mysql gem  <em>sudo gem install <strong>mysql</strong></em><br/><br/>The above command results in the following error:<br/><br/>&nbsp;&nbsp;<em>extconf.rb:8:in `require’: no such file to load — mkmf (LoadError)</em></li>
</ul>
<p><strong>Fix:</strong> Being a Debian or Ubuntu user you’ll find that the Ruby standard distribution is split into lots of little packages in order to comply with <a href="http://www.debian.org/doc/debian-policy/">Debian packaging Guidelines</a>. Installing ruby only gives you the ruby binary and a subset of the libraries for Ruby. You’ll need to add more packages if you want to utilize more of Ruby’s standard library.</p>
<p>Hence, we need to install the ruby-dev package prior to installing the mysql gem.</p>
<p>  <em>sudo aptitude install ruby-dev</em></p>
<p>4. Create directories to hold the migration definitions:</p>
<p>  <em>mkdir ~/workspace/db_setup<br />
  mkdir ~/workspace/db_setup/migrations</em></p>
<p>That&#8217;s all on the installation side. Now it&#8217;s time to write the migrations.</p>
<p>With ActiveRecord, each change to the database is termed as a <strong>migration</strong>. Migrations derive from <em>ActiveRecord::Migration</em> and enable a developer to generate a database structure using a series of Ruby script files (each of which is an individual migration) to define database operations. It&#8217;s a <em>database-agnostic representation</em> of the database. It uses generic data types for columns, like :binary, :string, :text, :boolean, etc. to define the kind of data to be stored in a column. A sample migration would look like the following:</p>
<p><b>File:</b> <em>migrations/001_create_institutions.rb</em><br />
class CreateInstitutions &lt; ActiveRecord::Migration<br />
def self.up<br />
create_table :institutions, {:id =&gt; true} do |inst|<br />
inst.column :name, :string, :limit =&gt; 100, :null =&gt; false<br />
inst.column :url, :string, :null =&gt; false<br />
end</p>
<p>execute(&#8217;ALTER TABLE institutions ADD UNIQUE (name) &#8216;);</p>
<p>end</p>
<p>def self.down<br />
drop_table : institutions<br />
end<br />
end</p>
<ul>
<li>The file-naming convention is important here:
<ul>
<li>ActiveRecord uses the numeric prefix to determine which migrations it needs to apply. To do this, it creates a table called as <strong>SCHEMA_MIGRATIONS</strong> in the database in which the VERSION column holds the number from the last migration added. When the migrations are run without a target version specified, it will only execute the migrations that have number greater than that stored in the database, lowest numbered first.</li>
<li>The class name should correspond to a camel case representation of the migration&#8217;s file name.</li>
<li>Typically your project would have a collection of these migrations, in files with prefixes as 001_xx, 002_xx&#8230;. and so on, each defining a change desired on the database.</li>
</ul>
</li>
<li>The two methods <strong>up</strong> and <strong>down</strong> should be functional complements of each other. The <strong>up</strong> method is executed when upgrading the database while <strong>down</strong> method is executed while reverting to an earlier version.</li>
<li>You can do many things in a migration – create and delete tables, add and remove columns, set column constraints (such as nullability and column length) and also run code to initialize the data in a table.</li>
<li>As a convenience, you also have the <strong>execute</strong> method available (shown as the last statement in the <strong>up</strong> method) to run SQL / commands directly. This has many implications: it lets you execute commands that use specific database dialects, like adding database constraints. The following script allows you to execute SQL commands from an external file, say <em>create_db.sql</em>:<br/><br/>&nbsp;&nbsp;sqlCode = File.open(File.dirname(__FILE__) + &#8220;/create_db.sql&#8221;).read<br/>&nbsp;&nbsp;sqlCode.split(&#8221;;\n&#8221;).each do |stmt|<br/>&nbsp;&nbsp;&nbsp;<b>execute</b> stmt if stmt =~ /\S/<br/>&nbsp;&nbsp;end</li>
</ul>
<p>ActiveRecord can read the database configuration from a YAML config file called as database.yml (place it under ~/workspace/db_setup) that looks like:</p>
<p><em># The # character signifies a comment.<br />
#<br />
# Define db config per environment here.<br />
# yml files are formatted in a very strict way; you cannot insert spaces and tabs randomly.<br />
# Typically they use two (2) spaces to indent options.<br />
#<br />
# The space between the &#8216;:&#8217; and the configuration values is required.<br />
dev:</p>
<p>  adapter: mysql<br />
  database: devdb<br />
  username: dev_user<br />
  password: dev_pass<br />
  host:     127.0.0.1</p>
<p>qa:</p>
<p>  adapter: mysql<br />
  database: $DB_NAME<br />
  username: $USER<br />
  password: $PASSWORD<br />
  host:     $HOST<br />
</em></p>
<p>A set of ActiveRecord migrations can be executed as<br />
1. A part of a Rails application by invoking</p>
<p>  rake db:migrate RAILS_ENV=xx VERSION=yy</p>
<p>2. A standalone Ruby application: If it is not a part of a Rails application, there is no default Rakefile to use. So we&#8217;d need to create one (under ~/workspace/db_setup) with the following content:</p>
<p><em>require &#8216;rubygems&#8217;<br />
require &#8216;active_record&#8217;<br />
require &#8216;yaml&#8217;<br />
task :default => :migrate</p>
<p>desc &#8220;Migrate the database through scripts in &#8216;migrations&#8217;. Target specific version with VERSION=x&#8221;<br />
task :migrate =&gt; :environment do<br />
ActiveRecord::Migrator.migrate(&#8217;migrations&#8217;, ENV["VERSION"] ? ENV["VERSION"].to_i : nil )<br />
end</p>
<p>task :environment do<br />
RAILS_ENV = (ENV['RAILS_ENV'] ||= &#8216;dev&#8217;)<br />
dbconfig = YAML::load(File.open(&#8217;database.yml&#8217;))[RAILS_ENV]<br />
ActiveRecord::Base.establish_connection(dbconfig)</p>
<p># Enable diagnostic logging to help debugging.<br />
# Note that ActiveRecord colorizes output for viewing in a terminal.<br />
# But when viewed as a normal file, it isn&#8217;t readable. So we disable it.<br />
ActiveRecord::Base.colorize_logging = false<br />
logFile = File.open(&#8217;database.log&#8217;, &#8216;w&#8217;) # set it to &#8216;STDERR&#8217; to enable logging to Std. ERROR console<br />
ActiveRecord::Base.logger = Logger.new(logFile)<br />
end</em></p>
<p>To execute the migrations, run the following command from the directory containing the RakeFile:</p>
<p>  rake RAILS_ENV=xx VERSION=yy</p>
<p>Both the above mentioned ways lend themselves to be easily invoked from a multitude of build and CI tools, like ANT, CruiseControl, python scripts etc.</p>
<p>Thus we, saw how to configure ActiveRecord as a database agnostic mechanism of managing database setup and incremental migrations. It is relatively simple to use and highly extensible.</p>
<p>Although, some may argue that ActiveRecord leads to a high degree of coupling between application code and database structure; in many cases the issues due to this coupling is much easier to manage than to adopt an alternate complex solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/using-activerecord-for-database-setup-and-migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Ado.Net Entity Framework v2, are we there yet?</title>
		<link>http://www.nagarro.com/blog/the-adonet-entity-framework-v2-are-we-there-yet/</link>
		<comments>http://www.nagarro.com/blog/the-adonet-entity-framework-v2-are-we-there-yet/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 10:11:48 +0000</pubDate>
		<dc:creator>Vaibhav Gadodia</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Ado.Net]]></category>
		<category><![CDATA[Entity Framework]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/the-adonet-entity-framework-v2-are-we-there-yet/</guid>
		<description><![CDATA[At Nagarro, we are always looking to stay tuned into upcoming technology (of all types &#8211; gadgets to frameworks); and the current flavor is of course Visual Studio 2010 and .Net Framework 4. We have been trying out the beta and the earlier preview versions of VS2010, however, that is not the topic of this [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://www.nagarro.com/">Nagarro</a>, we are always looking to stay tuned into upcoming technology (of all types &#8211; gadgets to frameworks); and the current flavor is of course Visual Studio 2010 and .Net Framework 4. We have been trying out the beta and the earlier preview versions of VS2010, however, that is not the topic of this post.</p>
<p>Recently, we had the opportunity to give our opinion on the latest avatar of the Ado.Net Entity Framework to Jeffrey Schwartz from Application Development Trends magazine. Jeff was kind enough to publish our opinions in an article on the Visual Studio Magazine (thank you Jeff). The article is titled &#8220;<a href="http://visualstudiomagazine.com/blogs/data-driver/2009/06/will-entity-framework-2-appease-early-adopters-of-linq-to-sql.aspx">Will Entity Framework 2 appease early adopters of LINQ to SQL?</a>&#8220;. We, as can be deduced, were early adopters of LINQ (to SQL and others).</p>
<p>If you would like to see that question answered, I urge you to go and read that article. In this article, I wanted to discuss a little bit more about how we look at Entity Framework v2.</p>
<p> <span id="more-304"></span>
<p>When Microsoft first announced the Ado.Net Entity Framework, we were unsure about what to do with it. We had already started training our developers on LINQ to SQL, and some of our projects were already using the technology. We found it (L2S) to be a very good way to implement the ORM layer of an application (and that worked very well in most cases). Additionally, we weren&#8217;t sure how mature the framework was. Sure, it looked perfect for some of our larger projects, but somehow it wasn&#8217;t fitting the bill (and we were not alone). And compared to LINQ to SQL, it felt quite lackluster in features.</p>
<p>The new version of the Entity Framework looks much better. It almost feels as if Microsoft went out of their way to ensure that Ado.Net EFv2 can stand on its own when compared to LINQ to SQL. However, by this time, we are pretty invested in LINQ to SQL, so there is no question of moving any of our existing projects over. But, we are very keen to try out the EFv2 in newer projects and internal applications. Specifically, we will looking at integrating it the next version of our Nagarro .Net Application Framework (which is a base framework that we use for most of our projects).</p>
<p>&#8220;<strong>Are we there yet?</strong>&#8221; &#8211; I would say, almost. The latest version of the Entity Framework looks a much more complete product as compared to the earlier version. Some of the features from an implementation-as-a-tool-in-a-software-development-services-shop perspective are really great:</p>
<ul>
<li><strong>POCO support </strong>- the support for persistence ignorant objects make a great deal of difference because we can continue to leverage the features of the Entity Framework while using your own custom data layer logic alongside it. This is beneficial because this means we can at least consider using the EF in existing applications where the data model and the layers are already defined.</li>
<li><strong>First class code generation &#8211; </strong>this will come as a relief to most developers. The code generation engine, T4, is much more versatile that what we used to have earlier. This means that each application development team can customize the code generation a little bit according to their specific needs.</li>
</ul>
<p>And of course there are hosts of improvements in general and there are tons of articles covering those.</p>
<p>From Nagarro&#8217;s perspective, <strong>I think we are almost there</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/the-adonet-entity-framework-v2-are-we-there-yet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TiECon 2009 – Entrepreneurship Lives</title>
		<link>http://www.nagarro.com/blog/tiecon-2009-%e2%80%93-entrepreneurship-lives/</link>
		<comments>http://www.nagarro.com/blog/tiecon-2009-%e2%80%93-entrepreneurship-lives/#comments</comments>
		<pubDate>Wed, 27 May 2009 00:35:57 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[tiecon]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/tiecon-2009-%e2%80%93-entrepreneurship-lives/</guid>
		<description><![CDATA[For months we’ve been saying that despite the recession, innovation is alive and well. Last week we spent two days at TiECon 2009, where our opinion was validated by entrepreneurs of promising startups as well as recognized business leaders. The buzz this year is that there are still plenty of interesting, innovative startups poised for [...]]]></description>
			<content:encoded><![CDATA[<p>For months we’ve been saying that despite the recession, innovation is alive and well. Last week we spent two days at TiECon 2009, where our opinion was validated by entrepreneurs of promising startups as well as recognized business leaders. The buzz this year is that there are still plenty of interesting, innovative startups poised for success – <a href="http://creativecapital.wordpress.com/2009/05/18/recession-be-damned-entrepreneurship-lives-at-tiecon-2009/">as others have noted</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/tiecon-2009-%e2%80%93-entrepreneurship-lives/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Web Toolkit for Rich Internet Applications –A Java Programmer’s Experience</title>
		<link>http://www.nagarro.com/blog/google-web-toolkit-internet-applications/</link>
		<comments>http://www.nagarro.com/blog/google-web-toolkit-internet-applications/#comments</comments>
		<pubDate>Thu, 14 May 2009 17:52:42 +0000</pubDate>
		<dc:creator>Nitin Sood</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=285</guid>
		<description><![CDATA[Recently, I have been working on porting a Struts and uPortal based legacy application to GWT. This work was initiated a year ago to replace an unappealing, non-responsive and slow user interface of the legacy application. Another key requirement was to make the client side technology stack lighter. Use of multiple client side technologies (Struts, [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I have been working on porting a Struts and uPortal based legacy application to GWT. This work was initiated a year ago to replace an unappealing, non-responsive and slow user interface of the legacy application. Another key requirement was to make the client side technology stack lighter. Use of multiple client side technologies (Struts, uPortal, JSP, Tag libraries, Java Script, configuration files, CSS, XSLT) made it difficult to make even simple UI changes.<span id="more-285"></span></p>
<p>After initial analysis, it was clear that we needed to incorporate AJAX in multiple areas across the application. It was further decided to use one of the existing AJAX frameworks rather than writing AJAX &#8220;by hand&#8221;. After evaluating several AJAX frameworks, we selected GWT. Other AJAX frameworks like DOJO and YUI library are also good but they did not solve the above mentioned problems arising from a fat architecture and a complicated technology stack.</p>
<p>One of the primary reasons for selecting GWT was its unique approach to developing the complete application: both the client side and the server side components using Java. GUI development with GWT APIs is similar to Swing development and it is refreshing to forget JSP, JavaScript, and Struts and write everything using Java. I am very happy with experience so far and we have vastly improved presentation layer while retaining most of the service layer code.</p>
<p>With GWT, the AJAX front-end is written in Java that gets compiled into highly optimized Java Script. Developers do not need to write Java Script while end users are provided with dynamic and standards-compliant AJAX experience. JavaScript gets downloaded by the client browser at runtime where most of the client side processing is performed thus releasing the server side from handling presentation tasks.</p>
<p>I am impressed by the developer friendly features of GWT. Using Java in the presentation layer facilitates the use of design patterns and creation of reusable widget libraries. GWT’s approach to history management, internationalization, and service layer interaction is easy to understand and implement. I felt spoilt by the choice of available tools, default support for multiple browsers and ability to debug AJAX in hosted mode. I also noticed ancillary benefits like elimination of training on multiple technologies, reduced dependence on technology experts, and the overall speed of development.</p>
<p>I have heard arguments about Flex being a better RIA choice than GWT. I think this may be because some people may not be aware of other GWT widget libraries (like GWT-EXT) available today. Although GWT comes with a very good collection of useful and cool widgets but you can always use third party widget libraries which provide additional AJAX components like a special Tree or Grid component. We used <a href="http://code.google.com/p/gwt-ext/">GWT-EXT</a>, a very rich widget library to achieve the desired functionality.</p>
<p>I found a few features missing &#8211; for example, there is no inbuilt support to load client side libraries on demand. Actually GWT loads all client-side libraries in client’s browser when the end-user accesses any module of the web application for the first time. So I think GWT may be a misfit for large enterprise applications. Also I faced problems due to lack of emulators for some of the Java classes like Calendar and our application POJOs contain Calendar objects. The good thing is that there are workarounds available to solve these problems.</p>
<p>I strongly recommend GWT if you are developing a mid size web application that needs enhanced usability and a desktop like look and feel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/google-web-toolkit-internet-applications/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Updates from Midsize Enterprise Summit: Business to Community</title>
		<link>http://www.nagarro.com/blog/updates-from-midsize-enterprise-summit/</link>
		<comments>http://www.nagarro.com/blog/updates-from-midsize-enterprise-summit/#comments</comments>
		<pubDate>Thu, 14 May 2009 00:12:34 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[custom software]]></category>
		<category><![CDATA[midsize enterprise]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=261</guid>
		<description><![CDATA[Last week I attended the Midsize Enterprise Summit (MES) in Miami. This event has become one of Nagarro’s favorite venues for discussing the unique business and technology challenges faced by midsize enterprises – that vast range of companies across industries that falls somewhere between startups and global players.

 
While at the show, I had the opportunity [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-273 alignleft" title="golf" src="http://www.nagarro.com/blog/wp-content/uploads/2009/05/golf.png" alt="golf" width="132" height="95" />Last week I attended the <a href="http://www.everythingchannelevents.com/mese09">Midsize Enterprise Summit</a> (MES) in Miami. This event has become one of Nagarro’s favorite venues for discussing the unique business and technology challenges faced by midsize enterprises – that vast range of companies across industries that falls somewhere between startups and global players.</p>
<p><span id="more-261"></span></p>
<div class="mceTemp"> </div>
<p>While at the show, <a href="http://www.crn.com/it-channel/217400007;jsessionid=VSIXWWHZSIROIQSNDLOSKHSCJUNN2JVN">I had the opportunity to participate in a panel on social networking</a>. Our discussion was an important reminder that the idea of “business to business” is giving way to “business to community.” In our constant endeavor to make our clients more competitive, we have been working closely with them to understand how social media impacts their organizations. I am constantly amazed by the possibilities of building custom applications using the Web 2.0 APIs to leverage this new medium in departments ranging from sales, marketing, customer support, product development, design innovation, training, and education.</p>
<div id="attachment_268" class="wp-caption alignnone" style="width: 346px"><img class="size-full wp-image-268 " title="img_3563" src="http://www.nagarro.com/blog/wp-content/uploads/2009/05/img_3563.jpg" alt="Social Networking Panel at the Midsize Enterprise Summit" width="336" height="252" /><p class="wp-caption-text">Social Networking Panel at the Midsize Enterprise Summit</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/updates-from-midsize-enterprise-summit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nagarro featured in NASSCOM blog and Technology Digital: Attracting best and brightest</title>
		<link>http://www.nagarro.com/blog/nagarro-featured-in-nasscom-blog-and-technology-digital-may-issue-attracting-best-and-brightest/</link>
		<comments>http://www.nagarro.com/blog/nagarro-featured-in-nasscom-blog-and-technology-digital-may-issue-attracting-best-and-brightest/#comments</comments>
		<pubDate>Mon, 11 May 2009 20:29:36 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=255</guid>
		<description><![CDATA[The May issue of Technology Digital features a profile of Nagarro and our quest to hire the best and brightest engineers available.
And last week, the NASSCOM Emerge blog examined Nagarro’s intellectually vigorous culture in a post about the NASSCOM Emerging 15 (I like It Here, Do You?).Nagarro stands out from the crowd as “a company [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.technology-digital.com/Nagarro--Developing-business-critical-software_23442.aspx">May issue of Technology Digital features a profile of Nagarro</a> and our quest to hire the best and brightest engineers available.<span id="more-255"></span></p>
<p>And last week, the <em>NASSCOM Emerge</em> blog examined Nagarro’s intellectually vigorous culture in a post about the NASSCOM Emerging 15 (<a href="http://blog.nasscom.in/emerge/2009/05/nasscom-emerging-15-i-like-it-here-do-you/">I like It Here, Do You?</a>).Nagarro stands out from the crowd as “a company where nerds love to work” as NASSCOM discusses its picks for the best small and medium sized IT-BPO companies to work for.</p>
<p>NASSCOM characterizes the top 15 emerging companies as “sought after by career seekers for their close knit, non-hierarchical work environment, culture of innovation and commitment to employee empowerment.” If this is the definition of a nerd-magnet, sign us up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/nagarro-featured-in-nasscom-blog-and-technology-digital-may-issue-attracting-best-and-brightest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Successfully Outsourcing SAP Remote Services</title>
		<link>http://www.nagarro.com/blog/new-white-paper-successfully-outsourcing-sap-remote-services/</link>
		<comments>http://www.nagarro.com/blog/new-white-paper-successfully-outsourcing-sap-remote-services/#comments</comments>
		<pubDate>Wed, 06 May 2009 18:55:51 +0000</pubDate>
		<dc:creator>Manish Agarwal</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[Netweaver]]></category>
		<category><![CDATA[SAP maintenance]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=241</guid>
		<description><![CDATA[
In today’s dynamic business environment, IT departments need to remain agile so they can align IT strategy with shifting business,market, competitive and economic conditions.  Outsourcing is one way to adapt resources to suit an ever-changing landscape but can also introduce risks if the right partner is not engaged or the partnership is mismanaged.
Companies rely on [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-244 alignleft" title="77008124120224641" src="http://www.nagarro.com/blog/wp-content/uploads/2009/05/77008124120224641.jpg" alt="Connected in all directions" width="68" height="94" /></p>
<p>In today’s dynamic business environment, IT departments need to remain agile so they can align IT strategy with shifting business,market, competitive and economic conditions.  Outsourcing is one way to adapt resources to suit an ever-changing landscape but can also introduce risks if the right partner is not engaged or the partnership is mismanaged.</p>
<p>Companies rely on SAP deployments to run their core business operations.  As a result, outsourcing decisions must contemplate security controls and allow the IT department to maintain operational control.<span id="more-241"></span></p>
<p>In an effort to help you identify and manage risks, <a href="http://www.nagarro.com/Resource%20Library/WhitepaperDetail.aspx?id=55">Nagarro&#8217;s new white paper</a> addresses some common outsourcing concerns and objectives, and provides practical information that can help you more effectively address your current and future business requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/new-white-paper-successfully-outsourcing-sap-remote-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use the features of the .Net framework to implement good coding patterns</title>
		<link>http://www.nagarro.com/blog/use-the-features-of-the-net-framework-to-implement-good-coding-patterns/</link>
		<comments>http://www.nagarro.com/blog/use-the-features-of-the-net-framework-to-implement-good-coding-patterns/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 21:55:02 +0000</pubDate>
		<dc:creator>Ramesh Soni</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Code Snippets]]></category>
		<category><![CDATA[.net framework]]></category>
		<category><![CDATA[event processing]]></category>
		<category><![CDATA[IDisposable]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=200</guid>
		<description><![CDATA[In our haste to finish the coding of a given application, we often overlook great little techniques which can be deployed to ensure best practices in code. And since one of the best ways to learn is by example, we will walk through a very common block of code that is found in almost all [...]]]></description>
			<content:encoded><![CDATA[<p>In our haste to finish the coding of a given application, we often overlook great little techniques which can be deployed to ensure best practices in code. And since one of the best ways to learn is by example, we will walk through a very common block of code that is found in almost all Windows based applications &#8211; the block which shows and hides a wait cursor when a time consuming task is being executed by the application.<span id="more-200"></span></p>
<p>A quick  review of event processing in Windows Application tells us that there are 3 different types:</p>
<ol>
<li><strong>Quick Processing (less than a second) &#8211; </strong>Action performed is executed almost instantaneously without any significant wait period. In this case, you would generally not display any indication to the user about the background task execution. For instance, Open a dialog on the Click of a button.</li>
<li><strong>Short Processing (1 second &#8211; 5 seconds) &#8211; </strong>User action consumed a few seconds in execution. In such cases, recommended practice is to show a wait cursor. For instance, Pick records from database to list them in the application screen requested by the user.</li>
<li><strong>Long Processing (more than 5 seconds) -</strong> Actions which involve a significantly longer processing time, in such cases it is recommended to show progress bar indication to users.<!--more--></li>
</ol>
<p>In order to display a wait cursor (category 2 above) the following is the most common block of code seen in most applications:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">object</span> GetData(<span class="kwrd">int</span> id)
{
    Cursor.Current = Cursors.WaitCursor;
    <span class="kwrd">try</span>
    {
        <span class="rem">// Processing code here    </span>
    }
    <span class="kwrd">finally</span>
    {
        Cursor.Current = Cursors.Default;
    }
}</pre>
<p>The code piece above will have to be duplicated at all the places where we want to use wait cursor during processing, this would be a pretty tedious task. Now, let&#8217;s have a look at another approach to implement the same feature:</p>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Windows.Forms;

<span class="kwrd">public</span> <span class="kwrd">class</span> WaitCursor : IDisposable
{
    <span class="kwrd">private</span> Cursor cursor;

    <span class="kwrd">public</span> WaitCursor()
    {
        cursor = Cursor.Current;
        Cursor.Current = Cursors.WaitCursor;
    }

    <span class="kwrd">public</span> <span class="kwrd">void</span> Dispose()
    {
        Cursor.Current = cursor;
    }
}</pre>
<p>The WaitCursor class above implements <a href="http://msdn.microsoft.com/en-us/library/system.idisposable.aspx">IDisposable</a> interface, hence you may use this is the using block. Now see how simple it is to add a wait cursor to your application:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">object</span> GetData(<span class="kwrd">int</span> id)
{
    <span class="kwrd">using</span> (<span class="kwrd">new</span> WaitCursor())
    {
        <span class="rem">// Processing code here</span>
    }
}</pre>
<p>There are some very obvious benefits by doing it this way:</p>
<ul>
<li>It simplifies the code at several places into a single line statement.</li>
<li>More importantly, we just ensured that a bug where some developer forgot to restore the cursor to normal can never happen (as long as we have trained our team to simply call the above code).</li>
<li>Finally, it is always a best practice to encapsulate repeated code in one place.</li>
</ul>
<p>One should always be on the lookout for such small coding patterns and implement them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/use-the-features-of-the-net-framework-to-implement-good-coding-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting the most out of custom applications during the downturn</title>
		<link>http://www.nagarro.com/blog/getting-the-most-out-of-custom-applications-during-the-downturn/</link>
		<comments>http://www.nagarro.com/blog/getting-the-most-out-of-custom-applications-during-the-downturn/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 18:14:54 +0000</pubDate>
		<dc:creator>Vishal Gauri</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[custom applications]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=208</guid>
		<description><![CDATA[Last week Manufacturing Business Technology published Nagarro’s top “Dos and Don’ts” for custom application development. Our customers in manufacturing as well as other markets continue to prove that downturn is a perfect opportunity to revamp IT strategy for competitive advantage. As companies look to evolve to a ‘smarter’ IT strategy, smaller, inexpensive, made-to-fit custom applications [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-227 alignleft" title="monitors" src="http://www.nagarro.com/blog/wp-content/uploads/2009/04/monitors.jpg" alt="monitors" width="90" height="62" />Last week <a href="http://http://www.mbtmag.com/article/CA6651349.html" target="_blank"><strong><em>Manufacturing Business Technology</em></strong> published Nagarro’s top “Dos and Don’ts”</a> for custom application development. Our customers in manufacturing as well as other markets continue to prove that downturn is a perfect opportunity to revamp IT strategy for competitive advantage. As companies look to evolve to a ‘smarter’ IT strategy, smaller, inexpensive, made-to-fit custom applications offer a great way to build lasting competitive advantage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/getting-the-most-out-of-custom-applications-during-the-downturn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Application programming in the era of multicore processors</title>
		<link>http://www.nagarro.com/blog/application-programming-in-the-era-of-multicore-processors/</link>
		<comments>http://www.nagarro.com/blog/application-programming-in-the-era-of-multicore-processors/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 20:44:55 +0000</pubDate>
		<dc:creator>Abhijat Vatsyayan</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tools and Utilities]]></category>
		<category><![CDATA[Concurrent programming]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=142</guid>
		<description><![CDATA[Computer chip manufacturers cannot keep on increasing the clock speed indefinitely to make their processors faster. They seem to have already reached the limit (on clock speed) and have started putting multiple independent processing cores on a single chip to increase the computational capacity. As most systems start running on processors with tens of cores (if [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><span style="color: #000000;">Computer chip manufacturers cannot keep on increasing the clock speed indefinitely to make their processors faster. They seem to have already reached the limit (on clock speed) and have started putting multiple<span id="more-142"></span> independent processing cores on a single chip to increase the computational capacity. As most systems start running on processors with tens of cores (if not hundreds right away) application programmers will need to start relying on concurrent programming to make their applications faster and responsive. This will lead to significant changes in the way we design, develop, debug and test programs. We will have new tools, APIs, compilers, languages and frameworks for supporting highly concurrent programs written by application programmers.</span></p>
<p><span style="color: #000000;">The first and most obvious change will be that programmers will start using many more threads and use current lock based approaches to synchronize access to shared data. Now detecting bugs in multithreaded programs is extremely difficult and as we write more concurrent programs, it will become increasingly important to have tools which can check our programs for correctness. Two such tools are <span style="text-decoration: underline;"><a href="http://research.microsoft.com/en-us/projects/chess/" target="_blank">CHESS</a></span> from Microsoft research and <span style="text-decoration: underline;"><a href="http://fsl.cs.uiuc.edu/index.php/JPredictor" target="_blank">jPredictor</a></span> from UIUC. Both are still research projects but are definitely worth taking a look at and playing around with.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">The transactional memory research community advocates getting rid of lock based approach for managing access to shared data. The idea comes from the database world where transactions have been around for a long time. Hardware transactional memory, hybrid transactional memory and software transactional memory, the three broad categories in which implementations are often split, are all under active research but there already are quite a few implementations out there for you to play around with. One of the core ideas behind using transactional memory for accessing shared data is to allow users to specify &#8220;what&#8221; needs to be synchronized and then let the machine take care of the &#8220;how&#8221; part (compare this to how you use locks today). This is supposed to greatly simplify the concurrent programming model but it is too early to say if it really does make the programming model simpler.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">While  I cannot cover or summarize the work being done on transactional memory without making it into a small project, I can provide a few starting points that you may find interesting. Microsoft is doing very interesting work in this area and while a lot of it uses Haskel, there is a <span style="text-decoration: underline;"><a href="http://research.microsoft.com/en-us/downloads/6cfc842d-1c16-4739-afaf-edb35f544384/default.aspx" target="_blank">C-sharp API for software transactional memory</a></span> that you should look at. If you are a Java programmer, you should take a look at <span style="text-decoration: underline;"><a href="http://www.sun.com/download/products.xml?id=453fb28e" target="_blank">DSTM2</a></span>. And irrespective of what technology you use for building systems, I will recommend reading publications on transactional memory by Maurice Herlihy, Simon Peyton-Jones, Victor Luchangco and Mark Moir (there are others, I just picked up the four I see often in the literature).</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Finally, we should not ignore the world of message passing. <span style="text-decoration: underline;"><a href="http://www.openmp.org/" target="_blank">OpenMP</a></span> and <span style="text-decoration: underline;"><a href="http://erlang.org/" target="_blank">Erlang</a></span> have been around for a long time and are designed for concurrent programming. OpenMP is an API you can use from C/C++ and FORTRAN to write parallel programs to take advantage of shared-memory architectures.  Erlang is a programming language in which you write processes that communicate exclusively using messages and if you write your Erlang programs correctly, you get the ability to scale to hundreds of processors for free.</span></p>
<p style="text-align: justify;"><span style="color: #000000;"><br />
</span></p>
<p style="text-align: justify;"><span style="color: #000000;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/application-programming-in-the-era-of-multicore-processors/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A readymade caching solution for scalable .Net applications</title>
		<link>http://www.nagarro.com/blog/shared-cache/</link>
		<comments>http://www.nagarro.com/blog/shared-cache/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 11:36:08 +0000</pubDate>
		<dc:creator>Vikas Gandhi</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Tools and Utilities]]></category>
		<category><![CDATA[caching]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=133</guid>
		<description><![CDATA[One of the challenges of scaling out applications through server farms is the need to share memory artifacts (session and cache). There are of course many techniques which can be employed. As always, looking around the Internet  reveals that there are good solutions already available.
Recently, I evaluated SharedCache, which according to their website is a [...]]]></description>
			<content:encoded><![CDATA[<p>One of the challenges of scaling out applications through server farms is the need to share memory artifacts (session and cache). There are of course many techniques which can be employed. As always, looking around the Internet <span id="more-133"></span> reveals that there are good solutions already available.</p>
<p>Recently, I evaluated <a href="http://www.sharedcache.com/" target="_blank">SharedCache</a>, which according to their website is a high performance distributed and replication cache system built for .Net applications running in server farms. The system is made available to .Net applications through a Windows service.</p>
<p> Some of the key features are listed of SharedCache are listed below:</p>
<ul>
<li>Works for both web and non-web solutions.</li>
<li>Is extremely fast for fetch.</li>
<li>It supports multiple topologies: distributed partitioned caching, replicated caching, and single instance caching. You can choose which you need based on your requirements (for example, you may want to choose replicated caching over single caching to ensure that you don&#8217;t have any single points of failure)</li>
<li>In case of Caching, one of the most important aspect is purging. With SharedCache, you have a choice to make amongst the several that are supported:
<ul>
<li>Cache Item Priority</li>
<li>Least Recent Used Item (LRU)</li>
<li>Least Frequently Used Item (LFU)</li>
<li>Time based</li>
<li>Biggest Latency First (BLF)</li>
<li>Lowest Latency First (LLF)</li>
<li>Hybrid &#8211; Creating an index based on various item attributes such as: time in cache, Amount of requests, Size, Cache Life Time, etc.</li>
</ul>
</li>
<li>Configurable maximum cache size and the load factor when the system starts to purge cached items.</li>
</ul>
<p>You can install the service by downloading it from <a href="http://www.codeplex.com/SharedCache/SourceControl/ListDownloadableCommits.aspx" target="_blank">CodePlex</a>. And several samples and discussions are available at the <a href="http://netrsc.blogspot.com/search/label/SharedCache" target="_blank">author&#8217;s blog</a>. The best thing about this service is that there is plenty of documentation to guide you.</p>
<p>Just try it out. Its pretty cool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/shared-cache/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Downturn Creates Opportunities for Innovation and Competition</title>
		<link>http://www.nagarro.com/blog/downturn-creates-opportunities-for-innovation-and-competition/</link>
		<comments>http://www.nagarro.com/blog/downturn-creates-opportunities-for-innovation-and-competition/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 15:25:44 +0000</pubDate>
		<dc:creator>Vikas Sehgal</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/?p=119</guid>
		<description><![CDATA[The opportunity for competitive advantage is far greater when potential rivals are frozen at a standstill. ]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small; font-family: Calibri;">As we all know, the economy has been in a tailspin for several months. When the economic crisis first began to rumble, many of our customers and prospects slammed the brakes on technology spending. But then before too long, we started noticing a change: smart companies began to realize that this was actually the perfect time to step on the gas and leave their competitors in the dust. The opportunity for competitive advantage is far greater when potential rivals are frozen at a standstill. <span id="more-119"></span></span></p>
<p><span style="font-size: small; font-family: Calibri;">Today we announced that <a href="http://www.nagarro.com/NewsEvents/Press%20Releases/Downturn_Creates_Opportunity.aspx">Nagarro has signed on more than two dozen new customers in the US and Europe in the past three quarters</a>. And we continue to sign new deals almost every week. Like our customers, we at Nagarro are looking at the downturn as an opportunity to keep our focus sharp and our resources first-rate. Obviously we are glad to be maintaining a steady presence despite the ups and downs of the market, but more importantly, today’s news sends a strong signal that at the high end of the technology market, innovation and competition are alive and well. </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/downturn-creates-opportunities-for-innovation-and-competition/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Log your exceptions to the cloud</title>
		<link>http://www.nagarro.com/blog/an-alternative-way-to-do-exception-logging/</link>
		<comments>http://www.nagarro.com/blog/an-alternative-way-to-do-exception-logging/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 07:58:04 +0000</pubDate>
		<dc:creator>Vaibhav Gadodia</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Exception Logging]]></category>

		<guid isPermaLink="false">http://www.nagarro.com/blog/an-alternative-way-to-do-exception-logging/</guid>
		<description><![CDATA[Exception Logging is always an interesting problem to solve. Depending on your needs you may have a simple log statement which writes to a text file, or you may need to have a full-fledged exception management module which logs exceptions to the database, categorized them, and generates notifications. There is no single solution for how [...]]]></description>
			<content:encoded><![CDATA[<p>Exception Logging is always an interesting problem to solve. Depending on your needs you may have a simple log statement which writes to a text file, or you may need to have a full-fledged exception management module which <span id="more-108"></span>logs exceptions to the database, categorized them, and generates notifications. There is no single solution for how to log and manage your exceptions. It helps then to be aware of as many techniques and options as you can; since you never know which will come in handy in a situation.</p>
<p>One method to log exceptions is to log them in the cloud. And there exists a useful service which makes your job easier.</p>
<p> <!--more-->
<p>A service in the cloud represents a service that is hosted on the Internet, available to you through an API, so that you have no idea how it is physically implemented. This makes things simple for you since you don&#8217;t have to worry about writing implementation code for the exception logging and reporting framework. You only need to call it.</p>
<p>The service that I am discussing is called <a href="http://www.hoptoadapp.com/" target="_blank">HopToad</a>. The service offers a simple to use API which allow you to log exceptions from your application. The exceptions are stored in the cloud and are available to you from a central web-based console. All the logged exceptions are presented in easy to understand and navigable way. For example, you can see which errors are occurring most often, or which one is the latest error that came up and from where. You can look at error details and stack traces.</p>
<p>The service developed to be used from within RubyOnRails applications. However, they have an open API, and can be accessed through any technology stack. K. Robertson has made a .Net wrapper available for logging to HopToad. It&#8217;s called <a href="http://github.com/krobertson/hopsharp/tree/master" target="_blank">HopSharp</a>. It is fairly straight forward to use (just drop the DLL in your application and you are good to go). I can imagine that it would be straight forward to write a Log4Net extension for this service as well.</p>
<p><strong>When to use this?</strong></p>
<p>So, when would you use something like this. While the final decision to use this would vary from project to project and client to client, I can think of the following scenarios:</p>
<ul>
<li>The application is a work in progress and you are expected to release a number of updates. Typically, in such scenarios, a lot of testing happens while the application is in deployed state. A logging framework such as this will allow you to monitor the application as it is being used, and priorities on bugs can be assigned based on frequency and severity. </li>
<li>You have an application deployed at multiple locations and you would like to see a consolidated view of the exceptions being reported. </li>
<li>As a way to save time and effort. This is a ready made framework where you don&#8217;t need to impart any effort for implementing an exception logging and notification system. </li>
</ul>
<p>I am pretty sure that there are other such services out there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/an-alternative-way-to-do-exception-logging/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ruby vs. Java</title>
		<link>http://www.nagarro.com/blog/ruby-vs-java/</link>
		<comments>http://www.nagarro.com/blog/ruby-vs-java/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 17:44:34 +0000</pubDate>
		<dc:creator>Bill Kayser</dc:creator>
				<category><![CDATA[Guest Blog: Kayser]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[radrails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/ruby_vs_java/</guid>
		<description><![CDATA[It&#8217;s not that we don&#8217;t have enough people offering opinions on what is a better language.  It&#8217;s just that some of us never tire of discussing it.  There are so many perspectives, so many arguments, and so many people willing to   spend time blogging about it you&#8217;d think we&#8217;d all be pretty sick of it [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s not that we don&#8217;t have enough people offering opinions on what is a better language.  It&#8217;s just that some of us never tire of discussing it.  There are so many perspectives, so many arguments, and so many people willing to  <span id="more-29"></span> spend time blogging about it you&#8217;d think we&#8217;d all be pretty sick of it by now, and I might move on to some more interesting less traveled topic, like <em>Semicolons: friend or foil to good programming?</em> or <em>Extreme Programming, Acceptance Testing, and ISO 9001: Putting it All Together</em>.</p>
<p>Yet I just can&#8217;t stay away, and neither can you if you are still reading this.  So let me jump right in with my take&#8230;</p>
<p><strong><em>Ruby Doesn&#8217;t Scale</em></strong>.  It can&#8217;t take you to the same places Java can.</p>
<p>I don&#8217;t mean performance-wise.  And I don&#8217;t necessarily believe it can&#8217;t scale complexity-wise.  I just think it won&#8217;t scale with the size of a team.  I can&#8217;t see an application equivalent to 2 million lines of Java code with 80 developers written in Ruby.  Here are some reasons why:</p>
<ul>
<li>the language and tools don&#8217;t facilitate writing APIs<img src="http://www.nagarro.com/blog/wp-content/uploads/2009/02/java_vs_ruby1.jpg" alt="Java Books vs Ruby Books" hspace="16" vspace="16" width="243" height="200" align="right" /></li>
<li>it&#8217;s too hard to protect code from the side effects of other unrelated subsystems</li>
<li>the language and tools do not support for components or version management (see my posts on OSGi)</li>
<li>one bad Ruby developer can do a lot more damage than one bad Java developer</li>
<li>there are a lot of bad Ruby developers (I am one!)</li>
<li>the tests don&#8217;t scale&#8211;no Ruby app can survive inadequate tests, and the while the amount of tests grows linearly with the size of the application, the cost of maintaining them grows exponentially.  This may be true of any tests but&#8230;</li>
<li>you need more tests with Ruby&#8211;a Java app can survive without a complete unit test suite.  In fact, some large Java app can survive without tests at all.  Call me crazy but I&#8217;ve seen it.  What did we do before JUnit, after all?  I don&#8217;t think I&#8217;d want to work on one of those apps, but the point is, test code for Ruby is as essential as an interpreter to make a decent sized Ruby app work.</li>
<li>there&#8217;s no meta-programming in Java; that&#8217;s kind of a bummer, but it also means no massive indecipherable frameworks collapsing under the weight of the author&#8217;s cleverness, frameworks which are so unfathomable they are as brittle as COBOL.</li>
</ul>
<p>There, I said it.  Now that I did, I&#8217;ll make a couple of other observations about why I love Ruby anyway:</p>
<ul>
<li>A two million line Java program probably translates to 100K lines of Ruby code</li>
<li>80 Java developers are probably as productive as 20 equivalently skilled Ruby developers</li>
<li>With only a couple of developers, I think there&#8217;s no limit to how big the application can be.  In fact, the language is much better suited for a very small team than Java because you can be so much more efficient if you know what you&#8217;re doing.</li>
<li>The tools for Ruby are way behind Java, and there&#8217;s no reason to think they won&#8217;t catch up.  When they do, it&#8217;s entirely possible the gulf between the scalability of the languages will close substantially.  I certainly hope they will.  As far as the tools for writing Ruby go, I feel like I stepped back into 2002 when I went from Java/Eclipse to Ruby/{NetBeans/RadRails/TextMate}.  rake ~ make: when was the last time I typed in make when writing Java apps?</li>
<li>The tools may be behind, but the available libraries, plugins and gems are already very rich.</li>
<li>Ruby helped me remember why I love to write programs</li>
</ul>
<p>The last point I threw in there apropos of nothing, other than to point out that while I do miss some things about writing Java apps, I&#8217;m happy to be writing in Ruby now, and hope to keep working on it for the indefinite future, or until our app gets over 100,000 lines of Ruby which should be&#8230; never.</p>
<p>P.S. Here&#8217;s my <a href="http://www.youtube.com/watch?v=PQbuyKUaKFo">favorite entry</a> in the Ruby vs. Java debate, brought to you courtesty of RailsEnvy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagarro.com/blog/ruby-vs-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What I Learned from Ward Cunningham</title>
		<link>http://www.nagarro.com/blog/ward-cunningham/</link>
		<comments>http://www.nagarro.com/blog/ward-cunningham/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 00:51:50 +0000</pubDate>
		<dc:creator>Bill Kayser</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Guest Blog: Kayser]]></category>
		<category><![CDATA[fitnesse]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[ward cunningham]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[wycash]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/ward_cunningham/</guid>
		<description><![CDATA[Ward Cunningham is well known in the software engineering community and was famous in his own right for his work on WyCash and the development of CRC Cards, Extreme Programming, and Programming Patterns, even before his fame went to a new level as the inventor of the Wiki.  I first met him in 1995 and our [...]]]></description>
			<content:encoded><![CDATA[