<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6023764939111244906</id><updated>2010-03-15T00:05:15.122-04:00</updated><title type='text'>Business Productivity Infrastructure Optimization</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.bpioblog.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default?start-index=26&amp;max-results=25'/><author><name>Vasudeva Renjala</name><uri>http://www.blogger.com/profile/12113745101698675292</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-2221260217676129869</id><published>2009-04-07T03:20:00.001-04:00</published><updated>2009-04-07T03:22:22.999-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Migrate to Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Hybrid hosting environment'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Upcoming Product Releases'/><title type='text'>Preview into Azure Services</title><content type='html'>&lt;span xmlns=''&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Microsoft has stormed into the Cloud Computing environment with its release of 'Azure Services' into the air. This blog provides a preview into Azure Services. The CTP version of Azure was launched in the PDC 2008. Ever since, it has caught the attention of many of the Organizations. Before we rip open Azure, we need to understand what the Cloud computing is all about. Why is there so much buzz around it?&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_030UMcSJM9M/Sdm3WHvCFGI/AAAAAAAADCA/YA2vFBlNTW4/s1600-h/Az.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 217px;" src="http://2.bp.blogspot.com/_030UMcSJM9M/Sdm3WHvCFGI/AAAAAAAADCA/YA2vFBlNTW4/s400/Az.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5321486025376273506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Technically, Cloud computing encompasses any subscription-based or pay-per-use service that, in real time over the Internet, extends IT's existing capabilities.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;In simple words, it is a service that allows you to host your application in their environment, provide you with the required hardwares, softwares and services on a subscription / pay per use basis. At the same time, they reduce the upfront investment on planning, purchase of hardware and basic softwares. Thus lowering the initial investment cost and turning it into maintenance cost.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Microsoft Azure is a cloud computing solution, that encompasses a number of servers (The count keeps increasing by 10,000 every month) bound together the 'Azure Fabric'. Azure takes care of all the updates/ maintenance for the server, data back up, logging and other tasks. This allows the user to keep focus on the business requirements and leave the scalability / availability / server maintenance tasks to Azure.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-size:10pt'&gt;A number of services are provided on top of this fabric&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;.NET Services&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;SQL Services&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;LIVE Services&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Sharepoint Services *&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Dynamic CRM Services *&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style='font-size:10pt'&gt;* These services are not available in the CTP version.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-size:10pt'&gt;You can opt for the services that you require, thus you will be paying only for the services that you use. Some of the other advantages that Azure brings to the table are&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;span style='font-size:10pt'&gt;Dynamic Provisioning&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Increase/ decrease the resource used at run time &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;span style='font-size:10pt'&gt;Lower cost&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Pay as you grow. Will be billed only for resources used. &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;No Upfront cost on building / planning infrastructure &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;span style='font-size:10pt'&gt;Reduced Administration Overhead&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Easy and quick deployment for Azure hosted application &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Server maintenance are already taken care of. &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;span style='font-size:10pt'&gt;Developer benefits&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Azure supports .NET, IIS, VS08 &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Does not require extensive training to gain expertise &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style='font-size:10pt'&gt; From a developer perspective, the main advantage that Azure brings to the table is that, it allows the dev team to focus on the core business requirement and not on the administrative / extensibility or other hardware issues. Azure provides a platform for a host of the next generation applications. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Azure forms a platform for a new breed of application. But does that mean you need to jump into azure? Following are some of the key factors that needs to be considered before making any decisions. If these signatures exist on your application, then Azure definitely stays on the table.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Potential to grow many folds in terms of data / usage?&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Use social networking type of application?&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Use highly resource intensive functions from time to time?&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Require a environment to test the market?&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Require safe and secure mechanism to communicate (Internet service bus ) outside organizations  network.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Want to lower the initial cost involved in infrastructure planning and purchase&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-size:10pt'&gt;Want to lower the administrative cost of maintaining the servers ( Data backups, audit, connectivity and other server issues)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;&lt;strong&gt;Migrating an application to Azure&lt;/strong&gt; does not mean that the investment made on the traditional on premise application will no longer be used. In fact Azure can work hand in hand with traditional application. The traditional application can be extended to move the resource intensive functions to the cloud. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Based on the customer requirement, a cloud application can be&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Completely hosted in the cloud&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;A part of the application can be hosted in the cloud while the data resides on premise.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;The application resides on Premise and the data stored on Azure. &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Having said all this, we still have to understand that Azure as well as the cloud computing environment is still in a evolving stage. With all the advantages that cloud brings, it also brings a dependency to the service provider. Some of the common concerns that have bubbled up are the in terms of SLAs, maintenances charges etc which can change as times change. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='text-align: justify'&gt;&lt;span style='font-size:10pt'&gt;Taking into consideration the Microsoft branding and the kind of investment that has been put into Azure, one thing is certain, Azure is here to stay. It is time to get the creative juices to make the best use of Azure.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-2221260217676129869?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/2221260217676129869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2009/04/preview-into-azure-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2221260217676129869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2221260217676129869'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2009/04/preview-into-azure-services.html' title='Preview into Azure Services'/><author><name>Dileep Jose</name><uri>http://www.blogger.com/profile/01278399808945544612</uri><email>dileepj@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18383031594355324570'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_030UMcSJM9M/Sdm3WHvCFGI/AAAAAAAADCA/YA2vFBlNTW4/s72-c/Az.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-4865581906113168579</id><published>2009-04-07T02:57:00.005-04:00</published><updated>2009-04-07T08:20:54.337-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Talend'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Evaluation'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Comparision'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><category scheme='http://www.blogger.com/atom/ns#' term='Upcoming Product Releases'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>SSIS Vs Talend Open Studio</title><content type='html'>&lt;span xmlns=""&gt;&lt;p style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;From an initial evaluation of &lt;a href="http://www.talend.com/"&gt;Talend&lt;/a&gt; Open Studio, open source ETL tools and comparison with &lt;a href="http://msdn.microsoft.com/en-us/library/ms141026.aspx"&gt;Microsoft SQL Server Integration Services&lt;/a&gt; (SSIS) here are few quick points that were observed.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Talend Open Studio is an Open Source ETL Tool. The Tool is based off of Java and Perl. The tool presents us with wide range of ETL elements like&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Data connectivity (supports wide range of data connectivity from mySQL to Teradata supports all the widely used ODBC drivers) while SSIS has a generic ODBC connection manager, using which one can connect to data sources.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Supports Java/Perl scripts while SSIS supports Microsoft VB .NET / C# scripts (with SQL 2008).&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Developer support from the &lt;a href="http://www.talendforge.org/forum/"&gt;Talend Forums&lt;/a&gt; and Tool Documentation while SSIS comes with MSDN Books Online, hands on labs, screen casts and webcasts, as well as TechNet forums from Microsoft.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Coming to the various components/elements of the tool here's a very high level overview,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 128px"&gt;&lt;col style="WIDTH: 527px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;&lt;strong&gt;Microsoft SSIS&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;&lt;strong&gt;Elements&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Control Flow&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Containers:- &lt;em&gt;For Each Loop, For Loop, Sequence Containers, etc.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Tasks:-&lt;em&gt; Execute SQL Task, Execute Package Task, Data Flow Task, Script Task, etc&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Data Flow&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Source:- &lt;em&gt;ODBC, Excel, Flat Files, XML, etc&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Transformations:- &lt;em&gt;Aggregate, Sort, Lookup, Slowly Changing Dimension Fuzzy lookup fuzzy grouping, etc.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Destinations:- &lt;em&gt;ODBC, Excel, Flat Files, XML, etc&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Event Handlers&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Error Handling and Logging Mechanisms:- &lt;em&gt;Event Logging, Checkpoints, Error Handling&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Variables&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Global and local scoped variables&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Configuration Files&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;div&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 217px"&gt;&lt;col style="WIDTH: 422px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;&lt;strong&gt;Talend OpenStudio&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;&lt;strong&gt;Tasks/Elements&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Business Intelligence components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Supports Slowly Changing Dimensions, Supports MDX queries&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Business Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Supports Microsoft AX&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Custom Code&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Allows Custom Java code (like Script Task/Script Components in SSIS)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Data Quality&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Adding Surrogate Keys, Lookup (Fuzzy, Inteval)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Database Component&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Similar to DataFlow Container, Inputs, Outputs&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Database Utilities Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Create Tables, ParseRecordset&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;ELT Component&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Aggregates, Filter rows/columns&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;File Component&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;All File Operations&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Internet Component&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;FTP, RSS, Mails, Mom, Web services, Sockets, XML RPC, Files&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Logs &amp;amp; Errors Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Error Handlers and loggers, Job Kill, &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Misc Group Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Miscellaneous Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Orchestration Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Job Sequencing&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Processing Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Aggregations, Mapping, Transformations, Filtering, Denormalizations&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;System Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Operating System level tasks&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;XML Components&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;All XML operations&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 20px"&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: 0.5pt solid; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Variables&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: 0.5pt solid" valign="bottom"&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;color:black;"&gt;Supports creations and usage of variables&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;&lt;strong&gt;Conclusion&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;In overall perspective, we save on licensing cost associated with Microsoft SQL Server Integration Services over Talend Open Studio, but we lose out on several other aspects like,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Unified BI toolset offered from Microsoft in the form of MS BI toolset which includes Integration Services, Reporting Services, and Analysis Services when purchasing a single license of Microsoft SQL Server 2005/2008.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Developer support from online communities for MS BI.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:Tahoma;font-size:10;"&gt;Online Trainings in the form of Webcasts/ Virtual Labs/ Hands on labs etc. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-4865581906113168579?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/4865581906113168579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2009/04/ssis-vs-open-studio.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/4865581906113168579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/4865581906113168579'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2009/04/ssis-vs-open-studio.html' title='SSIS Vs Talend Open Studio'/><author><name>Shashidhara Krishnamurthy</name><uri>http://www.blogger.com/profile/02003770711841380853</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11047011134768130000'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-2720606098003602528</id><published>2009-02-24T14:41:00.007-05:00</published><updated>2009-03-10T10:46:54.789-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SilverLight'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Hybrid hosting environment'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='migrate traditional web apps'/><title type='text'>Migrating traditional web applications to Silverlight</title><content type='html'>The move from ASP.net to Silverlight is primarily driven by two factors – leverage the powerful user interface authoring features supported by Silverlight and the client side computing capabilities that it offers. Most companies have significant inventory of traditional HTML based applications. There is always a need in such companies to rapidly leverage the rich user experience of Silverlight while not having to undertake a potentially huge rewrite effort. &lt;br /&gt;&lt;br /&gt;WHAT LIES BENEATH A SILVERLIGHT APPLICATION&lt;br /&gt;Silverlight or WPF everywhere is a plug in that is delivered through a browser. It is built on the current, updated graphical subsystem from Microsoft – Windows Presentation Foundation (WPF) and integrates multimedia, graphics, animations and interactivity into a single run time environment. A Silverlight application is compiled into a self sustained package that is delivered by a host web application to a client. This execution model allows Silverlight packages to deliver the power of desktop computing over a browser. This also allows capability to build connected applications that are a step up from asp.net and Ajax applications.&lt;br /&gt;&lt;br /&gt;The runtime allows the host application to interact with this package. HTML Bridge is a technology in Silverlight that enables you to access the HTML Document Object Model (DOM) from managed code, and to call managed code from JavaScript. This feature, called HTML Bridge, allows the Silverlight package to interact with the host web application.&lt;br /&gt;&lt;br /&gt;CHOOSING AN IDEAL MIGRATION SOLUTION&lt;br /&gt;Migration of an asp.net application to Silverlight is not necessarily a line by line code conversion. It involves revamping the user experience to unleash the power of Silverlight and also re architecting the application to leverage the client computing capabilities. There should be an analysis and assessment phase followed up by development and testing. &lt;br /&gt;&lt;br /&gt;There are also key business objectives that need to be met while selecting an optimal migration solution. The most prominent being&lt;br /&gt;• Time to market&lt;br /&gt;• Integration with existing applications in the enterprise&lt;br /&gt;• Seamless user experience&lt;br /&gt;• Turnaround time for changes&lt;br /&gt;&lt;br /&gt;An assessment of the existing applications in the enterprise is of key importance, as it needs to be fully understood from a functional and technical perspective, to provide a complete migration strategy.&lt;br /&gt;&lt;br /&gt;Based on the results of the assessment there are three ways to port a web application to Silverlight:&lt;br /&gt;&lt;br /&gt; --&gt; POWER CONTROLS: SILVERLIGHT CONTROLS HOSTED IN SINGLE ASP.NET PAGE&lt;br /&gt;Here specific controls are ported to Silverlight and hosted within the asp.net web page. The application will continue to remain asp.net while specific functionalities alone are ported to Silverlight.&lt;br /&gt;Key examples are Stock tickers, weather widgets etc.&lt;br /&gt;&lt;br /&gt; --&gt; SEPARATE APPLICATIONS WITH TOUCH POINTS &lt;br /&gt;In this type of integration Silverlight and asp.net applications both exist in parallel and with limited interactivity. The two applications will have navigational touch points. The user moves from one application to the other based on his selection.&lt;br /&gt;&lt;br /&gt; --&gt; HYBRID: ASP.NET PAGES HOSTED WITHIN A SILVERLIGHT HOSTING ENVIRONMENT&lt;br /&gt;If the destination technology is Silverlight, this is the recommended alternative to a total rewrite. In this approach, we build a hosting environment that is capable of delivering asp.net and Silverlight pages. The asp.net application is iteratively migrated to Silverlight.&lt;br /&gt;&lt;br /&gt;For most corporates with significant inventory in traditional HTML web applications  option 3 - building a hybrid hosting environment is the best option. This allows for the shortest time to market delivering the maximum impact to the user. The singular hosting environment ensures that the user experience is seamless and not that of a mash up of two disparate applications and technologies.&lt;br /&gt;&lt;br /&gt;The hybrid hosting environment delivers the following key benefits:&lt;br /&gt; The application will be immediately Silverlight – maximize end user experience by leveraging powerful features like animations, vector graphics, advanced typography, 3D drawing, adaptive documents etc.&lt;br /&gt; Multi-content hosting – migrate only the necessary content to Silverlight.&lt;br /&gt; Migrate iteratively – identify and migrate few pages at a time. Evolution, not revolution is the mantra.&lt;br /&gt; Backward compatibility – Allow content to remain in the preferred technology. Reports and other ‘preferably HTML’ content can continue to exist in HTML form.&lt;br /&gt;&lt;br /&gt;EVOLVING AN APPLICATION TO SILVERLIGHT&lt;br /&gt; EVOLUTION VS REVOLUTION&lt;br /&gt;Revolution is a jump to the next generation technology in one big undertaking. Cut over takes place quickly and on a large scale: the entire entity is transformed. Evolution is to take incremental steps to the next generation over a longer period. It reduces risk and upheaval. And it allows for assessment of options and planning accordingly. Evolution tends to deliver superior performance over the long-term. Evolution means stepping from the current to the next generation. The steps are incremental, over a period of time. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_6gpZu9Cv4EM/SaRK_4qw9nI/AAAAAAAAACQ/2msdhHpGy8I/s1600-h/Blog+Pic+2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 146px;" src="http://2.bp.blogspot.com/_6gpZu9Cv4EM/SaRK_4qw9nI/AAAAAAAAACQ/2msdhHpGy8I/s200/Blog+Pic+2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306448722353256050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Building a hybrid hosting environment also allows for backward compatibility with predecessor products and processes. This allows the entities to exist in preferred form and technology while being a singular unit. This allows revolutionary goals to be achieved through an evolutionary process.&lt;br /&gt;&lt;br /&gt; MIGRATION METHODOLOGY&lt;br /&gt;Based on the technical and business drivers at play, we suggest the following migration methodology to the desired destination solution.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At a high level the migration methodology needs to involve the following steps&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_6gpZu9Cv4EM/SaRK_7xGgAI/AAAAAAAAACY/vnbetgjub1s/s1600-h/Blog+Pic+1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://4.bp.blogspot.com/_6gpZu9Cv4EM/SaRK_7xGgAI/AAAAAAAAACY/vnbetgjub1s/s200/Blog+Pic+1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306448723185139714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Fig: iterative development methodology&lt;br /&gt;&lt;br /&gt;--&gt; Assessment&lt;br /&gt;&lt;br /&gt;a. User experience finalization&lt;br /&gt;b. Identifying the migration candidates&lt;br /&gt;&lt;br /&gt;In this phase a thorough assessment of the existing applications is done. A validation of the architecture based on the assessment is done. &lt;br /&gt;&lt;br /&gt;The primary tasks completed will be user experience finalization and identifying the migration candidates. The outputs of this task are wire frames or mockups, and guidelines for the user experience. &lt;br /&gt;&lt;br /&gt;Also as part of the identifying the migration candidates a list of items to be eventually migrated is identified. Also a priority on which the migration has to be performed is identified. Using these two artifacts a high level iterative migration plan is drawn up. An outline of the destination product, with the details of its constituent applications is also drawn up.&lt;br /&gt;&lt;br /&gt;--&gt; Infrastructure development&lt;br /&gt;a. Develop Hosting framework&lt;br /&gt;i. Build host shell and utilities&lt;br /&gt;ii. Develop integration enablers and utilities&lt;br /&gt;     In this phase the infrastructure to enable the iterative migration is developed. First based on the output from the previous Assessment phase, a detailed design is drawn out for these components, followed by development. Here the following deliverables are built&lt;br /&gt;1. A hosting framework&lt;br /&gt;2. Utilities and enablers for integration&lt;br /&gt;3. Common services&lt;br /&gt;--&gt; Service Orientation&lt;br /&gt;This task can happen in parallel with the Infrastructure development. All the data access and business logic that needs to be accessed by both Silverlight and asp.net application is exposed as services. This includes&lt;br /&gt;1. Legacy services(COM+ etc)&lt;br /&gt;2. Common business logic&lt;br /&gt;3. Data access methods&lt;br /&gt;--&gt; Iterative Development&lt;br /&gt;a. Source Code Development&lt;br /&gt;b. Changes to framework&lt;br /&gt;In this phase the actual migration happens. Here based on the priority drawn up in Assessment phase, a set of items are taken up for migration. Detailed design is performed and development is done. If the set of tasks needs an update to the framework, that too is done here. &lt;br /&gt;--&gt; Deployment&lt;br /&gt;a. Testing and stabilization&lt;br /&gt;b. Production deployment&lt;br /&gt;&lt;br /&gt;The application is tested and stabilized and deployed to production. &lt;br /&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-2720606098003602528?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/2720606098003602528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2009/02/migrating-traditional-web-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2720606098003602528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2720606098003602528'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2009/02/migrating-traditional-web-applications.html' title='Migrating traditional web applications to Silverlight'/><author><name>Hari Nair</name><uri>http://www.blogger.com/profile/09108984380181624428</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15825592435928378078'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6gpZu9Cv4EM/SaRK_4qw9nI/AAAAAAAAACQ/2msdhHpGy8I/s72-c/Blog+Pic+2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-4288428800977841759</id><published>2009-02-09T09:26:00.004-05:00</published><updated>2009-02-09T10:41:14.859-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><title type='text'>Building Highly Testable Web Applications With ASP.Net MVC</title><content type='html'>&lt;p&gt;Web applications are notorious when it comes to testability. The problem is further compounded when applications have a complex user interface. Recently we did an architecture consulting for one of our clients in the financial industry for a web based application which is part of their core product offering. The product is an enterprise solution which supports multiple client configurations. The application is built on classic ASP and COM relying on the main database of the product for storage apart from a centralized file storage system.&lt;br /&gt;One of the key challenges faced by the application was testability. With code and markup being tightly coupled, what some ASP.Net developers derisively call as spaghetti code, it was close to impossible to write functional unit test cases for the application. The most likely solution was migration of the application to ASP.Net with clear separation of code from markup. However past experience told us that this works well only if the pages are fairly simple and complex pages often resulted in bloated code behind files which are hard to test and maintain. This lead us to consider ASP.Net MVC as a suitable solution approach.&lt;br /&gt;In the world of web applications adoption of MVC pattern opens up possibilities like never before. It is common practice to have minimal code in the code behind and move the operation logic in its entirety to controllers with the ability to support multiple views. This enables clear separation of view from the presentation logic and thereby creating opportunities for testing the application which hitherto didn’t exist. Typically a test double is hooked up with the controllers and one could proceed with testing well before the look and feel of the user interface gets finalized.&lt;br /&gt;The folks at Microsoft foresaw this and introduced the ASP.Net MVC framework as an alternative approach to the traditional web forms based development model. ASP.Net MVC paves way for building applications which follow test driven development (TDD). Controllers could be unit tested outside the ASP.Net process itself and any unit testing framework could be leveraged for this purpose.&lt;br /&gt;There are other benefits as well such as ASP.Net MVC comes with a powerful URL routing mechanism. No longer are requests made to specific web pages with an extension. For example, the URL MyServer.com/Orders/Status/1234 would replace MyServer.com/Orders/ Status.aspx?id =1234. Note the difference: ASP.Net MVC URLs follows a more RESTful style compared to the old web forms model.&lt;br /&gt;Few points that need to be kept in mind before making key decisions:&lt;br /&gt;1) ASP.Net MVC ushers in a radical change in the underlying framework. Pages no longer receive requests; instead requests are routed to controller classes which manage the views. It is quite possible to support other higher level frameworks on top of MVC, for instance building a composite user interface with Composite Web application block with an MVC approach is possible.&lt;br /&gt;2) ASP.Net MVC as a framework addresses building user interfaces in a fundamentally different way. However when it comes to strategies for authentication, session management, use of providers, authorization, localization, caching etc there are no changes. An interesting implication is parts of an application rebuilt with ASP.Net MVC can coexist with rest of the application still using the web form post back model making a strong case for migration.&lt;br /&gt;3) ASP.Net MVC introduces more elements in the projects than one would normally have. It is typical for a complex web page to be broken into multiple views and controllers. In a sense, few tightly coupled larger components are broken up into several loosely coupled parts. Sometimes this is viewed as a disadvantage.&lt;br /&gt;4) One does really need to think in terms of MVC to realize the benefits, and better design skills can make a telling difference. ASP.Net MVC applications are typically high on design.&lt;br /&gt;&lt;br /&gt;Since the key issues of our client revolved around testability and a maintainable codebase, ASP.Net MVC seemed to be a natural fit. However there were some concerns around ASP.Net MVC being a brand new framework in its beta version (a release candidate is available now). However such fears were unfounded for the following reasons:&lt;br /&gt;1) ASP.Net MVC though it was a beta version came with an explicit go live license from Microsoft. Microsoft had experimented with several preview editions for almost a year, before deciding the bits for the beta edition. A "go live" license ensured backward compatibility in future versions.&lt;br /&gt;2) Building web applications on MVC is an established norm, though it is new to ASP.Net. Frameworks like Ruby on Rails rely heavily on the MVC pattern. Even before ASP.Net MVC , third party solutions were available for building ASP.Net applications using MVC pattern. More notable among them is Monorail framework of Castle project. ASP.Net MVC works well with these third party solutions. For example ASP.Net MVC optionally lets users plug in MonoRail’s view engine. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Apart from suggesting the ASP.Net MVC approach, recommendations were made around strategies for session management, caching, storage, load balancing, use of third party controls &amp;amp; themes. All considerations applicable to ASP.Net applications hold good for applications built on ASP.Net MVC.&lt;br /&gt;As with any new framework one can expect some churn, however the most recent cut of ASP.Net MVC is quite stable and without doubt a whole new way for building great web applications.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-4288428800977841759?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/4288428800977841759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2009/02/building-highly-testable-web.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/4288428800977841759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/4288428800977841759'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2009/02/building-highly-testable-web.html' title='Building Highly Testable Web Applications With ASP.Net MVC'/><author><name>Arun J D Devaraj</name><uri>http://www.blogger.com/profile/08646969685573415191</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00814755809132094138'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-2144478844061712126</id><published>2009-02-02T19:41:00.061-05:00</published><updated>2009-02-02T21:37:03.040-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='SMO'/><category scheme='http://www.blogger.com/atom/ns#' term='Retail Industry'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>MSDE to SQL Express 2008 Migration</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;One of our Consulting engagements demanded for an MSDE to SQL Express 2008 database upgrade to occur at the time of the client application installation. So we proposed a solution for using SQL Management objects (in short SMO) to accomplish this task. SMO is defined as a collection of objects that are designed for programming all aspects of managing SQL Server. SMO are industry standard practice to provide an abstraction to the end user with the Databases. Here’s our experience with SQL Management Objects on this engagement. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;u&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;u&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;u&gt;&lt;strong&gt;Objectives:-&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;Our customer happens to be a giant in the retail industry. The customer had a Purchase Order Management Client application which was several releases old built on the .NET Framework 2.0 and SQL Server 2000 Microsoft Data Engine (MSDE). The client application uses a SQL Server 2000 Desktop Database Engine (MSDE) database to store most data, consisting of lookup data synchronized with the central server and worksheet data that are created and modified by the end user. The current security architecture of the application uses a SQL defined account. In order to support the latest release for the client application our development team decided to upgrade from MSDE to SQL Express 2008, since SQL Express 2008 had better security features than MSDE.&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;&lt;u&gt;Challenges:- &lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;The major challenges that we faced during this engagement was to come up with a strategy so that the end user/Technical support Staff had very minimal amount of task while performing this upgrade. So our strategies included, &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;A silent installation script for installing SQL Express 2008 with a named instance&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;When the application is upgraded, move the old worksheet data from the old MSDE instance to new SQL Express 2008 instance.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;u&gt;&lt;strong&gt;Silent Installation of SQL Express 2008&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;Few pre requisites for SQL Express 2008 installation are, &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;.NET Framework 2.0 SP2 or higher&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Windows Installer 4.5&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;Since our new application was being built on .NET 3.5, we had to upgrade all the retailers’ machines with .NET Framework 3.5 SP1, but this does not ensure that we have Windows Installer 4.5 installed on the machine.&lt;br /&gt;So we had to write a custom MS DOS batch script which checks for the Windows Installer 4.5 and proceed further with SQL Express installation. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;&lt;u&gt;Database Migration from MSDE to SQL Express 2008&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;Now comes the interesting part of the whole migration where, we had to come up with a strategy to migrate the existing database from MSDE to SQL Express 2008. To this the SQL Management Objects (or SMO) came in very handy for us to do the development.&lt;br /&gt;Here is flow chart of actions that needs to be taken in order to migrate the database from MSDE to SQL Express 2008,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5298371369475294434" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 352px; CURSOR: hand; HEIGHT: 458px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mhrKMBdt-j8/SYeYsEWsxOI/AAAAAAAAAm4/gmOdmHu2Wm8/s400/Flowchart2.JPG" border="0" /&gt;&lt;/span&gt; &lt;span style="font-family:trebuchet ms;"&gt;Here is the code snippet where we do the database migration from MSDE to SQL Express 2008.&lt;br /&gt;First of all we must add the following references for SMO,&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5298371995224183970" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 220px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mhrKMBdt-j8/SYeZQfc3FKI/AAAAAAAAAnA/L1Yqv5FyGHk/s400/References1.jpg" border="0" /&gt;&lt;/span&gt; &lt;span style="font-family:trebuchet ms;"&gt;The Class diagram for the same is as below,&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5298372203348972082" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 381px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mhrKMBdt-j8/SYeZcmxrUjI/AAAAAAAAAnI/0LhnD3qvf30/s400/ClassDiagram1.jpg" border="0" /&gt; &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;&lt;u&gt;Class Constructor&lt;/u&gt;&lt;/strong&gt;:-&lt;/span&gt;&lt;br /&gt;The class constructor is being used to initialize the Server objects and to obtain a handler to the MSDE and SQL Express Instances.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5298388944232606306" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 302px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mhrKMBdt-j8/SYeorDbXamI/AAAAAAAAAoA/2Ut_JGq_sbg/s400/Constructor1.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;u&gt;&lt;strong&gt;Getting physical file names of the database in MSDE:-&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;This function gets all the physical files names of the database, a database can include several Data files and log files collections, The FileGroupCollection objects is a collection of all the data files associated with the database, while the LogFileCollection object as the name suggests has a collection of all the log files of the database. It becomes essential for us to obtain all the physical files of the database before migrating it to SQL Express 2008.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5298388948048713890" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 287px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mhrKMBdt-j8/SYeorRpMmKI/AAAAAAAAAoI/3gKI-Yamr7Y/s400/GetPhysicalFileName.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;&lt;u&gt;Detaching the database from MSDE and attaching it to SQL Express 2008&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;The Server object gives us methods to detach and attach a database; these methods are used as below: &lt;/span&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5298388953463109602" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 398px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mhrKMBdt-j8/SYeorl0Ft-I/AAAAAAAAAoQ/XQYg2IxJfbU/s400/MigrateDatabase.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;We hope the information was useful. We will come up with such information more in the future. &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-2144478844061712126?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/2144478844061712126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2009/02/msde-to-sql-express-2008-migration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2144478844061712126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2144478844061712126'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2009/02/msde-to-sql-express-2008-migration.html' title='MSDE to SQL Express 2008 Migration'/><author><name>Shashidhara Krishnamurthy</name><uri>http://www.blogger.com/profile/02003770711841380853</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11047011134768130000'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mhrKMBdt-j8/SYeYsEWsxOI/AAAAAAAAAm4/gmOdmHu2Wm8/s72-c/Flowchart2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-5878197489415407045</id><published>2008-12-30T18:06:00.024-05:00</published><updated>2008-12-30T18:57:17.536-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Retail Industry'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>Purchase Order Management</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;One of our consulting engagements on Microsoft Business Intelligence Stack is with Purchase Order Management for a retail giant in apparels and home goods across the United States. When it comes to the Retail Industry, most people tend to think it as a Point of Sale (POS) solution. Apart from a POS application, the Retail industry also has to cater to the needs of the retail stores for their Order Management. In simple terms a Purchase Order Management System is a system which is used to manage the purchase orders. But what makes a purchase order (PO) a vital document is that, it is a document issued by a buyer to a seller, indicating the type, quantities and agreed prices for products or services the seller will provide to the buyer. Sending a PO to a supplier constitutes a legal offer to buy products or services. Acceptance of a PO by a seller usually forms a once-off contract between the buyer and seller so no contract exists until the PO is accepted. So this makes a PO, very critical document for any retailer.&lt;br /&gt;&lt;br /&gt;The company has a Purchase Order Management application suite which is several releases old. This application suite has few client applications built over Microsoft .NET coupled with legacy systems like Mainframes and RS6000 for Retail shops to place orders from their retail outlets.&lt;br /&gt;&lt;br /&gt;Our team proposed new application architecture to cater to the needs of the PO Systems, as there were several challenges with upgrading the application, i.e., any change one of the modules in the application involved end-to-end changes in all the layers of the application. The new architecture of the application is based on .NET 3.5, WCF, BizTalk, SharePoint, SQL Server 2008 BI Stack. Now let us discuss about the role of Microsoft BI stack in this engagement.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Scenario&lt;/strong&gt;:-&lt;br /&gt;As per the existing application architecture, the retail shops and merchandising agents have the flexibility to either fill out a worksheet using a thick client application and transmit them to the server, where the purchase orders are created and moved to the Mainframes, or, the retail shops could place their orders via the merchandising agents, in which case, there were two workflows, one being the Merchandising Agents using the application to fill out a form to generate a PO or, create the PO on the Mainframe. So these two types of the purchase orders are categorized as to Application generated and non application generated purchase orders.&lt;br /&gt;&lt;br /&gt;Worksheets are created using the Client Application is stored in the form of an XML document in the SQL Server 2000 (Client Application) and DB2 (Mainframe and RS6000) databases.&lt;br /&gt;&lt;br /&gt;Here’s the block diagram that shows the current workflow of Purchase Order (PO) Processing,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5285733320563434690" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 368px; CURSOR: hand; HEIGHT: 117px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mhrKMBdt-j8/SVqyczWhJMI/AAAAAAAAAhg/O70ROVVXaFA/s400/Existing+PO+Architecture.JPG" border="0" /&gt;&lt;strong&gt;Objective&lt;/strong&gt;:-&lt;br /&gt;The scope of this engagement is widespread, and there are several teams working different modules of the engagement.&lt;br /&gt;Here are few of the modules that we were involved in, &lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Conversion from SQL Server 2000 MSDE to SQL Express 2008 for Client Applications.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Implement Integrated Windows Authentication on the Client Application.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Generate Statistics and Audit Reports for Application/Feature usage. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;Conversion from SQL Server 2000 MSDE to SQL Express 2008 for client application&lt;/strong&gt;&lt;br /&gt;This task looks simple though but posted a numerous issues at the time of implementation, here are the few of the tasks that were carried out for the same,&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Silent installation script to install SQL Express 2008 pre requisites and resume installation on system restart. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Silent installation batch script to install SQL Express 2008 with a named instance. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;Implement Integrated Windows Authentication on the Client Application&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;Implementing integrated windows authentication was rather simple task. We had to create one LDAP group for the Retail shops/Merchandising Agents and one LDAP group for the administrative users and attach them to the corresponding roles to have data entry or administrative permissions. Thanks to Credential caching feature of Windows, this ensures integrated windows authentication on SQL Express 2008 even in a disconnected mode.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;strong&gt;Generate Statistics and Audit Reports for Application/Feature usage&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;The Statistics and Audit Reports for Application usage is one of the major tasks that we were involved in. There are 3 different reports,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;A report to determine how many retail shops are using the client application. The selection criteria for this report is flexible to produce the result based on different combinations of divisions (for ex, apparels, home goods, etc), departments (ex, winter wear, men’s footwear, accessories, etc), retail shop and worksheet transmitter, this is also called the productivity report.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;A report that tells how many PO’s were created for individual departments also called as master report, with the division as selection criteria.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;An audit report that provides the audit information regarding use of the Lead Time Calculation (LTC) logic, that suggests optimal shipping dates, within the client application, in order to assess the level of use as well as the amount of manual adjustment that is performed after the logic has been applied in the client application. The weekly report illustrates by user the methods by which ship date and ladder plan information was supplied to the client application. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;To generate these reports we have used SQL Server Integration Services (SSIS) as ETL tool and SQL Server Reporting Services (SSRS) for the reporting, coupled with ASP.NET 2.0 Website to host the reports and provide selection criteria.&lt;br /&gt;&lt;br /&gt;The SSIS packages fetches PO’s from various data sources such as the SQL Server 2000 databases, Mainframe and RS6000 DB2 databases and as per the new architecture of the system, the master data will also be available in a SQL Server 2008 databases. But since there are divisions which are still running on the older version of the application suite, it is necessary to keep the data from the older system as is and provide a switch for the package to start fetching data from SQL Server 2008 databases when all of the divisions are migrated to new version.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;productivity report&lt;/strong&gt; and the &lt;strong&gt;master report &lt;/strong&gt;are straight forward. These reports count the number of PO’s generated using client application, Mainframes, and RS6000. After getting the count of PO’s these are then stored in the corresponding tables for the reports.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;audit report&lt;/strong&gt; requires to read through the worksheet and PO XML documents stored in the database to check whether the LTC logic was used or not. SQL Server provides us with XQuery language, using which we can query xml data type. XQuery handles both typed and untyped data. After reading through the XML documents, the values of the required fields are stored in a table. This table contains all the line items of the worksheet, in which the LTC logic was switched on/off.&lt;br /&gt;&lt;br /&gt;Apart from these reports there are other BI requirements in this application suite which are planned, for example, analyzing quarterly sales results and forecasting revenues, using SQL Server Analysis Service. Soon we will have more updates on this blog, with more data related to Microsoft BI technologies used in this engagement. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-5878197489415407045?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/5878197489415407045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/12/purchase-order-management.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/5878197489415407045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/5878197489415407045'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/12/purchase-order-management.html' title='Purchase Order Management'/><author><name>Shashidhara Krishnamurthy</name><uri>http://www.blogger.com/profile/02003770711841380853</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11047011134768130000'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mhrKMBdt-j8/SVqyczWhJMI/AAAAAAAAAhg/O70ROVVXaFA/s72-c/Existing+PO+Architecture.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-2253982403104341964</id><published>2008-12-29T12:27:00.004-05:00</published><updated>2008-12-29T12:39:55.951-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Content Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='WCM'/><title type='text'>WCM Fundamentals</title><content type='html'>Web Content Management or WCM in short is one of the more interesting topics on MOSS. This blog aims to provide an overview of WCM, explain what is WCM, why is it special and more importantly, how is it useful for you.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;So what is WCM in simple terms&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WCM is a rich content authoring and management platform. It provides a set of controls and publishing features that allow the site owners to host content centric sites. It takes care of the site branding, publishing, content authoring, workflows etc. WCM forms a part of the Enterprise content management solution, which in turn forms a part of MOSS 2007. It also leverages the Office Word and Infopath.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In short it is a very scalable solution that separates the content and presentation, relieving the burden on the IT department.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;To better understand the solution that WCM provides, we need to understand the problem first.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Managing a content centric web site is by no means a simple task. In most of the organization, it will be the IT team that will have access to add new pages, maintain the pages and keep the site running smoothly.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The content contributor has to undergo the overhead of approaching the IT staff for each and every change. This translates to longer process and higher cost of operation. Many a times the content will have to be edited a few times before it is correctly published.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is where WCM comes into picture. WCM provides a platform. It defines the site branding, sets the templates, look and feel, authoring rules, publishing rules, workflows, various levels of securities etc.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The content contributor can now focus on his content alone and leave the development hassles aside. He simply submits his data. This will in turn validate the data, start the workflows, approval cycles and finally publish the content without the support of IT staff. The final content will be published in accordance with the look and feel of the rest of the site.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WCM incorporates all features in Microsoft content management server 2002 (MCMS). Microsoft has discontinued providing CMS as a separate product, but instead, it provides the enhanced version ( WCM ) along with MOSS 2007.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of the important features of the WCM are listed below.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Workflows&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Search functionality&lt;br /&gt;&lt;/li&gt;&lt;li&gt;RSS facilities&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Built in Caching mechanism &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Supports multiple devices &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Better Versioning mechanism&lt;br /&gt;&lt;/li&gt;&lt;li&gt;More events captured&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pluggable Authentication&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Reusable Content&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Web based management&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Having said all this, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Does this really make sense?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A content heavy web site will have frequent changes. New pages will be added by various contributors. Managing the new pages, recording the version history, validating data, format etc is a mammoth task. Creating a application to handle the same will cost a fortune. WCM automates most of the processes and brings the focus to what matters the most, the content. This way, the contributor will be able to focus more on the data and be able to publish the content in a quick efficient manner.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The process does not require support from the IT department as the contributor can himself manage the content online. Thus saving a lot of effort as well as money.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In short, WCM saves Time and Money. And that makes a lot of sense.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-2253982403104341964?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/2253982403104341964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/12/wcm-fundamentals.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2253982403104341964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2253982403104341964'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/12/wcm-fundamentals.html' title='WCM Fundamentals'/><author><name>Dileep Jose</name><uri>http://www.blogger.com/profile/01278399808945544612</uri><email>dileepj@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18383031594355324570'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-5812265178761872644</id><published>2008-09-26T02:31:00.005-04:00</published><updated>2008-10-02T03:23:40.064-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XBAP'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Composite Application'/><category scheme='http://www.blogger.com/atom/ns#' term='Presentation Layer'/><category scheme='http://www.blogger.com/atom/ns#' term='UX'/><title type='text'>Strategy for building modern UX on WPF</title><content type='html'>Recently we were on an &lt;a href="http://techturks.blogspot.com/2008/04/user-experienceux.html"&gt;UX&lt;/a&gt; consulting assignment with a financial services provider in the east coast of the United States. The company had an application suite that was several releases old with monolithic user interfaces which needed whole lot of rethinking when it came to good design.&lt;br /&gt;The applications had thick and thin clients with related functionality built using Delphi and VC++. ActiveX controls were used to provide rich functionality inside thin clients.&lt;br /&gt;The company was facing problems in key areas:&lt;br /&gt;&lt;strong&gt;Upgradeability&lt;/strong&gt; - This was a major challenge with clients using different versions of the applications and turned into a nightmare when considering client specific customizations. It’s not uncommon for an upgrade to bring down the entire system.&lt;br /&gt;&lt;strong&gt;Manageability&lt;/strong&gt; – Custom formats, policies and use of certain terminologies made the applications very hard to manage. There was a sore need for standardization across the system.&lt;br /&gt;&lt;strong&gt;Interfacing&lt;/strong&gt; - Use of several proprietary protocols for communication was a priority issue. It was not an easy task for a third party to sync up with the applications.&lt;br /&gt;&lt;strong&gt;Reuse&lt;/strong&gt; – This was a major pain point with duplication of modules and controls across product lines. The sheer vastness of the codebase aggravated the problem. A careful look leaves one with an impression that things could be lot simpler.&lt;br /&gt;Due to budget concerns, there was a crying need to get out a minimal set of functionality that would make the necessary difference. Hence it was out of question to make server side changes or modify the existing communication strategies.&lt;br /&gt;After some discussions we were able to buy agreement across all quarters to base the entire application suite on thick clients and build them using WPF. XBAPs (WPF application hosted inside a browser window) were considered but sidelined, as the limitations weighed down on everybody.&lt;br /&gt;Fortunately, we had a functional consultant working with us, who made life easier by addressing the need for reuse in the user interface and raising a clarion call for standardization.&lt;br /&gt;On the technical side, couple of things were evident. There was a huge potential for identifying common behavior across applications and putting them into well defined silos. There was potential to turn the monolithic user interface screens into composite ones through use of frameworks such as composite WPF (aka &lt;a href="http://techturks.blogspot.com/2008/03/prism-new-composite-application.html"&gt;Prism&lt;/a&gt;). However considering the limited budget and the significant analysis effort that is a norm for turning a massive monolithic application into a composite one this idea was dropped. However we decided to take forward the patterns &amp;amp; techniques that inspire composite applications such as MVC, dependency injection etc in principle into the proposed solution.&lt;br /&gt;We spent time identifying the “commonality” in UI behavior across several applications. We could notice exceptions but there was a significant amount of functionality which could be considered identical/related if only we could externalize the “difference”. For example the data load operation would be identical if we could account for the difference in terms of target controls, and the query used to pull the data. Same with the lookup operation. We had our laundry list ready.&lt;br /&gt;We went one step further with the MVC pattern by suggesting a generic controller for all common operations apart from application specific controllers. The generic controller could be driven by rules that could be externalized. This would significantly reduce the client’s code base and vastly improve maintainability of the system. We recommended ClickOnce as the distribution strategy for solving the problems associated with upgradeability. Initially we were toying with idea of keeping the XAML (a language for defining the user interface in WPF) loose by bringing it into context only during runtime. This idea had to be dropped as it addressed the distribution problem which was not a high priority thing for our client.&lt;br /&gt;After that it was more of identifying “modules” for various elements in the presentation layer architecture. We considered using Enterprise Library for the infrastructure part (logging, caching, exception handling etc). Finally we identified a layer for interfacing with the application suite’s core services and a library for defining common types.&lt;br /&gt;A sample architecture diagram below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_G11iy48IBms/SNyFr1fw4oI/AAAAAAAAAAM/znQa9vcCF5M/s1600-h/UXDesign.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5250218253748331138" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_G11iy48IBms/SNyFr1fw4oI/AAAAAAAAAAM/znQa9vcCF5M/s320/UXDesign.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-5812265178761872644?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/5812265178761872644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/09/strategy-for-building-modern-ux-on-wpf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/5812265178761872644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/5812265178761872644'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/09/strategy-for-building-modern-ux-on-wpf.html' title='Strategy for building modern UX on WPF'/><author><name>Arun J D Devaraj</name><uri>http://www.blogger.com/profile/08646969685573415191</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00814755809132094138'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_G11iy48IBms/SNyFr1fw4oI/AAAAAAAAAAM/znQa9vcCF5M/s72-c/UXDesign.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-2623297761940405329</id><published>2008-09-22T12:35:00.008-04:00</published><updated>2008-09-24T07:05:11.037-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>Large Enterprise SharePoint(MOSS) deployment</title><content type='html'>&lt;p&gt;MOSS has highly configurable and flexible architecture that can easily accommodate some of most challenging collaboration requirements in large enterprises. One of the biggest benefits to leveraging MOSS as opposed to developing your own architecture for portal/collaboration solutions is the prepackaged saleable design of MOSS that you get out of the box. However as with many large enterprises one of the more complex design choices is on how to make the collaboration solution available to its geographically distributed workforce . Broadly the choices would be to either adopt one of the following options&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Centralized solution&lt;/li&gt;&lt;li&gt;Decentralized solution&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In most cases a centralized solution would be recommended so that the operations, governance, High Availability(HA) and Disaster Recovery(DR) can be managed from a single location and a tighter policy can be enforced, however in some cases the network may not be as reliable or scenarios where centralization may have challenges with high latency between the branches and the central/ low bandwidth etc may cause the enterprise to adopt a decentralized solution. But how do you know which is the optimal MOSS deployment strategy in your case?&lt;br /&gt;&lt;br /&gt;Last week we were working with a large financial service provider in North America to demonstrate the feasibility of deploying MOSS as a central solution, the strategy to improve the end user experience for a centralized MOSS solution was to:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Provide a highly scaled up + scaled out MOSS farm - Based on the role of the MOSS server i.e. Web Front End(WFE) or Index Server it can be either scaled up or scaled out only. Providing the right amount of scale ensures that the centralized solution can cater to the requests from users across the enterprise.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Optimal logical architecture and information architecture - the right design ensures that a single ContentDB is not the bottle neck for all requests.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compression - compression improves performance over the wire&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Caching - Caching can drastically improve the end user experience, a smart caching solution will ensure that only delta changes from previous requests are being sent over the wire.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Both 3 and 4(above) can be achieved by leveraging a SharePoint aware network accelerator such as Certeon, other general purpose network accelerators may be used as well, however leveraging a SharePoint aware one is always better.&lt;br /&gt;&lt;br /&gt;As with any other large project undertaking its important to benchmark the system performance before rolling it out into production, metrics captured during the benchmark would help validate if a centralized solution would be the right choice, additionally it could provide metrics that can be used to decide if additional bandwidth needs to be arranged etc. The way we benchmarked end user experience before rolling the entire solution in production was by leveraging &lt;a href="http://www.shunra.com/"&gt;Shunra&lt;/a&gt;. Shunra can be used to capture the network conditions (latency, packet loss) between the various branches and central office, once the data is captured it can be used by the Shunra device to simulate WAN conditions in a lab. Additionally Shunra can be used to simulate what-if scenarios that may occur in your WAN. Running test scripts simulating end users and having Shunra simulate various WAN conditions can provide valuable metrics that can be used to make a more informed decision on MOSS deployment.&lt;br /&gt;&lt;br /&gt;Performance tuning and benchmarking can be a complex undertaking, and many a times the interdependence of various network parameters during simulation and actual load on the MOSS box(es) can be confusing and perplexing, if not holistically viewed and planned it can skew the final metrics - the entire endeavor would be a waste of time if not panned and executed correctly.&lt;br /&gt;&lt;br /&gt;Benchmarking the MOSS deployment and &lt;a href="http://techturks.blogspot.com/2008/04/successful-sharepoint-deployments.html"&gt;other design choices and rollout strategies can significantly contribute towards a successful &lt;/a&gt;enterprise SharePoint(MOSS) deployment. However at the end of the day its still the onus of the enterprises IT group to understand and execute the required tests prior to rollout to ensure the success of SharePoint solution. Its unfortunate that in many enterprises limited interpersonal dynamics within the IT group and lack of communication to the portal stakeholders leads to a less than desirable MOSS solution, IT group seldom looks into what the end users needs. No wonder IT is still seen as a "cost center" rather than a value center. " Technology produces its best results when an organization has the doctrine, structure, and incentives to exploit it" - a famous quote on a different context (the 9/11 commission report) however its applies to how every enterprise can strategically leverage IT.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-2623297761940405329?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/2623297761940405329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/09/large-enterprise-sharepointmoss.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2623297761940405329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2623297761940405329'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/09/large-enterprise-sharepointmoss.html' title='Large Enterprise SharePoint(MOSS) deployment'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-8473189579331665268</id><published>2008-09-05T18:07:00.005-04:00</published><updated>2008-09-05T18:24:47.293-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Upcoming Product Releases'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Strategy'/><title type='text'>Impact of Google Chrome Browser</title><content type='html'>Earlier this week, Google released the beta of their Chrome Browser, the browser wars have gone quite for while now and Chrome has rekindled it. Now the questions on everyone's mind are - what will be the impact of Googles Chrome browser? And why Google has released their own browser?&lt;br /&gt;&lt;br /&gt;At first glance its seems that Google released Chrome just to get a slice of the browser market - No prize for guessing that Microsofts Internet Explorer will be impacted by Chrome, and Google vs. Microsoft rivalry is seen as the reason for Google releasing Chrome. IE may take a hit but keep in mind that Googles Chrome could take the steam away from FireFox, many of the FireFox user base would predictably move to Chrome. Chances are that even before Microsoft sees IE usage going down, FireFox usage might start dwindling.&lt;br /&gt;&lt;br /&gt;So Chrome is set to disrupt the browser market share. Is that all? Hardly, the bigger picture is that Microsoft stands to lose much more that just the browser market share, the biggest jolt to Microsoft IMO, would be to their Software+Service (S+S) strategy. Microsoft Software+Service (S+S) strategy differs from SaaS cause Microsoft is promoting a rich client into the picture vs. SaaS which is primarily viewed as a browser only approach. Microsofts rational behind the rich client so far has been that you could not develop rich web applications (particularly business apps) using a browser only approach, and Microsoft is correct, if you had ever made an web application that extensively leveraged AJAX you would agree with Microsoft - your app would behave sluggish in both IE and FireFox. Microsoft continues to dominate the market with their desktop model and continue to promote their Software+Service model . Someone has a problem with this - that someone is Google. Google in the past has been trying to demonstrate that AJAX can be used to build very rich browser applications (such as Google Docs) and they have even built solutions like Google Gears etc to demonstrate that the pure browser rich application is very much possible. But these attempts from Google have fallen short of their expected goals - the culprit is - JavaScript . Actually it’s the implementation of JavaScript in the various browsers. Both IE 8 and FireFox have pledged to support faster JavaScript execution but Google had taken a different approach with Chrome: there is a JavaScript specific virtual machine(V8) in Chrome that manages JavaScript objects, memory and garbage collection. Chromes approach is vastly superior to how JavaScript is being managed by the other browsers like IE and FireFox. Chrome should be able to support very heavy AJAX driven application. Companies who have been shying away from building very rich browser centric application/ companies that have gone the S+S route would now look upto Chrome for a better experience and in process turn away from S+S. Thats not a good story for Microsoft.&lt;br /&gt;&lt;br /&gt;Vendors like Adobe (with Flash, AIR) and Microsoft (with SilverLight, S+S) understand that you need to think outside the basic browser (DHTML) to build rich application, but Google is tackling the challenge from a different direction. How far can Google get with Chrome and how big a dent can Chrome make?&lt;br /&gt;&lt;br /&gt;Big I would imagine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-8473189579331665268?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/8473189579331665268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/09/impact-of-google-chrome-browser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/8473189579331665268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/8473189579331665268'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/09/impact-of-google-chrome-browser.html' title='Impact of Google Chrome Browser'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-6522473345872415648</id><published>2008-08-14T11:01:00.006-04:00</published><updated>2008-08-14T11:21:58.227-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SilverLight'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Strategy'/><title type='text'>Olympics Event = Software Platform Strategy</title><content type='html'>&lt;p&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ok&lt;/span&gt; so &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ive&lt;/span&gt; been living in a cave and have not been following on the Olympics (the only most watched event!) until I came across that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Abhinav&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Bindra&lt;/span&gt; had won the first Gold Medal for India. Searching for the Olympics event lead me to &lt;a href="http://www.blogger.com/nbcolympics.com"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;nbcolympics&lt;/span&gt;.com &lt;/a&gt;and after watching some of the event videos the geek in me sprung back into life and I was wondering how they build their content publishing solution ?&lt;br /&gt;&lt;br /&gt;Only after digging a little deeper then did it come clear that it &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;wasn&lt;/span&gt;’t only China preparing to host the Olympics, Microsoft had been steadily preparing as well. If you’re a platform company like Microsoft you would use every possible (global)event to showcase your platform. After some more investigation, found that Microsoft had really planned for the event from multiple fronts to showcase their platform:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Silverlight&lt;/span&gt; - All the &lt;a href="http://www.nbcolympics.com/video/index.html"&gt;Olympics video &lt;/a&gt;are based on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Silverlight&lt;/span&gt;. Its been a while that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Silverlight&lt;/span&gt; had been released and with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Silverlight&lt;/span&gt; 2.0 Microsoft had really pushed the envelop in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;RIA&lt;/span&gt; space. However, the basic challenge was for MS to get people to install the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Silverlight&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;runtime&lt;/span&gt;. So far &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Silverlight&lt;/span&gt; has only a fraction of the install base as Adobes Flash. Microsoft is using the Olympics event as a means to drive &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Silverlight&lt;/span&gt; adoption, and by the looks of it its working well.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Search - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Microsofts&lt;/span&gt; Live.com likely &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;isnt&lt;/span&gt; your favorite search engine, but when it comes to enterprise solution Microsoft Search Server and MOSS have been making steady progress, not surprisingly MS had used MOSS to power search. As per the&lt;a href="http://blogs.msdn.com/enterprisesearch/archive/2008/08/05/sharepoint-server-2007-powers-beijing-2008-olympic-games.aspx"&gt; case study &lt;/a&gt;, Beijing Organizing Committee for the Olympic Games had evaluated &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Googles&lt;/span&gt; Search Appliance (GSA) but decided to move with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;SharePoint&lt;/span&gt; possibly after evaluating some of the &lt;a href="http://techturks.blogspot.com/2008/04/microsoft-search-server-mss-vs-google.html"&gt;challenges they could potentially face with GSA&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;MSN&lt;/span&gt; - MS is trying to woo people into installing the new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;MSN&lt;/span&gt; toolbar by focusing on Olympics content&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Others - MS is using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Xbox&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Zune&lt;/span&gt; to publish Olympic content as well&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So whats the big deal you ask?&lt;br /&gt;&lt;br /&gt;Its an awesome strategy! Microsoft is using a global event like the Olympics to:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Increase platform adoption (read &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Silverlight&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Demonstrate viability of current technologies&lt;/li&gt;&lt;li&gt;Gain &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;mind share&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;IMHO I think it’s a brilliant strategy and also demonstrates &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;Microsofts&lt;/span&gt; capabilities outside the enterprise. Other than Adobe, MS is the only other vendor that has a complete vision in its stack to deliver a &lt;a href="http://techturks.blogspot.com/2008/02/battle-of-ria-platform.html"&gt;broad spectrum of end user experiences &lt;/a&gt;and was able to demonstrate it. &lt;/p&gt;&lt;p&gt;But does Microsoft get everything right? Hardly, interestingly the video on the &lt;a href="http://nbcolympics.com/"&gt;homepage &lt;/a&gt;is driven by Flash. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Theres&lt;/span&gt; always room for improvement :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-6522473345872415648?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/6522473345872415648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/08/olympics-event-software-platform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/6522473345872415648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/6522473345872415648'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/08/olympics-event-software-platform.html' title='Olympics Event = Software Platform Strategy'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-320287532162222720</id><published>2008-08-08T11:05:00.003-04:00</published><updated>2008-08-13T15:10:11.561-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>How do you qualify something as "Cloud Computing"?</title><content type='html'>Cloud computing must be definitely be the &lt;a href="http://techturks.blogspot.com/2008/04/cloud-computing-next-big-thing.html"&gt;next big thing&lt;/a&gt;, practically every one with an online business model is now referring to their service as cloud computing - starting from your average Joe hosting firm all the way to the SaaS/S+S vendors, every wants to ride the next buzzword wave, and thus distorts the cloud computing term all together. Part of the reason being that historically the term "cloud" loosely referred to anything that’s available online/on the internet. Ask a bunch of geeks and you would get a different explanation of cloud computing from each person (if you ever asked a bunch of people what Web 2.0 is you know what I mean). So how can we qualify if a service is really leveraging the cloud computing model?&lt;br /&gt;&lt;br /&gt;That’s a tough question. An easier way to answer this is by first examining the behavior of services provided by some of the well known cloud computing vendors. Lets take Amazon and Google as two examples, both have different business models but under the hood when we use their cloud computing service within our application/service the 3 common behavior that we see from it are:&lt;br /&gt;a. Scalability&lt;br /&gt;b. Availability&lt;br /&gt;c. Economical/cost effective&lt;br /&gt;&lt;br /&gt;Lets discuss scalability first. Imagine your tasked to design an online application/service that should be "Internet scalable". Imagine (if you will) that your designing the next big social networking/ the next big Youtube etc. How do you go about designing it to support millions of users? For that matter how does anyone do it? The short answer - you do that iteratively. Iteratively is a good euphemism, the reality is that you do that after several design blunders and limitations :). In the iterative approach you would first design a cost effective solution to scale for a smaller audience and then when you start seeing more traffic you add more hardware till the point it doesn’t improve anything then you start to redesign for better scalability. This is how Amazon and Google have grown as well and have designed their overall system to support such high scalability - but interesting they have abstracted their design to a degree that it could be repackaged into a subscription based service - a cloud computing service.&lt;br /&gt;&lt;br /&gt;But first how do you build a massively scalable solution. How would you build your architecture to accommodate linear scalability?&lt;br /&gt;&lt;br /&gt;Any architecture can be described as being composed of two types of components&lt;br /&gt;a. Stateless components&lt;br /&gt;b. State-full components&lt;br /&gt;&lt;br /&gt;Stateless components are those that only do some processing on data and don’t persist state - hence are easily to scale via a scaled out design which as a byproduct also gives you higher availability, also using scaled out architecture you can keep adding inexpensive boxes to the system thereby reducing your cost while the system continue to keep humming.&lt;br /&gt;&lt;br /&gt;Statefull components on the other hand are those that persist state of resources that it need to work with - for e.g., File system, databases, BLOBs etc. traditionally the only option to scale these would be to via a scaled-up approach - i.e. beef up the hardware on the server. This is more expensive than a scaled out architecture and introduces single point of failure. Traditionally we have been using approaches such as data replication etc to scale out these components but it introduces several complications. Fundamentally statefull components are the ones that impact overall performance and scalability of a system.&lt;br /&gt;&lt;br /&gt;Statefull components may be notoriously difficult to scale, however even stateless components can present scalability challenges when your planning for massively scalable/internet scalability scenarios. Cloud computing vendors have made significant investments in technology to ensure that compute intensive processing can been parallelized and distributed to the max. Googles MapReduce is a elegant approach to solving these challenges.&lt;br /&gt;&lt;br /&gt;We need a new breed of products to handle how stateless and statefull components can be scaled and distributed, the traditional approach of persisting state in the database etc just doesn’t make sense, increasingly we see that the trend is not to store atomic level transaction information in a database as we used to but store it in the form of blobs, but at the same time ensure that we do so while managing resources economically. Large part of Amazons and Googles innovation (their magic sauce if you will) in cloud computing involves developing these proprietary components.&lt;br /&gt;&lt;br /&gt;Another way of looking at the scalability that cloud computing gives you is the ability to scale your computing resources as an when you see demand - after all it’s a pay as you go model. Traditionally online companies have been provisioning for hardware to meet spikes in traffic (like holiday seasons etc). That would also imply that they are unnecessarily paying for the extra scale which they don’t leverage all the time. By hosting it via a cloud vendor they can dramatically reduce their operational cost.&lt;br /&gt;&lt;br /&gt;Well its not just Amazon and Google that are thinking in this direction, several platform vendors like Microsoft and other open source groups are releasing products are that will address these challenges. You can expect to see some radically different products being released from these vendors that address the distributed massively-scalable challenges. You can also expect (hosting)companies to leverage these prepackaged cloud computing capabilities and provide it as a subscription service.&lt;br /&gt;&lt;br /&gt;Cloud computing vendors are able to provide Internet scalability at an affordable cost and can potentially give you a better SLA that if you were to manage your own infrastructure - that’s the overall package that makes cloud computing so compelling, probably best described by Jef Bezos  - "You don't generate your own electricity, why generate your own computing?". Arguably there are other factors that influence your vendor decision but we hope that the next time your evaluating a cloud computing vendor/solution or building your own, you know what to look for.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-320287532162222720?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/320287532162222720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/08/how-do-you-qualify-something-as-cloud.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/320287532162222720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/320287532162222720'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/08/how-do-you-qualify-something-as-cloud.html' title='How do you qualify something as &quot;Cloud Computing&quot;?'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-4753943395153007868</id><published>2008-08-05T22:06:00.006-04:00</published><updated>2008-08-05T22:35:31.629-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><title type='text'>Is Cloud Computing Right For You?</title><content type='html'>&lt;p&gt;With cloud computing receiving so much attention it makes you wonder that if cloud computing delivers so much why wouldn’t companies immediately jump on the cloud computing bandwagon?Well like several IT trends in the past, cloud computing too is evolving and (re)shaping every minute. Some of the challenges that an organization could face if they move to a cloud computing model include&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;Vendor lock in - it’s almost like the age of the OS wars are over, the next major war are going to be the cloud computing platform wars, yup - cloud computing vendors don’t just provide you a service they provide a platform for you to build your apps, and once your hooked to one vendors platform its going to be very difficult to make it support another vendors platform, im sure even MS is aware of this and would push heavily for cloud computing initiatives via Red Dog, Zurich and the Oslo wave.The reality is that once you choose a cloud computing vendor its going to be extremely difficult to switch to another vendor and its also difficult to design your solution to work against multiple (but similar) services from different cloud service providers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pricing - this is one of those gotchas that you just cant escape, clients may opt for cloud computing as a cost effective mechanism, however in a this model they are not paying a one time cost - it’s a subscription charge they are paying and the service vendor can hike the subscription charges at a later time, that compounded by vendor lock in (above) would raise serious questions on moving to cloud computing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Service Level Agreement (SLA) - like in case of pricing (above), SLAs have a similar story - you move to a cloud service for better SLA that what you can economically manage - however now your at the mercy of the service provider. Recent downtimes by providers such as Amazon tells you that all is not always well in a cloud computing model&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Application design - Look at most OLTP apps today, it would have some form of tiered design approach. Traditionally these tiers would be designed to work in close proximity to the other tiers - with the cloud computing model there is going to be a radical shift in how we design applications and services. Several SOA best practices (patterns and anti-patterns) would apply to design applications that leverage cloud computing as well.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Scalability bottlenecks - This is closely related to application design but explicitly called it out cause in many ways an application can be developed via composition of service from various cloud computing providers, however keep in mind that scalability on only as strong as the weakest link in the architecture, incorrect selection of one vendors service can compromise the performance of the entire application. Many vendor (like Googles AppEngine) provide a end to end cloud computing platform, this makes it more compelling for companies to adopt such service provider that others.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Like any evolving technology, cloud computing will see its fair share of growing pains. However, its one of those disruptive technologies that come once in a while that can radically change how we build, manage and consume software.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-4753943395153007868?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/4753943395153007868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/08/is-cloud-computing-right-for-you.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/4753943395153007868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/4753943395153007868'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/08/is-cloud-computing-right-for-you.html' title='Is Cloud Computing Right For You?'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-8985231416492333950</id><published>2008-08-04T16:45:00.005-04:00</published><updated>2008-08-04T16:55:30.222-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Composite Application'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><title type='text'>ISV Wish List</title><content type='html'>In the past couple of months we have been working with several ISVs to help them modernize their existing solutions/re-platform the existing application, and after some time a common patter start to emerge across all the ISV requirements - a ISV wish list if you will, which would like to summarize as:&lt;br /&gt;&lt;br /&gt;a. Rich metadata driven extensible interface&lt;br /&gt;b. Flexible and highly configurable business processes&lt;br /&gt;c. Support for multiple back ends&lt;br /&gt;&lt;br /&gt;In case of a and b (above): ISVs usually have their own professional service group that does the deployment for a new client, traditionally for each customization required by the new client the professional service group would custom develop it, however these ISVs going forward want to leverage a metadata driven approach whereby the UI and validation is dynamically created.&lt;br /&gt;&lt;br /&gt;Up until now we have had to custom build many of these capabilities, however now with .NET 3.x several of these challenges can be met using the out of the box capabilities:&lt;br /&gt;&lt;br /&gt;a. Rich metadata driven interface : WPF with XAML based declarative approach combined with loose XAML, the new data binding and data templatization model works extremely well for metadata driven solutions, additionally Prism (now WPF composite framework) can be used as the composite application framework container for building a thick client WPF application.&lt;br /&gt;&lt;br /&gt;b. Flexible and highly configurable business processes: One stop solution, Windows Workflow Foundation (WF) in .NET 3.x. WF can be used to easily model complex business processes instead of writing large amount of code. Additionally we can leverage XAML activation - whereby the WF can be dynamically build and executed (i.e. dynamically compiled), this provides professional service teams with incredible flexibility to tailor/configure the business process for a given client.&lt;br /&gt;&lt;br /&gt;c. Support for multiple back ends: Microsoft Entity Framework currently in CTP provides an entity modeling capability (ORM tool) that abstracts away the underlying DB product. All CRUD operations are performed on the entity data model and the entity framework can translate the CRUD operations to the specifics of the respective DB vendors. Additionally Entity Frameworks works nicely with WCF, all the classes that are generated behind the scene when you create the entity models are created with WCF serialization in mind.&lt;br /&gt;&lt;br /&gt;Microsoft also informs us that they too see many ISVs having the same "wish list" and its expected that .NET 4.0 will support more of these capabilities natively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-8985231416492333950?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/8985231416492333950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/08/isv-wish-list.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/8985231416492333950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/8985231416492333950'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/08/isv-wish-list.html' title='ISV Wish List'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-2686346080137961971</id><published>2008-08-01T16:52:00.002-04:00</published><updated>2008-08-01T16:59:58.794-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Why Architecture is strategic</title><content type='html'>&lt;p&gt;Every once in a while when we engage our clients/prospective clients on a consulting engagement they question the involvement of an technical architect in the engagement, cause they find that its an unnecessary expense and that the architecture can be developed/recommended by one of the existing development resources. Well that brings an interesting question. What is software architecture? Ask a bunch of people and a common response you get is that a software architecture defines the high level design and components to be used in the proposed system. Its correct but unfortunately that’s a very narrow perspective into what goes into defining an architecture, architecture is not just a technical decision of various software components - its strategic!. Its strategic because the architecture defines how you can monetize the product/service, the software architecture you define is what can help your product compete with other vendors in the same space and give you that edge. Not thinking of architecture as something that’s strategic is being shortsighted. To illustrate this let me give you an example.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Early this week we were on a call with Microsoft and a large enterprise in financial services to identify the high availability and disaster recovery (HA/DR) solution for their MOSS environment. The discussion finally lead down to identifying a suitable product for DR and we were discussing the many DR product options available in the market that work with MOSS. Microsoft with System Center Data Protection Manager 2007 (DPM 2007) presented a strong candidate for the client to consider from the sheer integration/understanding of the product and MOSS, however there were other vendors in DR space for MOSS as well and the financial service client was in favor of picking one of the other vendor, Microsoft sales knows how to play their cards well and dealt the trump card - Data Protection Manager (DPM) had architected their solution to leverage only the exposed MOSS APIs (which if your familiar with MOSS tells you that there are several limitations to this approach) and hence DPM is supported under Microsofts premium support where as several of the other DR vendors did not leverage the (limited)APIs but instead did direct DB access, this "hack" was easier to do and gave the vendors products more features to sell - however their product would not be supported by Microsofts premium support, i.e. if the client has any problems with their MOSS solution and calls Microsoft for support, Microsoft can deny support because they were using a DR product which is using an approach that is not supported by Microsoft. Bummer. The various DR vendors didn’t think about this in the architecture design, the "hack" they decided on which seemed technically appealing did not help them in the sale.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To the financial service client this was like a show stopper and immediately decided against its previous DR vendor selection. In the past several consulting engagements we have helped ISVs architecture their solution that avoid these kinds of pitfalls. &lt;/p&gt;&lt;p&gt;The next time your thinking of building an architecture are you thinking of how the architecture can empower your sales team with the strategic "battle card" to help win the deal? Is your architecture strategic?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-2686346080137961971?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/2686346080137961971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/08/why-architecture-is-strategic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2686346080137961971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/2686346080137961971'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/08/why-architecture-is-strategic.html' title='Why Architecture is strategic'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-3885005318548046059</id><published>2008-06-15T11:14:00.001-04:00</published><updated>2008-06-15T11:14:54.001-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HardDrive to RAM'/><title type='text'>HardDrive to RAM - Excel Services</title><content type='html'>&lt;p&gt;&lt;a href="http://techturks.blogspot.com/2008/06/harddrive-to-ram.html" target="_blank"&gt;Quick Background...&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The building blocks for Excel Services...&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Excel Calculation Services &lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The ECS takes care of all the calculations that happen on the server side, opening the files from the trusted location for the same and refreshing the workbooks etc. It can be considered the server counter part of the Excel client that we have. &lt;/p&gt;  &lt;p&gt;It also takes care about the security aspect of it, meaning not allowing accessing of unauthorized external data sources etc. &lt;/p&gt;  &lt;p&gt;It can be load balanced across servers, can be installed separate from the WFE server and also helps in caching the sheets, graphs, external query results and the state of ongoing calculation results. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Excel Web Access &lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As the name indicates, excel web access is responsible for allowing access to sheets via browser and is rendered as HTML. &lt;/p&gt;  &lt;p&gt;Apart from saving the changes, one can do almost everything that is possible in the excel client with no client installation on the end user's machine.&lt;/p&gt;  &lt;p&gt;It is available in form of a web part and can be used to display whole or part of excel sheet, the only constraint being that the file has to come from a trusted location.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Excel Web Service&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is the developers perspective of the story and allows to do all the stuff programmatically. &lt;/p&gt;  &lt;p&gt;Things like accessing a centralized calculation formula using different parameters can be helpful in generalizing things across the organization in terms of duplication of efforts and avoiding errors due to multiple versions of business rules.&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Excel Calculation Service Proxy &lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; This sits between the excel web access and the excel web service and takes care of the coordination business.&lt;/p&gt;  &lt;p&gt;It can also do load balancing when there are multiple servers or else in a single server scenario it has nothing much to do other than handing over the request.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Steps to configure Excel Services &lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are two steps required before the users can start using excel services, enabling the services and configuring the trusted location for the files. Files that are not stored in the trusted location can't be used in excel services. The trusted location can be be a document library, a URL or a shared folder.&lt;/p&gt;  &lt;p&gt;Enabling of the services can be done from the central administration web site from operations\services on server, by clicking the start link.&lt;/p&gt;  &lt;p&gt;The trusted file location can be configured from the shared server administration section in the central administration. One has to pick the shared service provider and then go to excel services management\trusted file locations; here we can add\edit or delete the said file locations. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Want to keep it short, there are still other aspects to this topic, like the publishing, named parameters, security, performance, external data sources etc etc. They come after the basics components mentioned above have been put in place and configured.&lt;/p&gt;  &lt;p&gt;Going through the above notes would solve the purpose for me, you are most welcome to add more to it though :-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-3885005318548046059?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/3885005318548046059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/06/harddrive-to-ram-excel-services.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3885005318548046059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3885005318548046059'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/06/harddrive-to-ram-excel-services.html' title='HardDrive to RAM - Excel Services'/><author><name>aseem pandit</name><uri>http://www.blogger.com/profile/14292143803938573873</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18130993545316792730'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-5860528059262309955</id><published>2008-06-15T11:07:00.001-04:00</published><updated>2008-06-15T22:29:21.198-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HardDrive to RAM'/><title type='text'>HardDrive to RAM</title><content type='html'>&lt;p&gt;ya ya I know you are thinking, what a weird name for a blog entry!!!&lt;/p&gt;  &lt;p&gt;But, hey everyone, here is the incidence that compelled me to take this route...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Place &amp;amp; Time:&lt;/strong&gt; Friday 13th 1:19 PM, Mountain View, CA&lt;/p&gt;  &lt;p&gt;I am sharing a nice joke with my colleagues and out of the blues, the senior guy says, hey aseem, I have some stuff for you; there is a customer coming and he has a desire to go through the beautiful world of Excel Services, can you contribute your two cents in this? and then there were couple of other business details that he talked about (believe me you won't be interested in knowing those). &lt;/p&gt;  &lt;p&gt;In my mind, I am like... Shoot!!! I just returned from another customer and he wanted to talk about SSRS and other related stuff so I had gone through all the SSRS stuff, prior to that it was with .Net\WPF &amp;amp; SSRS and before that it was Performance Point, Proclarity and SSIS and then something else...I suddenly realized that it had been quite a time I had touched the SharePoint stuff :-(&lt;/p&gt;  &lt;p&gt;It's not like I am not comfortable with it or something, on the contrary I have done presentations and POCs on multiple occasions on SharePoint topics... it's only that somehow my CPU\brain (as a matter of fact, I have observed the same issues with other brands as well:-P) simply keeps compressing the older stuff and aligns it down in the stack in the hard drive\memory and then if I have to talk about a subject, I have to dig it out and refresh it, bring it into RAM\upper memory...:-) &lt;/p&gt;  &lt;p&gt;It has been my experience though, that if the basic concepts are clear it becomes very easy to recall the stuff and quickly get ready for a presentation or solve a business problem. I am still a staunch believer of this and these series that I would be blogging about are like a reference for me, to keep my basic concepts handy, organized and most important short and sweet. At the same time I wish to share the same with everyone and would be happy if it is of any use to anyone, because I also believe that the best way to gain knowledge is to share it with other and not be afraid of making mistakes...cause that's how you learn.&lt;/p&gt;  &lt;p&gt;Do join me in this effort and please be patient with my innocent mistake :-) Also please be advised that, due to personal opinion, conflicts in terms of important information that should be present and that may have been skipped, are very likely to happen. In that case I would recommend using the latest online help. They are a wonderful pieces of work, where in lot of people have put lots of efforts in those and more important they are the complete reference. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-5860528059262309955?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/5860528059262309955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/06/harddrive-to-ram.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/5860528059262309955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/5860528059262309955'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/06/harddrive-to-ram.html' title='HardDrive to RAM'/><author><name>aseem pandit</name><uri>http://www.blogger.com/profile/14292143803938573873</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18130993545316792730'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-377427833567592180</id><published>2008-05-29T22:36:00.001-04:00</published><updated>2008-05-30T12:27:37.683-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><title type='text'>Handling TIFF data in Reporting Services</title><content type='html'>&lt;p&gt;So, here is an interesting stuff that we did recently as a part of the SSRS POC. The very nature of the requirement makes it very interesting and exciting.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Requirement...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are a couple of pages in the TIFF format (that might come from FAX or some other application) and they need to be brought in and displayed via SSRS along with the other data fields. The header and the footer along with the summary data stays constant though.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The challenge...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Out of the various formats that SSRS supports out of the box, TIFF is not present :-) Although we can use the BMP mime type to display the first page, but nothing beyond that. So the deal is to display and merge the individual pages along with the other data.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Solution...( of course one of the possible ones :-) )&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The solution can be broken into smaller parts consisting of the multiple technologies that come together to address this issue and each of them have their own significant impact. &lt;/p&gt;  &lt;p&gt;To start with, the format of the file that we are dealing with has a major impact, then comes the set of API that is leveraged to break and extract the information; storing these individual pieces of information is another important aspect and then finally comes the SSRS part which displays the overall stuff. Let's take a look at each of them individually.&lt;/p&gt;  &lt;p&gt;TIFF is a flexible file format that&amp;#160; is capable of containing the images, text, JPEG and other types of data all in a single file. One can find more information &lt;a href="http://en.wikipedia.org/wiki/Tagged_Image_File_Format" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The other essential part of the solutions in the new wonderful stuff that windows presentation foundation has to offer as far as the processing of the various image format goes, check this &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging(VS.85).aspx" target="_blank"&gt;Imaging Namespace&lt;/a&gt;. Here we get the APIs that can be utilized to break the TIFF file into individual frames (a frame is a term used in the APIs to address a single page in the TIFF file) and then merged along with the other relation database records.&lt;/p&gt;  &lt;p&gt;As far as the storage goes, the solution is an attempt to do a proof of concept hence the basic way of storing the individual frames in files has been used; the focus was more on merging the TIFF files along with the relational database. This can be improved later on. The individual frames stored on the disk in the form of small files can then be saved into the database in a varbinary column. &lt;/p&gt;  &lt;p&gt;Also, the process of breaking the TIFF file into smaller files and storing it into the relevant table can be automated via a trigger or in a batch form via a job.&lt;/p&gt;  &lt;p&gt;Once the table has the data for the individual frames, it can then be (inner) joined with the other table holding the records for the header or footer and other summary data and can be displayed in the report using an image control. The sample code below doesn't use that structure though. It dumps all the stuff in a single table for the sake of convenience.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Code...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The code that is made available uses a sample TIFF file generated from the favorite Adventureworks database and gets the top 2 products for each sub category. &lt;/p&gt;  &lt;p&gt;To generate this sample file &lt;/p&gt;  &lt;p&gt;1. Use the following query as the dataset&lt;/p&gt;  &lt;p&gt;2. Preview it in the simple SSRS report&lt;/p&gt;  &lt;p&gt;3. Save it in the TIFF format from the preview pane&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="400"&gt;         &lt;p&gt;&lt;font face="Verdana" color="#0000ff" size="1"&gt;SELECT sc.Name AS subCategory, p.Name AS productName              &lt;br /&gt;FROM Production.Product AS p INNER JOIN Production.ProductSubcategory AS sc               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ON p.ProductSubcategoryID = sc.ProductSubcategoryID               &lt;br /&gt;WHERE p.ProductID IN               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (SELECT TOP (2) ProductID               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FROM Production.Product AS p1               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; WHERE ProductSubcategoryID = p.ProductSubcategoryID)               &lt;br /&gt;ORDER BY subCategory, productName&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Once the TIFF file is available, we would need a table to hold the individual pages. The following script can create one&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="400"&gt;         &lt;p&gt;&lt;font face="Verdana" color="#0000ff" size="1"&gt;CREATE TABLE [dbo].[TIFFTable](              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [CustomerName] [nvarchar](50) NULL,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [SomeDetails] [nvarchar](50) NULL,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [SomeMoreDetails] [nvarchar](50) NULL,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Image] [varbinary](max) NULL               &lt;br /&gt;)&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After the table is created, the &lt;a href="http://cid-eab7d22f52577e44.skydrive.live.com/browse.aspx/Public/TIFF%20%7C0%20SSRS/WPF%20Code" target="_blank"&gt;code available at this location&lt;/a&gt; creates a mini WPF application that, just for the sake of looking into the file and learning, allows one to browse the individual pages in the TIFF file and then later save it to the TIFFTable created above.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;Before running the code remember to make changes in the code for...&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;1. FilePath value&lt;/p&gt;  &lt;p&gt;2. Name of the sample TIFF file&lt;/p&gt;  &lt;p&gt;3. DB connection string&lt;/p&gt;  &lt;p&gt;Run the miniapp and after you are done browsing back and forth in the file, click the &amp;quot;Save&amp;quot; button; doing so would break the file and eventually it gets stored in TIFFTable. You can do so for a couple of different customers to generate the some data for the next report. This data can then be displayed using the SSRS report in a normal fashion. The image control can be used to point to the varbinary column. Note that even though the format of the individual file is TIFF, we can change the format using the appropriate API is required. &lt;a href="http://cid-eab7d22f52577e44.skydrive.live.com/browse.aspx/Public/TIFF |0 SSRS/SSRS File" target="_blank"&gt;The report RDL&lt;/a&gt; has one way of showing the data; it groups data based on the customers we enter using the miniapp. You can always alter it and use it as appropriate. A screenshot of the miniapp follows...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/aseemone/SEAq9yn7W4I/AAAAAAAABKg/s6eSbODUfVw/TIFFWithSSRS%20WPF%20App%5B1%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="386" alt="TIFFWithSSRS WPF App" src="http://lh4.ggpht.com/aseemone/SEAq-Cn7W5I/AAAAAAAABKo/FvGaITx8NtQ/TIFFWithSSRS%20WPF%20App_thumb%5B1%5D.png" width="394" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hope this piece of information is of some use to you...and if you come across a better way of handling this situation please share it with me :-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-377427833567592180?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/377427833567592180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/05/handling-tiff-data-in-reporting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/377427833567592180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/377427833567592180'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/05/handling-tiff-data-in-reporting.html' title='Handling TIFF data in Reporting Services'/><author><name>aseem pandit</name><uri>http://www.blogger.com/profile/14292143803938573873</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18130993545316792730'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-3533005754107575922</id><published>2008-05-26T18:50:00.001-04:00</published><updated>2008-05-26T18:50:36.027-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PerformancePoint'/><title type='text'>Multiple measure based KPIs for Performance Point</title><content type='html'>&lt;p&gt;This blog can be considered as a continuation to the earlier blog that I had put up regarding the various ways of using &lt;a href="http://techturks.blogspot.com/2008/05/multiple-measures-in-performance-point.html" target="_blank"&gt;Multiple Measures in Performance Point&lt;/a&gt;. This blog deals more with the monitoring part of of the performance point trio and walks through the process that one could possibly use to create a KPI that consumes data from a model that handles more than one measure. The focus here is on the first approach, &amp;quot;&lt;strong&gt;Option One: Structure does the trick&lt;/strong&gt;&amp;quot;, i.e. using a dimension which is solely there to hold the various measures in the model (cube). The other approach of using the assumption model is pretty straight forward as one has to just include the appropriate assumption model in a particular model and s\he can use it right away in the dashboard designer.&lt;/p&gt;  &lt;p&gt;So continuing with the previous scenario, we are interested in using two measures say the PowerCount &amp;amp; the ChairCount for all the rooms and want to show that in a KPI, which could later on be a part of a scorecard. These KPIs help us find how well we were able to match the number of member count in a room with the present number of power output or chair counts. This is just an example to put the concept across and shouldn't be related to anything in real life. The trick here is to understand the basics of the KPI and leverage it to come up with a business solution.&lt;/p&gt;  &lt;p&gt;Let's start from the basics...when one creates a KPI he typically uses two metrics, the actual and the target. After he mentions the two metrics, he has to do the data mapping for each. Step one would be to create KPIs for both the measures and then step two would be to use them in a scorecard along with other dimensions; mostly a time dimension.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Creating the KPI...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The process for creating the two KPIs would be the same except a slight change as mentioned below. Individual steps follow...&lt;/p&gt;  &lt;p&gt;1. Create a blank KPI.&lt;/p&gt;  &lt;p&gt;2. Use the published cube as a data source via the data source mapping for the actual.&lt;/p&gt;  &lt;p&gt;3. Select the default measure, &amp;quot;value&amp;quot;.&lt;/p&gt;  &lt;p&gt;4. In the &amp;quot;Select a dimension&amp;quot; section select the &amp;quot;measure&amp;quot; dimension.&lt;/p&gt;  &lt;p&gt;5. Change the member selection from &amp;quot;default&amp;quot; to either ChairCount Or PowerCount. &lt;font color="#0000ff"&gt;This along with step# 4 does the trick and gets the slice out of the cube that we are interested in.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;6. Repeat the same steps for target. One could possibly use a different data source &amp;amp; dimension combination for this.&lt;/p&gt;  &lt;p&gt;7. Repeat the said sequence for the other KPI as well; the difference would be in the step# 5. One would have to choose the other member in the dimension than that he choose earlier.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Creating the ScoreCard...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Once the KPIs have been created, one could use them in a scorecard and also add another dimension(s) in the columns, typically time or something else as per requirement to generate an appropriate context in the scorecard. &lt;/p&gt;  &lt;p&gt;In the following figure, I have used a day-wise hierarchy to display the two KPIs for a couple of days. The target value that I have used is 10 with the scoring pattern being, closer to target is better; also, all of the days don't have data to show. One could alter the values displayed in the blank cells by changing couple of properties.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/aseemone/SDs-uin7W2I/AAAAAAAABKQ/aGFj7Oq8y0s/ScoreCardForMultipleMeasures%5B1%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="101" alt="ScoreCardForMultipleMeasures" src="http://lh6.ggpht.com/aseemone/SDs-uyn7W3I/AAAAAAAABKY/l-yj6m6W2-s/ScoreCardForMultipleMeasures_thumb%5B1%5D.png" width="405" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once this is in place the other dimensions can be added as per requirement.&lt;/p&gt;  &lt;p&gt;Stay tuned some more stuff to follow...:-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-3533005754107575922?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/3533005754107575922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/05/multiple-measure-based-kpis-for.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3533005754107575922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3533005754107575922'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/05/multiple-measure-based-kpis-for.html' title='Multiple measure based KPIs for Performance Point'/><author><name>aseem pandit</name><uri>http://www.blogger.com/profile/14292143803938573873</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18130993545316792730'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-3777982790673984380</id><published>2008-05-15T02:14:00.001-04:00</published><updated>2008-05-15T02:14:56.411-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PerformancePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>Multiple Measures in Performance Point</title><content type='html'>&lt;p&gt;Here is an interesting stuff I came across recently while working on the PP-Planning module. The deal was to create more than one measures in a model so that one could go beyond the basic &amp;quot;value&amp;quot; in the default measure group. Following are the various options that I came to know from the books\articles, the community experts and little bit of experimenting. My sincere thanks to all of them for sharing the knowledge. The intention here is that if someone comes across similar issues, he can find all the information in a single place and I think this is the best way of passing it on :-)&lt;/p&gt;  &lt;p&gt;To start with in the current version there is only a single &amp;quot;value&amp;quot; field for measure created by default and I don't know of any way to add a new measure or even change the name from value to something else. There are couple of workaround for it though. Out of the three option that I am aware of and that are listed below, two of them are supported and are &amp;quot;gentlemanly&amp;quot; workarounds and third one is something that is not supported and maybe removed from the future versions, and there is a good reason for it (in a minute).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Option One: Structure does the trick&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Structure here means the dimension's records, properties and the way they are used in the model. The idea is to create a dimension that would hold the &amp;quot;measures&amp;quot; and then use it in the input form (in excel) in the &amp;quot;columns&amp;quot; along with the other dimensions.&lt;/p&gt;  &lt;p&gt;Say we have a dimension RoomMeasureDim which has two members\rows, ChairCount &amp;amp; PowerCount &amp;amp; another dimension Customer which holds some names, say ESP &amp;amp; Visa (for example sake). Using these two dimensions we create a generic model RoomModel. This model would have 4 dimensions; the above two and the default time &amp;amp; scenario dimensions. If one would create an input form using the RoomModel and &amp;quot;hide&amp;quot; the Value &amp;amp; the Scenario row (using excel), it would look something like the snapshot below (the gray band is due to the report formatting)...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/aseemone/SCvU3tvJS9I/AAAAAAAABI0/okxk8LX8-5g/RoomsInput%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="108" alt="RoomsInput" src="http://lh4.ggpht.com/aseemone/SCvU39vJS-I/AAAAAAAABI8/329A6G499_I/RoomsInput_thumb%5B2%5D.jpg" width="337" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So in short we are using the structure to give an impression of two measures to the user. If we talk in DB terms, there would be two rows created for each value per row in the RoomMeasureDim.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Option Two: It's the Assumption&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The trick is to create an assumption model and have the measure value in it. This assumption model when used along with the main model would bring along the measures present in the assumption model and expose them in the excel form in the value section.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Option Three: ExportXML\ImportXML (not supported)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is an PPSCmd option that has not been published. The pseudo flow of this (command-line based) approach is as follows...&lt;/p&gt;  &lt;p&gt;1. Run the ExportXML command and export the content into an XML file on the drive.&lt;/p&gt;  &lt;p&gt;2. Edit the XML file and add the child-nodes (new measures) into the MeasureGroups node.&lt;/p&gt;  &lt;p&gt;3. Delete the original model&lt;/p&gt;  &lt;p&gt;4. Import the above updated XML file into PP using the ImportXML option.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Imp Note:&lt;/strong&gt; The ImportXML is know to create new Ids internally for the objects when it is executed and this might create unknown problems.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Still exploring the interesting world of PP...will keep posted :-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-3777982790673984380?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/3777982790673984380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/05/multiple-measures-in-performance-point.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3777982790673984380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3777982790673984380'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/05/multiple-measures-in-performance-point.html' title='Multiple Measures in Performance Point'/><author><name>aseem pandit</name><uri>http://www.blogger.com/profile/14292143803938573873</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18130993545316792730'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-3593027252956328776</id><published>2008-05-12T02:05:00.002-04:00</published><updated>2008-05-14T12:50:50.393-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='BI'/><title type='text'>SQL Server 2005 Reporting Services - Reports Management &amp; Execution Web Services</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;One of the important and interesting features in SQL Server Reporting Services is the web services support. They can be divided into two parts; one for the reports execution and one for the reports management.&lt;/p&gt;&lt;p&gt;The ReportingService2005 class is responsible for the reports management web service and contains all the required methods &amp;amp; properties for the same. Similarly ReportExecutionService class holds the methods &amp;amp; properties for the execution part. For all the member details and what each of them does, one can refer the MSDN docs; nicely documented so won't reproduce the same stuff again :-) For quick reference (&lt;a title="http://msdn.microsoft.com/en-us/library/ms155071.aspx" href="http://msdn.microsoft.com/en-us/library/ms155071.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms155071.aspx&lt;/a&gt;) &lt;/p&gt;&lt;p&gt;The example mentioned below is a small POC that I was working on recently and I thought that someone could benefit from what I learned during experimenting with the web services. The example is not very fancy and there are definitely better ways of doing the stuff...no arguments about that. If anyone feels that this code could be of any use to them, s\he is free to go ahead and do so.&lt;/p&gt;&lt;p&gt;Here is the storyline that is used. The reports server has all the reports published and organized in folders based on the sensitivity of the data that the reports holds. The user would only have access to the reports under a particular folders to which he has been granted access. Mostly, the administrator would allow\restrict access to the reports and\or folders using the management studio for reporting services, but over here we are dealing (and had to mimic) with a third party web access manager who decides the access to the reports\folder based on the current user login.  Based on the logged in user it would decide what reports he can see and what not. &lt;/p&gt;&lt;p&gt;In other words the account used to access the reports on the reports server is different than the user login account. It has access to all the reports on the server. The "logged in user's" access is decided by the third party web access software and is "not" dependant on the windows login account. &lt;/p&gt;&lt;p&gt;This is different than the way it would have behaved if the rights access would have been done by the management studio. In that case the windows account and the role to which he belongs is used for deciding the access he has to a particular report.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SSRS Management Web Services&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Based on the above mentioned story line, in this example we have two users Tom &amp;amp; Joe. They have access to the "AdventureWorks Reports" folder and "WellsReport" folder respectively. When a user is logged in and runs the app, he is only shown the respective folder\reports to which he has access. This control would be a characteristics of a web access manager and is mimicked by a dummy function (WebAccessManagerBlackBox), which takes a parameter of username. We get the current user by making a call to "System.Security.Principal.WindowsIdentity.GetCurrent().Name" and passing it as a parameter while calling the said function. The trick is that the report's path is set to the folder to which the current user has access and thus only the reports below in the hierarchy to which the user has access are displayed. &lt;/p&gt;&lt;p&gt;The web service method, ListChildren returns the list of the catalogs (report items) which is then passed to populate the tree control.&lt;/p&gt;&lt;p&gt;This would display only the reports to which the user has access and populate the tree view control on the left. Once the user clicks on one of the report, the adjacent reports viewer control would display the selected report. To add some spice to the story line it is assumed that the user might have to open more than one report or even the same report twice so that he can do some comparitative analysis. This feature is made available by the use of the tabbed controls along with multiple reports. When the user clicks on a report in the tree view the current tab control displays the report. &lt;/p&gt;&lt;p&gt;Also, when the user runs the application, he is shown a dummy report which has nothing but a message asking him to click on one of the report in the tree node.&lt;/p&gt;&lt;p&gt;Here is the code...   &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="604" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="602"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using MServices.ReportingService; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;namespace MServices&lt;br /&gt;{&lt;br /&gt;    public partial class MServicesMain : Form&lt;br /&gt;    {&lt;br /&gt;        private static string reportServer = "&lt;/span&gt;&lt;a href="http://&amp;lt;machine/"&gt;&lt;span style="font-size:78%;"&gt;/reportserver" ;?=";?"&amp;gt;/reportserver" ;?=";?"&amp;gt;/reportserver" ;?=";?"&amp;gt;/reportserver" ;?&amp;gt;/reportserver";'&amp;gt;http://&amp;lt;machine name&amp;gt;/reportserver";&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;        private static char separator = '/';&lt;br /&gt;        private static char[] separators = { separator };&lt;br /&gt;        private static string separatorString = new string(separator, 1);&lt;br /&gt;        private static string reportPath = "/"; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;        public MServicesMain()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;        private void MServicesMain_Load(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            // added this peice to handle the restriction of the reports per user basis.&lt;br /&gt;            WebAccessManagerBlackBox(System.Security.Principal.WindowsIdentity.GetCurrent().Name); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            ReportingService.ReportingService rService = new ReportingService.ReportingService();&lt;br /&gt;            rService.Credentials = System.Net.CredentialCache.DefaultCredentials; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            CatalogItem[] catalogItems;&lt;br /&gt;            catalogItems = rService.ListChildren(reportPath, true); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            PopulateTree(catalogItems); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            // added this peice to handle the restriction of the reports per user basis.&lt;br /&gt;            if (!reportPath.Equals("/"))&lt;br /&gt;            {&lt;br /&gt;                ReportTreeView.Nodes[0].Text = reportPath.Substring(1);&lt;br /&gt;            }&lt;br /&gt;            ReportViewer1.RefreshReport();&lt;br /&gt;        } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;        private void WebAccessManagerBlackBox(string username){&lt;br /&gt;            if (username.Equals("ADV-SQL2\\Tom"))&lt;br /&gt;            {&lt;br /&gt;                reportPath = "/AdventureWorks Reports";&lt;br /&gt;            }&lt;br /&gt;            if (username.Equals("ADV-SQL2\\Joe"))&lt;br /&gt;            {&lt;br /&gt;                reportPath = "/WellsReport";&lt;br /&gt;            }&lt;br /&gt;        } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;        private void PopulateTree(CatalogItem[] catalogItems)&lt;br /&gt;        {&lt;br /&gt;            foreach (CatalogItem item in catalogItems)&lt;br /&gt;            {&lt;br /&gt;                if (item.Type == ItemTypeEnum.Report &amp;amp;&amp;amp; item.Name!= "DummyReport")&lt;br /&gt;                {&lt;br /&gt;                    string path = item.Path.Remove(0, reportPath.Length);&lt;br /&gt;                    string[] tokens = path.Split(separators);&lt;br /&gt;                    AddNodes(tokens, 0, ReportTreeView.Nodes);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;        private void AddNodes(string[] tokens, int index, TreeNodeCollection nodes)&lt;br /&gt;        {&lt;br /&gt;            TreeNode node = null; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            for (int i = 0; i &amp;lt; nodes.Count; i++)&lt;br /&gt;            {&lt;br /&gt;                if (nodes[i].Text == tokens[index])&lt;br /&gt;                {&lt;br /&gt;                    node = nodes[i];&lt;br /&gt;                    break;&lt;br /&gt;                }&lt;br /&gt;            } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            if (node == null)&lt;br /&gt;            {&lt;br /&gt;                node = new TreeNode();&lt;br /&gt;                node.Text = tokens[index];&lt;br /&gt;                nodes.Add(node); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;                if (tokens.Length - 1 == index)&lt;br /&gt;                {&lt;br /&gt;                    node.Tag = String.Join(separatorString.ToString(), tokens);&lt;br /&gt;                    node.Text = tokens[tokens.Length - 1];&lt;br /&gt;                }&lt;br /&gt;            } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            index++;&lt;br /&gt;            if (tokens.Length &amp;gt; index)&lt;br /&gt;            {&lt;br /&gt;                AddNodes(tokens, index, node.Nodes);&lt;br /&gt;            }&lt;br /&gt;        } &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;        private void ReportTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            string tag = String.Empty; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;            if (e.Node.Tag != null)&lt;br /&gt;            {&lt;br /&gt;                tag = e.Node.Tag.ToString(); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;                ((Microsoft.Reporting.WinForms.ReportViewer)tabControl.SelectedTab.Controls[0])&lt;br /&gt;                    .ServerReport.ReportServerUrl = new Uri(reportServer); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;                ((Microsoft.Reporting.WinForms.ReportViewer)tabControl.SelectedTab.Controls[0])&lt;br /&gt;                    .ServerReport.ReportPath = reportPath + tag; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;                ((Microsoft.Reporting.WinForms.ReportViewer)tabControl.SelectedTab.Controls[0]).RefreshReport(); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;                tabControl.SelectedTab.Text = tag.Substring(tag.LastIndexOf("/")+1);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;The image shows the form in action...&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/aseemone/SCfdjNvJR3I/AAAAAAAAA_M/ZGqSa70yLeo/Main%5B26%5D.gif"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="532" alt="" src="http://lh6.ggpht.com/aseemone/SCfdjdvJR4I/AAAAAAAAA_U/jLbah3o27R0/Main_thumb%5B21%5D.gif" width="826" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;a href="http://lh5.ggpht.com/aseemone/SCfdkNvJR5I/AAAAAAAAA_c/ZRtI6IG57eA/Reports%5B3%5D.gif"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="532" alt="Reports" src="http://lh4.ggpht.com/aseemone/SCfdk9vJR6I/AAAAAAAAA_k/xbKIsYf_tqw/Reports_thumb%5B1%5D.gif" width="826" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SSRS Execution Web Services&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;The sample in the online documentation does an excellent job of getting the concept across. Please refer to the same at the following URL for more details.&lt;/p&gt;&lt;p&gt;&lt;a title="http://technet.microsoft.com/en-us/library/microsoft.wssux.reportingserviceswebservice.rsexecutionservice2005.reportexecutionservice.render.aspx" href="http://technet.microsoft.com/en-us/library/microsoft.wssux.reportingserviceswebservice.rsexecutionservice2005.reportexecutionservice.render.aspx"&gt;http://technet.microsoft.com/en-us/library/microsoft.wssux.reportingserviceswebservice.rsexecutionservice2005.reportexecutionservice.render.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-3593027252956328776?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/3593027252956328776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/05/sql-server-2005-reporting-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3593027252956328776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3593027252956328776'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/05/sql-server-2005-reporting-services.html' title='SQL Server 2005 Reporting Services - Reports Management &amp;amp; Execution Web Services'/><author><name>aseem pandit</name><uri>http://www.blogger.com/profile/14292143803938573873</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18130993545316792730'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-86507865652776329</id><published>2008-04-27T14:08:00.003-04:00</published><updated>2008-04-27T14:19:17.010-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSS'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>Microsoft Search Server (MSS) vs. Google Search Appliance (GSA)</title><content type='html'>Last week we were working on Google Search Application (GSA) to Microsoft Search Server(MSS) migration engagement for a client. The client in this case provides several hosted service and one of the key service they provide is to execute hosted search on behalf of their customers (Search as a Service if you will). The point of interest in this engagement was that the client was not evaluating GSA vs. MSS – they already had GSA running for some time and were considering moving to MSS. Now why would someone want to move away from a product that was developed by *Google*? Particularly when the product is Googles domain - Search.&lt;br /&gt;&lt;br /&gt;The pain points around GSA as expressed by the client were:&lt;br /&gt;&lt;br /&gt;1. GSA was extremely unstable, leading to downtime and perpetual Google support requirements.&lt;br /&gt;2. Many a times Google support cannot fix the problem via remote diagnostics hence the client would have to ship the physical box back to Google. Duh!! Imagine the downtime management and hardware redundancy requirement if this happened frequently as in case of this client. (Google provides a physical box with GSA preinstalled on a locked down Linux box)&lt;br /&gt;3. The only option for backup is the configuration file which can be exported to an XML file. However there is no disaster recovery option for the crawled index files. If the server crashes it takes the log files down with it. (this client had to crawl around 7-9 million URLs this could take a long time to re-index)&lt;br /&gt;4. When Google makes any updates to the box, the client would have to re index the whole set of URLs again.&lt;br /&gt;5. GSA has some problems crawling certain sites, hence does not index all the URLs specified in configuration.&lt;br /&gt;&lt;br /&gt;Wow… imagine if you had to live with these issues.. would you choose GSA? Would one accept this type of a solution from a company like Google?&lt;br /&gt;&lt;br /&gt;With GSA Google is treading in uncharted territory - the enterprise. Google does extremely well with their online model, thanks to many of its application being in the perpetual beta state and all products being hosted and managed online by Google customer never had any issues. But the enterprise - this is a different ball game the on premise model is one where Google cant play the perpetual beta cards. And then Google customer support - hmm not a very pleasant experience either. Makes you wonder does Google understand its customers?&lt;br /&gt;&lt;br /&gt;On the other had Microsoft with MSS understands the enterprise, and MSS does not suffer from the same problems as GSA. The concern the client had with MSS was on search result relevancy provided by MSS. However initial MSS relevancy metrics (reciprocal relevancy, Precision @N etc) were promising. Does that mean MSS walks away with all the brownie points? Sadly no. The search space is something Google understands well and Google has build GSA with the intension that some of GSA clients will implement search as a service and hence have provided several capabilities that support this type of deployment out of the box (pure multitenant isolated indexing is not supported) however MSS doesn’t come out of the box with these capabilities – the primary limitation being that MSS supports only a single Shared Service Provider (SSP). If like its cousin MOSS, had MSS supported multiple SSPs thing would have been great. SSPs give you the capability of servicing all the hosted clients in a more multitenant manner (administration, provisioning, configuration, isolation – client specific requirements could not be met leveraging Search Scopes alone) and SSPs also allow you to scale better with different physical indexing server that can be assigned to individual logical SSPs and a more distributed index log file management (most of these capabilities are not in GSA right now). Its sad that Microsoft didn’t plan to include multiple SSP support for MSS. Were MS just plain shortsighted or was there a good reason not to include multiple SSPs in MSS? Either ways Microsofts SSP decision on MSS didn’t help this client. The client is now leaning towards the MOSS solution – though now the cost of implementation had gone up several folds since we are leveraging MOSS instead of MSS. Next stop – performance testing. The final test – if that goes well its hasta la vista to GSA.&lt;br /&gt;&lt;br /&gt;Google being who they are will surely bounce back with a better/stable product and support, but that could take time even the mighty Google is vulnerable. In the meanwhile GSA isn’t getting a lot of word of mouth advertising from their existing customers and Microsoft is sure to leverage that. As with most things in life you don’t get a second chance to make the first impression :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-86507865652776329?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/86507865652776329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/04/microsoft-search-server-mss-vs-google.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/86507865652776329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/86507865652776329'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/04/microsoft-search-server-mss-vs-google.html' title='Microsoft Search Server (MSS) vs. Google Search Appliance (GSA)'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-3428727174143064388</id><published>2008-04-27T12:21:00.003-04:00</published><updated>2008-04-27T12:28:24.818-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><title type='text'>Technologies that have gone “Cold”</title><content type='html'>Couple of day’s back we were in technology discussion with a client to discuss the the implementation technology of their product. They were primarily a Cold Fusion shop and we were recommending them to implement the new product on the .NET framework via ASP.NET.&lt;br /&gt;&lt;br /&gt;Since we have access to several Microsoft resources, had posted the question to some of the architects in Microsoft if they had any material on Cold Fusion vs. ASP.NET, interestingly couldn’t find an MS architect who was up-to date on the Cold Fusion compete scenario. That’s odd if you think about it cause most of the client facing MS folks walk around carrying MS Tech vs. X technology “battle-cards” around with them and are ready to pounce on the topic. Apparently it seems that these days Cold Fusion is not on Microsoft’s compete radar, hmm…how important is a fact like that? Note that that’s not to say Microsoft doesn’t compete with Adobe. Interestingly other than Microsoft the only other company which has the broadest vision on Rich vs. Reach software delivery is Adobe. In case of MS the Rich vs. Reach extends from WPF-&gt;Silver Light-&gt;AJAX.NET Asp.NET, in case of Adobe its Flash-&gt;Cold Fusion. However on the pure web technology Cold Fusion doesn’t seem to be on MS radar – from what we have seen the other technologies that are on MS radar on the pure web technologies include PHP and Rails (it seems that even JSP has started moving out on the outer periphery of MS radar). From what we gather, the last time Cold Fusion was on MS compete radar was 2004-2005.&lt;br /&gt;&lt;br /&gt;Microsoft has just one primary goal - to ensure that Windows is the platform of choice, and they invest huge amount of money into doing comparative analysis on other competing platforms and technologies and are quick to either adopt the new trends or via their internal R&amp;amp;D engine stay ahead of the curve. The compete documents from MS provide insightful cases when MS technologies are better than other etc. In many ways looking at MS radar for technology comparison is like referring to the reports of some of the IT industry analysts like Gartner/IDC/Forrester etc ie instead of spending a lot of our time into investigating the right technologies we can leverage the R&amp;amp;D effort done by someone else. But still, how important to select from a product that’s on Microsofts compete radar? To put it in a different way - imagine your going to direct a movie and you have chosen the lead actor because you have worked with him in the past and he is a friendly guy..however the paparazzi doesn’t care about him and don’t even want to take his pictures… he is just not on the paparazzis radar. Would you still go ahead and direct the move with the same cast? :)&lt;br /&gt;&lt;br /&gt;Jokes apart selecting the right platform is a critical first step. We might sometimes be religious of our preferred technologies but at the end of the day the technology you select should be able to give you the best ROI on your investments and a faster time to market. Cold Fusion (CF) by the way is a great technology, several years back it was a very compelling product and was light years ahead of other vendors particularly in terms of productivity (CF abstract a lot of the technical details away from developers). Productivity still continues to be the #1 reason most companies choose CF. But other vendors have caught on productivity side, ASP.NET with Visual Studio.NET and AJAX.NET offer the same level of productivity. However the .NET platform has much more to offer. In many way it does not abstract the details from the developers so there might be a more steeper learning curve, however abstracting too many things is also not a good thing. I still remember the time I was coding in VB (classic VB ie not VB.NET) – VB was a high productive environment that was extremely productive but the moment you had do to something out of the ordinary/required more performance/threading etc you wished you had developed the product in VC++ - i.e. productivity alone should not determine the selection of a technology unless productivity itself is the primary goal (as in case of most departmental level IT projects). Given this clients solution was to be hosted on the internet performance was a key driver for the selection of the technology ie higher performance implies running more on less hardware -&gt; reduce the operational cost, this is where ASP.NET had a clear advantage over CF also since the hardware they already had were Windows based no additional software cost had to be incurred when running ASP.NET however in case of CF they had to purchase the Cold Fusion Application Server. This along with other factors made ASP.NET a more compelling choice.&lt;br /&gt;&lt;br /&gt;If you were to build a web application and had to choose a web technology keeping in mind good balance of performance, ROI, productivity etc what technology would you adopt? And would you keep the paparazzi in mind when selecting the technology :)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-3428727174143064388?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/3428727174143064388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/04/technologies-that-have-gone-cold.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3428727174143064388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/3428727174143064388'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/04/technologies-that-have-gone-cold.html' title='Technologies that have gone “Cold”'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-7235064294948304843</id><published>2008-04-17T14:27:00.004-04:00</published><updated>2008-04-17T14:35:44.417-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>Successful SharePoint Deployments</title><content type='html'>Microsoft Office SharePoint Server (MOSS) has undoubtedly exceed the expectations of early adopters, even Microsoft must have underestimated the potential of SharePoint (MOSS is the fastest growing server side product in Microsofts history). SharePoint is one of those rare products we get to see that can almost certainly be a great investment for organizations, but there have been several cases of “SharePoint casualties” interestingly most of these had nothing to do with technical aspects of SharePoint. We have been working with several customers on SharePoint implementations and have found common patterns that can ensure the success of MOSS deployment. Listing out all factors that can lead to a successful implementation can result in a humongous blog so instead of on discussing on what-to-do style this blog post will focus on a what-not-to-do style. (Note that this blog focuses only on MOSS when leveraged as a collaboration solution within the enterprise)&lt;br /&gt;&lt;br /&gt;Major causes for SharePoint failures:&lt;br /&gt;&lt;br /&gt;1) Cultural issues: Every organization is unique and has a different culture, unlike implementing transactional Line-of-Business systems like ERP, SCM, CRM etc, implementing a collaboration system like SharePoint has to also consider how people currently collaborate and how the implementation of the collaboration system will improve their productivity and overall collaboration levels– this would invariably hit organizational-cultural issues (you cant replace existing collaboration mechanism like email etc). Implementing a SharePoint solution also raises questions on the type of governance model – the collaboration solution must reflect how the organization is currently collaborating and extend it. Very tight governance will result in a difficult to use/grow solution and governing the system loosely will result in the solution being unmanageable and loosing value over time. Getting it right should be the first step and an ongoing process. Nothing worse than investing on a portal system and no one wanting to use it.&lt;br /&gt;&lt;br /&gt;2) Big Bang Approach: Ok your company has invested in SharePoint, you have spent a good investment on implementation and you want the whole company to know about the portal and have all the employees start using it overnight. Wrong. Lets learn from the mistakes of SOA projects, most SOA projects have been implemented using the big bang approach (rolling out everything in one shot with extremely lengthy implementation cycle) big bang SOA implementations have almost always failed (giving SOA a bad name :) ). The best implementations are done iteratively over a period of time prioritizing on features that are important to end users, however its equally important that the focus should be on portal features that give the most visibility to stakeholder and provide highest returns on investments (many a times its good to look for the lowest hanging fruit).&lt;br /&gt;&lt;br /&gt;3) Poor rollout strategy: Most non technical organization have hired external contractors to build the SharePoint portals however these contractors just build the solution and packed out, there is no internal knowledge with the organization how to use the solution and how it works. No SharePoint implementation is complete without a proper end user training of the solution and without setting up a team that will champion the portal initiative and train other knowledge workers. The rollout strategy should also take into consider the owners and stakeholders for the portal initiative and how stake holders are given periodic reports on various portal metrics (these are metrics that can justify the ongoing support and maintenance costs of the portal, cost center management etc). Last but not least its important to &lt;a href="http://sharepoint.microsoft.com/gearup/Documents/SharePoint%20Server%202007%20Buzz%20Kit.zip"&gt;create a buzz &lt;/a&gt;around the portal initiative, this ensures that people in the organization (particularly if it’s a geographically dispersed org) know that the portal is a major and serious initiative (were talking of creating a buzz here not creating hype :) ), would be plain silly to have made a huge investment on a portal and not have people know about it.&lt;br /&gt;&lt;br /&gt;There are several other small factors that can ensure a successful SharePoint implementation however the above 3 should provide you good guideline. Sure enough there are technical design considerations to be made for a successful SharePoint implementation but will leave that for another post. Making things MOSSible :) one step at a time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-7235064294948304843?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/7235064294948304843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/04/successful-sharepoint-deployments.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/7235064294948304843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/7235064294948304843'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/04/successful-sharepoint-deployments.html' title='Successful SharePoint Deployments'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6023764939111244906.post-911685441659912434</id><published>2008-04-11T09:44:00.002-04:00</published><updated>2008-04-11T09:55:23.756-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><title type='text'>Cloud computing – the next big thing</title><content type='html'>Subscription based delivery models such as Software as a Service (SaaS)/ Software + Service (S+S) model are no longer a hype, its reality and the sheer number of adoption of subscription based applications by organizations tells you that SaaS/S+S a viable option for most ISVs and end consumers. Market analysts and the IT community are always looking for the “next big thing” and this time around it looks like everyones got their eyes (and big bucks) on cloud computing.&lt;br /&gt;&lt;br /&gt;So what is cloud computing? Practically any application/service that’s hosted outside the organizations firewall has been referred as “in the cloud”, so what the deal with cloud computing and what makes it different from hosted applications we have been building?&lt;br /&gt;In many ways you can think of cloud computing as a form of utility based computing that’s available on demand, ie a subscription based service. The appeal of could computing is that you no longer have to plan way ahead for hardware capacity (and redundancy) – if you need more hardware capacity all you do is subscribe for additional resources. Instant infrastructure if you will. This is a boon for many startups, as they can start and stay lean on both infrastructure and headcount, it reduces the bar for entry.  Typically services that are infrastructure intensive/ involve number crunching are good examples of services that could be offered in the cloud. Some of the well known examples of cloud computing can be seen from the services provided by Amazon such as their Elastic Compute Cloud (EC2) and its Simple Storage Service (S3). Other major players such as Sun (with its grid computing service) and IBM are also entering the market. Many other heavyweights have committed towards the cloud computing initiative, everyone seems to want a piece of the action. Several enterprises are already subscribing to cloud services for image processing, address processing etc.&lt;br /&gt;&lt;br /&gt;So whats happening on the Microsoft front you may ask? Microsofts Oslo initiative (&lt;a href="http://techturks.blogspot.com/2008/03/microsoft-oslo.html"&gt;see earlier post&lt;/a&gt;) along with the BizTalk Service and its virtualization and System Center management products will provide the back bone to building cloud computing infrastructure also Microsofts High Performance Computing (HPC) 2008 is in its early stages but looks promising, you can expect several companies to provide cloud services for doing grid computing by leveraging MS HPC, similar to the grid computing service provided by Sun.&lt;br /&gt;&lt;br /&gt;Cloud computing may be known by different names already you can hear people interpreting it as “platform as a service” and “infrastructure as a service” and each vendor is carving out a keyword that they can associate with cloud computing and riding the hype wave. Regardless in the next few years cloud computing will change the way we build and consume software just as SaaS/S+S is changing the way we use applications. This should be an exciting space to watch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6023764939111244906-911685441659912434?l=www.bpioblog.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bpioblog.com/feeds/911685441659912434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bpioblog.com/2008/04/cloud-computing-next-big-thing.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/911685441659912434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6023764939111244906/posts/default/911685441659912434'/><link rel='alternate' type='text/html' href='http://www.bpioblog.com/2008/04/cloud-computing-next-big-thing.html' title='Cloud computing – the next big thing'/><author><name>Melvin Lancelot</name><uri>http://www.blogger.com/profile/00117572883800842135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01467281709088358894'/></author><thr:total>2</thr:total></entry></feed>