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

<channel>
	<title>Rob Tiffany &#187; IIS</title>
	<atom:link href="http://robtiffany.com/tag/iis/feed/" rel="self" type="application/rss+xml" />
	<link>http://robtiffany.com</link>
	<description>Author, Mobility Strategist at Microsoft, Speaker, Advisor, Technology Executive, Former Navy Submariner</description>
	<lastBuildDate>Wed, 16 May 2012 01:19:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Consumerization of IT Collides with MEAP: Android &gt; Cloud</title>
		<link>http://robtiffany.com/consumerization-of-it-collides-with-meap-android-cloud/</link>
		<comments>http://robtiffany.com/consumerization-of-it-collides-with-meap-android-cloud/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 05:25:12 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[MEAP]]></category>
		<category><![CDATA[ACS]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AppFabric]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Claims]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[CoIT]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Consumerization of IT]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[Dalvik]]></category>
		<category><![CDATA[Device Management]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[Honeycomb]]></category>
		<category><![CDATA[Ice Cream Sandwich]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[On-Premises]]></category>
		<category><![CDATA[Private Cloud]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Azure Data Sync]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[System Center]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-android-cloud</guid>
		<description><![CDATA[In my ‘Consumerization of IT Collides with MEAP’ article last week, I described how to connect Android smartphones and tablets to Microsoft’s On-Premise infrastructure. In this week’s scenario, I’ll use the picture below to illustrate how Android utilizes many of &#8230; <a href="http://robtiffany.com/consumerization-of-it-collides-with-meap-android-cloud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my ‘<a href="http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-android-on-premises" target="_blank">Consumerization of IT Collides with MEAP’ article last week</a>, I described how to connect Android smartphones and tablets to Microsoft’s On-Premise infrastructure. In this week’s scenario, I’ll use the picture below to illustrate how Android utilizes many of Gartner’s Mobile Enterprise Application Platform Critical Capabilities to connect to Microsoft’s Cloud services in Azure:</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/11/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://robtiffany.com/wp-content/uploads/2011/11/image_thumb.png" width="596" height="317" /></a></p>
<p>As you can see from the picture above: </p>
<ol>
<li>For the <strong>Management Tools Critical Capability</strong>, there is no Cloud-based device management solution, policy-enforcement, or software distribution solution from Microsoft for Android. As I mentioned in last week’s post, consumer software distribution comes from the Android Market and the enterprise equivalent is facilitated via internal web servers and user-clickable URLs. Since Android is a wide-open system, competing markets and app stores are on the rise from Amazon and others. </li>
<li>For both the Client and Server <strong>Integrated Development Environment (IDE) and Multichannel Tool Critical Capability</strong>, Android uses Visual Studio. Endpoint development consists of HTML5, ECMAScript 5, and CSS3 delivered by ASP.NET via Web Roles. WCF REST + JSON Web services can also be created and consumed via Ajax calls from the browser. On the Cloud side of things, the Windows Azure SDK plugs into Visual Studio and provides Android developers with everything they need to build Cloud applications. It includes a Cloud emulator to simulate all aspects of Windows Azure and AppFabric on their development computer. In scenarios where native development is required by the customers, the <a href="https://github.com/microsoft-dpe/wa-toolkit-android" target="_blank">Windows Azure Toolkit for Android</a> can be used to allow Java via Eclipse to securely communicate with the Microsoft cloud. </li>
<li>For the cross-platform <strong>Application Client Runtime Critical Capability</strong>, Android uses the WebKit browser called Chrome to provide HTML5 + CSS3 + ECMAScript5 capabilities. Offline storage is important to keep potentially disconnected Android smartphones and tablets working and this is facilitated by Web Storage which is accessible via JavaScript. </li>
<li>For the<strong> Security Critical Capability</strong>, Android 3.0 and higher provides hardware encryption based on the user’s device passcode for data-at-rest. Data-in-transit is secured via SSL and VPN. LDAP API support allows it to access corporate directory services. Auth in the Microsoft cloud is handled via the Windows Azure AppFabric Access Control Service (ACS). </li>
<li>For the<strong> Enterprise Application Integration Tools Critical Capability</strong>, Android can reach out to servers directly via Web Services or indirectly through the Cloud via the Windows Azure AppFabric Service Bus to connect to other enterprise packages. </li>
<li>The <strong>Multichannel Server Critical Capability</strong> to support any open protocol is handled automatically by Windows Azure. Cross-Platform wire protocols riding on top of HTTP are exposed by Windows Communication Foundation (WCF) and include SOAP, REST and Atompub. Cross-Platform data serialization is also provided by WCF including XML, JSON, and OData. These Multichannel capabilities support thick clients making web service calls as well as thin web clients making Ajax calls. Distributed caching to dramatically boost the performance of any client is provided by Windows Azure AppFabric Caching. </li>
<li>As you might imagine, the <strong>Hosting Critical Capability</strong> is handled by Windows Azure. Beyond providing the most complete solution of any Cloud provider, Windows Azure Connect provides an IPSec-protected connection with your On-Premises network and SQL Azure Data Sync can be used to move data between SQL Server and SQL Azure. This gives you the Hybrid Cloud solution you might be looking for. </li>
<li>For the <strong>Packaged Mobile Apps or Components Critical Capability</strong>, Android runs cross-platform mobile apps including <a href="https://market.android.com/details?id=com.skype.raider&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5za3lwZS5yYWlkZXIiXQ..">Skype</a>, <a href="https://market.android.com/details?id=com.microsoft.bing&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5taWNyb3NvZnQuYmluZyJd">Bing</a>, <a href="https://market.android.com/details?id=msn.android#?t=W251bGwsMSwxLDIxMiwibXNuLmFuZHJvaWQiXQ..">MSN</a>, <a href="https://market.android.com/details?id=com.microsoft.tag.app.reader&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5taWNyb3NvZnQudGFnLmFwcC5yZWFkZXIiXQ..">Tag</a>, <a href="https://market.android.com/details?id=com.hotmail.Z7&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5ob3RtYWlsLlo3Il0.">Hotmail</a>, and of course the critical ActiveSync component that makes push emails, contacts, calendars, and device management policies possible.</li>
</ol>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/11/Samsung-Galaxy-Nexus-UK.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Samsung-Galaxy-Nexus-UK" border="0" alt="Samsung-Galaxy-Nexus-UK" src="http://robtiffany.com/wp-content/uploads/2011/11/Samsung-Galaxy-Nexus-UK_thumb.jpg" width="124" height="236" /></a></p>
<p>While Android 3.0 and higher meets many of Gartner’s Critical Capabilities, it doesn’t fare very well when it comes to cloud-based device management.&#160; While other mobile device platforms also come up short in this department, I’m sure this will change in the coming year.&#160; The tidal wave of CoIT means that device management in the future will look very different from how it did 5 years ago.&#160; Expect a clear separation between corporate apps/data and personal apps/data to be managed.</p>
<p>Best Regards, </p>
<p>Rob </p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/consumerization-of-it-collides-with-meap-android-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consumerization of IT Collides with MEAP: Android &gt; On-Premises</title>
		<link>http://robtiffany.com/consumerization-of-it-collides-with-meap-android-on-premises/</link>
		<comments>http://robtiffany.com/consumerization-of-it-collides-with-meap-android-on-premises/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 05:50:26 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[CoIT]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Consumerization of IT]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[Dalvik]]></category>
		<category><![CDATA[Device Management]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[Honeycomb]]></category>
		<category><![CDATA[Ice Cream Sandwich]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[On-Premises]]></category>
		<category><![CDATA[Private Cloud]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[System Center]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-android-on-premises</guid>
		<description><![CDATA[In my last ‘Consumerization of IT Collides with MEAP’ article, I described how to connect iPhones and iPads to Microsoft’s Cloud servers in Azure. In this week’s scenario, I’ll use the picture below to illustrate how Android devices can utilize &#8230; <a href="http://robtiffany.com/consumerization-of-it-collides-with-meap-android-on-premises/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last <a href="http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-iphone-ipad-cloud" target="_blank">‘Consumerization of IT Collides with MEAP’ article</a>, I described how to connect iPhones and iPads to Microsoft’s Cloud servers in Azure. In this week’s scenario, I’ll use the picture below to illustrate how Android devices can utilize many of Gartner’s Critical Capabilities to connect to Microsoft’s On-Premise infrastructure:</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/10/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://robtiffany.com/wp-content/uploads/2011/10/image_thumb2.png" alt="image" width="596" height="317" border="0" /></a></p>
<p>As you can see from the picture above:</p>
<ol>
<li>For the <strong>Management Tools Critical Capability</strong>, Android uses Microsoft Exchange for On-Premise policy enforcement via Exchange ActiveSync (EAS) but has no private software distribution equivalent to System Center Configuration Manager 2007 from Microsoft today. Instead, in-house apps are hosted and APKs distributed via a web server over wireless by having a user click on a URL or through a variety of app stores. In the future, System Center Configuration Manager 2012 will be able to better manage Android devices.</li>
<li>For both the Client and Server <strong>Integrated Development Environment (IDE) and Multichannel Tool Critical Capability</strong>, Android uses Visual Studio. While the Server/EAI development functionality is the same as every other platform, endpoint development will consist of HTML5, ECMAScript 5, and CSS3 delivered by ASP.NET. WCF REST + JSON Web services can also be created and consumed via Ajax calls from the browser.</li>
<li>For the cross-platform <strong>Application Client Runtime Critical Capability</strong>, we will rely on Android’s WebKit browser to provide HTML5 + CSS3 + ECMAScript5 capabilities. Offline storage is important to keep potentially disconnected Android working and this is facilitated by Web Storage which is accessible via JavaScript.</li>
<li>For the<strong> Security Critical Capability</strong>, Android 3.0 and higher provides hardware encryption based on the user’s device passcode for data-at-rest. Data-in-transit is secured via SSL and VPN. LDAP API support allows it to access corporate directory services.</li>
<li>For the<strong> Enterprise Application Integration Tools Critical Capability</strong>, Android can reach out to servers directly via Web Services or indirectly via SQL Server (JDBC) or BizTalk using SSIS/Adapters to connect to other enterprise packages.</li>
<li>The <strong>Multichannel Server Critical Capability</strong> to support any open protocol directly, via Reverse Proxy, or VPN is facilitated by ISA/TMG/UAG/IIS. Cross-Platform wire protocols riding on top of HTTP are exposed by Windows Communication Foundation (WCF) and include SOAP, REST and Atompub. Cross-Platform data serialization is also provided by WCF including XML, JSON, and OData. These Multichannel capabilities support thick clients making web service calls as well as thin web clients making Ajax calls. Distributed caching to dramatically boost the performance of any client is provided by Windows Server AppFabric Caching.</li>
<li>While the <strong>Hosting Critical Capability</strong> may not be as relevant in an on-premises scenario, Windows Azure Connect provides an IPSec-protected connection to the Cloud and SQL Azure Data Sync can be used to move data between SQL Server and SQL Azure.</li>
<li>For the <strong>Packaged Mobile Apps or Components Critical Capability</strong>, Android runs cross-platform mobile apps including <a title="Skype for Android" href="https://market.android.com/details?id=com.skype.raider&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5za3lwZS5yYWlkZXIiXQ.." target="_blank">Skype</a>, <a title="Bing" href="https://market.android.com/details?id=com.microsoft.bing&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5taWNyb3NvZnQuYmluZyJd" target="_blank">Bing</a>, <a title="MSN" href="https://market.android.com/details?id=msn.android#?t=W251bGwsMSwxLDIxMiwibXNuLmFuZHJvaWQiXQ.." target="_blank">MSN</a>, <a title="Tag" href="https://market.android.com/details?id=com.microsoft.tag.app.reader&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5taWNyb3NvZnQudGFnLmFwcC5yZWFkZXIiXQ.." target="_blank">Tag</a>, <a title="Hotmail" href="https://market.android.com/details?id=com.hotmail.Z7&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5ob3RtYWlsLlo3Il0." target="_blank">Hotmail</a>, and of course the critical ActiveSync component that makes push emails, contacts, calendars, and device management policies possible.</li>
</ol>
<p><a href="http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-android-on-premises/attachment/samsung-galaxy-nexus-uk" rel="attachment wp-att-1142"><img class="aligncenter size-medium wp-image-1142" title="Samsung-Galaxy-Nexus" src="http://robtiffany.com/wp-content/uploads/2011/10/Samsung-Galaxy-Nexus-UK-155x300.jpg" alt="" width="155" height="300" /></a></p>
<p>Newer versions of Android (3.x/4.0) are beginning to meet more of Gartner’s Critical Capabilities. It’s really improved in the last year in areas of encryption, but device fragmentation makes this improvement uneven.  The app story is still the ‘Wild West’ since the Android Market is an un-vetted free-for-all. This big ‘red flag’ has given rise to curated app stores like the one from Amazon.  As you can see from the picture, the big gap is with the client application runtime critical capability. Native development via Java/Eclipse is where Google wants to steer you and Microsoft doesn’t make native tools, runtimes or languages for this platform. You can definitely perform your own due diligence on <a title="Mono for Android" href="http://android.xamarin.com/" target="_blank">Mono for Android </a>from our friend Miguel de Icaza and his colleagues in order to reuse your existing .NET and C# skills. From a Microsoft perspective though, you’re definitely looking at HTML5 delivered via ASP.NET.</p>
<p>Next week, I’ll cover how Android connects to the Cloud.</p>
<p>Best Regards,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/consumerization-of-it-collides-with-meap-android-on-premises/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Consumerization of IT Collides with MEAP: iPhone + iPad &gt; On-Premises</title>
		<link>http://robtiffany.com/consumerization-of-it-collides-with-meap-iphone-ipad-on-premises/</link>
		<comments>http://robtiffany.com/consumerization-of-it-collides-with-meap-iphone-ipad-on-premises/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 21:27:23 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CoIT]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Consumerization of IT]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[Device Management]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[On-Premises]]></category>
		<category><![CDATA[Private Cloud]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[System Center]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-iphone-ipad-on-premises</guid>
		<description><![CDATA[In my last ‘Consumerization of IT Collides with MEAP’ article, I described how to connect a Windows Phone device to Microsoft’s Cloud servers in Azure.  By now you’re probably thinking, “It’s easy to talk about Microsoft endpoints talking to Microsoft &#8230; <a href="http://robtiffany.com/consumerization-of-it-collides-with-meap-iphone-ipad-on-premises/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last <a href="http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-windows-phone-cloud" target="_blank">‘Consumerization of IT Collides with MEAP’ article</a>, I described how to connect a Windows Phone device to Microsoft’s Cloud servers in Azure.  By now you’re probably thinking, “It’s easy to talk about Microsoft endpoints talking to Microsoft servers.” So in this week’s scenario, I’ll use the picture below to illustrate how iOS devices like the iPhone and iPad can utilize many of Gartner’s Critical Capabilities to connect to Microsoft’s On-Premise infrastructure:</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/10/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://robtiffany.com/wp-content/uploads/2011/10/image_thumb.png" alt="image" width="596" height="317" border="0" /></a></p>
<p>As you can see from the picture above:</p>
<ol>
<li>For the <strong>Management Tools Critical Capability</strong>, iOS uses Microsoft Exchange for On-Premise policy enforcement via Exchange ActiveSync (EAS) but has no private software distribution equivalent to System Center Configuration Manager 2007 from Microsoft today. Instead, in-house apps are hosted and distributed via a web server over wireless by having a user click on a URL.  In the future, System Center Configuration Manager 2012 will be able to better manage iOS devices.</li>
<li>For both the Client and Server <strong>Integrated Development Environment (IDE) and Multichannel Tool Critical Capability</strong>, iOS uses Visual Studio. While the Server/EAI development functionality is the same as every other platform, endpoint development will consist of HTML5, ECMAScript 5, and CSS3 delivered by ASP.NET.  WCF REST + JSON Web services can also be created and consumed via Ajax calls from the browser.</li>
<li>For the cross-platform <strong>Application Client Runtime Critical Capability</strong>, we will rely on iOS’s WebKit browser called Safari to provide HTML5 + CSS3 + ECMAScript5 capabilities. Offline storage is important to keep potentially disconnected iPhones and iPads working and this is facilitated by Web Storage which is accessible via JavaScript.</li>
<li>For the<strong> Security Critical Capability</strong>, iOS provides AES 256 hardware encryption as well as Data Protection based on the user’s device passcode for data-at-rest. Data-in-transit is secured via SSL, VPN, and 802.1X.  Built-in LDAP support allows it to access corporate directory services.</li>
<li>For the<strong> Enterprise Application Integration Tools Critical Capability</strong>, iOS can reach out to servers directly via Web Services or indirectly via SQL Server or BizTalk using SSIS/Adapters to connect to other enterprise packages.</li>
<li>The <strong>Multichannel Server Critical Capability</strong> to support any open protocol directly, via Reverse Proxy, or VPN is facilitated by ISA/TMG/UAG/IIS. Crosss-Platform wire protocols riding on top of HTTP are exposed by Windows Communication Foundation (WCF) and include SOAP, REST and Atompub. Cross-Platform data serialization is also provided by WCF including XML, JSON, and OData. These Multichannel capabilities support thick clients making web service calls as well as thin web clients making Ajax calls. Distributed caching to dramatically boost the performance of any client is provided by Windows Server AppFabric Caching.</li>
<li>While the <strong>Hosting Critical Capability</strong> may not be as relevant in an on-premises scenario, Windows Azure Connect provides an IPSec-protected connection to the Cloud and SQL Azure Data Sync can be used to move data between SQL Server and SQL Azure.</li>
<li>For the <strong>Packaged Mobile Apps or Components Critical Capability</strong>, iOS runs cross-platform mobile apps including OneNote, Bing, Tag, and of course the critical ActiveSync component that makes push emails, contacts, calendars, and device management policies possible.</li>
</ol>
<p><a href="http://robtiffany.com/sync-framework/sync-framework-v4-is-now-open-source-and-ready-to-connect-any-device-to-sql-server-and-sql-azure/attachment/ipad" rel="attachment wp-att-1046"><img class="aligncenter size-full wp-image-1046" title="iPad" src="http://robtiffany.com/wp-content/uploads/2011/09/iPad.png" alt="" width="113" height="144" /></a></p>
<p>As you can see, iOS meets many of Gartner’s Critical Capabilities.  It’s really improved over the years in areas of security and device management.  As you can see from the picture, the big gap is with the client application runtime critical capability.  Native development via Xcode/Objective-C is where Apple wants to steer you and Microsoft doesn’t make native tools, runtimes or languages for this platform.  You can certainly kick the tires and perform your own due diligence on <a title="MonoTouch" href="http://xamarin.com/monotouch" target="_blank">MonoTouch </a>from our friend Miguel de Icaza and his colleagues in order to reuse your existing .NET and C# skills.  From a Microsoft perspective though, you’re definitely looking at HTML5 delivered via ASP.NET.</p>
<p>Next week, I’ll cover how iOS connects to the Cloud.</p>
<p>Best Regards,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/consumerization-of-it-collides-with-meap-iphone-ipad-on-premises/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Consumerization of IT Collides with MEAP: Windows &gt; Cloud</title>
		<link>http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-cloud/</link>
		<comments>http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-cloud/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 04:51:39 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[MEAP]]></category>
		<category><![CDATA[ACS]]></category>
		<category><![CDATA[ADFS]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[AppFabric]]></category>
		<category><![CDATA[Auth]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure AppFabric]]></category>
		<category><![CDATA[CIO]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[CoIT]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Consumerization of IT]]></category>
		<category><![CDATA[Critical Capabilities]]></category>
		<category><![CDATA[CTO]]></category>
		<category><![CDATA[Device Management]]></category>
		<category><![CDATA[EAI]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Integrated Development Environment]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[IT Director]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[MDM]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[OData]]></category>
		<category><![CDATA[On-Premises]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Azure Data Sync]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Sync Framework]]></category>
		<category><![CDATA[Web Role]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[Web Storage]]></category>
		<category><![CDATA[WIF]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Intune]]></category>
		<category><![CDATA[Worker Role]]></category>

		<guid isPermaLink="false">http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-windows-cloud</guid>
		<description><![CDATA[In my Consumerization of IT Collides with MEAP article last week, I described how to connect a Windows 7 device to Microsoft’s On-Premises servers.&#160; Whether you’re talking about a Windows 7 tablet or laptop, I showed that you can follow &#8230; <a href="http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-cloud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my Consumerization of IT Collides with MEAP article last week, I described how to connect a Windows 7 device to Microsoft’s On-Premises servers.&#160; Whether you’re talking about a Windows 7 tablet or laptop, I showed that you can follow the Garter MEAP Critical Capabilities to integrate with our stack in a consistent manner.&#160; Remember, the ability to support multiple mobile apps across multiple mobile platforms, using the same software stack is a key tenant to MEAP.&#160; It’s all about avoiding point solutions.</p>
<p>If you need a refresher on the Gartner MEAP Critical Capabilities, check out: <a title="http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-windows-on-premises" href="http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-windows-on-premises">http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-windows-on-premises</a>&#160;</p>
<p>In this week’s scenario, I’ll use the picture below to illustrate how Mobile versions of Windows 7 in the form of slates, laptops, and tablets utilize some or all of Gartner’s Critical Capabilities to connect to Microsoft’s Cloud infrastructure:</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/08/image1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://robtiffany.com/wp-content/uploads/2011/08/image_thumb1.png" width="596" height="318" /></a></p>
<p>As you can see from the picture above:</p>
<ol>
<li>For the <strong>Management Tools Critical Capability</strong>, Windows 7 uses Windows Intune for Cloud-based device management and software distribution. </li>
<li>For both the Client and Server <strong>Integrated Development Environment (IDE) and Multichannel Tool Critical Capability</strong>, Windows 7 uses Visual Studio. The Windows Azure SDK plugs into Visual Studio and provides developers with everything they need to build Cloud applications.&#160; It even includes a Cloud emulator to simulate all aspects of Windows Azure on their development computer. </li>
<li>For the cross-platform <strong>Application Client Runtime Critical Capability</strong>, Windows 7 uses .NET (Silverlight/WPF/WinForms) for thick clients. For thin clients, it uses Internet Explorer 9 to provide HTML5 + CSS3 + ECMAScript5 capabilities. Offline storage is important to keep potentially disconnected mobile clients working and this is facilitated by SQL Server Compact + Isolated Storage for thick clients and Web Storage for thin clients. </li>
<li>For the<strong> Security Critical Capability</strong>, Windows 7 provides security for data at rest via Bitlocker, data in transit via SSL, &amp; Authorization/Authentication via the Windows Azure AppFabric Access Control Serivce (ACS). </li>
<li>For the<strong> Enterprise Application Integration Tools Critical Capability</strong>, Windows 7 can reach out to servers directly via Web Services or indirectly through the Cloud via the Windows Azure AppFabric Service Bus to connect to other enterprise packages. </li>
<li>The <strong>Multichannel Server Critical Capability</strong> to support any open protocol is handled automatically by Windows Azure. Crosss-Platform wire protocols riding on top of HTTP are exposed by Windows Communication Foundation (WCF) and include SOAP, REST and Atompub. Cross-Platform data serialization is also provided by WCF including XML, JSON, and OData. Cross-Platform data synchronization if provided by the Sync Framework. These Multichannel capabilities support thick clients making web service calls as well as thin web clients making Ajax calls. Distributed caching to dramatically boost the performance of any client is provided by Windows Azure AppFabric Caching. </li>
<li>As you might imagine, the <strong>Hosting Critical Capability</strong> is knocked out of the park with Windows Azure.&#160; Beyond providing the most complete solution of any Cloud provider, Windows Azure Connect provides an IPSec-protected connection with your On-Premises network and SQL Azure Data Sync can be used to move data between SQL Server and SQL Azure.&#160; This gives you the Hybrid Cloud solution you might be looking for. </li>
<li>For the <strong>Packaged Mobile Apps or Components Critical Capability</strong>, Windows 7 runs cross-platform mobile apps include Office/Lync/IE/Outlook/Bing. </li>
</ol>
<p>As you can see from this and last week’s article, Windows 7 meets all of Gartner’s Critical Capabilities whether it’s connecting to Microsoft’s On-Premises or Cloud servers and infrastructure.&#160; They great takeaway from the picture above, is Windows 7 only needs to know how to integrate its apps with WCF in the exact same way as is does in the On-Premises scenario.&#160; Windows developers can focus on Windows without having to concern themselves with the various options provided by Windows Azure.&#160; Cloud developers just need to provide a WCF interface to the mobile clients. </p>
<p>When an employee walks in the door with a wireless Windows 7 Slate device, you can rest assured that you can make them productive via Windows Azure without sacrificing any of the Gartner Critical Capabilities.</p>
<p>Next week, I’ll cover how Windows Phone connects to an On-Premises Microsoft infrastructure.</p>
<p>Best Regards,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Consumerization of IT Collides with MEAP: Windows &gt; On-Premises</title>
		<link>http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-on-premises/</link>
		<comments>http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-on-premises/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 21:23:07 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[MEAP]]></category>
		<category><![CDATA[CIO]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[CoIT]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Consumerization of IT]]></category>
		<category><![CDATA[Critical Capabilities]]></category>
		<category><![CDATA[CTO]]></category>
		<category><![CDATA[EAI]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Integrated Development Environment]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[IT Director]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[On-Premises]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://robtiffany.com/meap/consumerization-of-it-collides-with-meap-windows-on-premises</guid>
		<description><![CDATA[The Consumerization of IT is an unstoppable force where employees are bringing every kind of mobile device imaginable into the office expecting to be productive.  Over the course of the next 20 articles, I’ll describe how IT professionals can use &#8230; <a href="http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-on-premises/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The Consumerization of IT is an unstoppable force where employees are bringing every kind of mobile device imaginable into the office expecting to be productive.  Over the course of the next 20 articles, I’ll describe how IT professionals can use the principles of Gartner MEAP to connect any type of mobile device to Microsoft’s On-Premises and Cloud servers.</p>
<p>Gartner specifies the following Critical Capabilities that must be addressed in order for a given product or stack of products to be considered a Mobile Enterprise Application Platform (MEAP):</p>
<ul>
<li><strong>Integrated Development Environment</strong><br />
<blockquote><p>A dedicated environment or plug-in for composing backend server and client side logic, including UI and UX</p></blockquote>
</li>
<li><strong>Application Client Runtime</strong><br />
<blockquote><p>The client runtime logic for the application, either in native format or packaged within a container.</p></blockquote>
</li>
<li><strong>Enterprise Application Integration Tools</strong><br />
<blockquote><p>Tools for integration of mobile server with back end systems, both bespoke and purchased apps or application suites.</p></blockquote>
</li>
<li><strong>Packaged Mobile Apps or Components</strong><br />
<blockquote><p>Self standing mobile applications or components.</p></blockquote>
</li>
<li><strong>Multichannel Tools or Servers</strong><br />
<blockquote><p>Tools that allow for &#8220;write once, run anywhere&#8221; thick or rich mobile clients, cross compilers or environments or platforms that allow business logic to be supported across thin, thick, and rich mobile architectures.</p></blockquote>
</li>
<li><strong>Management Tools</strong><br />
<blockquote><p>Tools for provisioning, supporting, debugging, updating or decommissioning mobile applications.</p></blockquote>
</li>
<li><strong>Security </strong><br />
<blockquote><p>Tools for ensuring the security and privacy of enterprise data on board the device, while transiting through wired or wireless networks, through peripherals, and with backend systems and integration packages.</p></blockquote>
</li>
<li><strong>Hosting</strong><br />
<blockquote><p>The ability to host all development, provisioning, management functions, and optionally corporate data.</p></blockquote>
</li>
</ul>
<ul>In this first scenario, I’ll use the picture below to illustrate how Mobile versions of Windows 7 in the form of slates, laptops, and tablets utilize some or all of Gartner’s Critical Capabilities to connect to an On-Premise Microsoft infrastructure:</ul>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/08/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://robtiffany.com/wp-content/uploads/2011/08/image_thumb.png" alt="image" width="600" height="323" border="0" /></a></p>
<p>As you can see from the picture above, Windows 7:</p>
<ol>
<li>For the <strong>Management Tools Critical Capability</strong>, Windows 7 uses System Center Configuration Manager (SCCM) 2007 for on-premises device management and software distribution.</li>
<li>For both the Client and Server <strong>Integrated Development Environment (IDE) and Multichannel Tool Critical Capability</strong>, Windows 7 uses Visual Studio.</li>
<li>For the cross-platform <strong>Application Client Runtime Critical Capability</strong>, Windows 7 uses .NET (Silverlight/WPF/WinForms) for thick clients.  For thin clients, it uses Internet Explorer 9 to provide HTML5 + CSS3 + ECMAScript5 capabilities.  Offline storage is important to keep potentially disconnected mobile clients working and this is facilitated by SQL Server Compact + Isolated Storage for thick clients and Web Storage for thin clients.</li>
<li>For the<strong> Security Critical Capability</strong>, Windows 7 provides security for data at rest via Bitlocker, data in transit via SSL+VPN, data in the database via RSA/AES, &amp; Authorization/Authentication via Active Directory.</li>
<li>For the<strong> Enterprise Application Integration Tools Critical Capability</strong>, Windows 7 can reach out to servers directly via Web Services or indirectly via SQL Server or BizTalk using SSIS/Adapters/Sync to connect to other enterprise packages.</li>
<li>The <strong>Multichannel Server Critical Capability</strong> to support any open protocol directly, via Reverse Proxy, or VPN is facilitated by ISA/TMG/UAG/IIS.  Crosss-Platform wire protocols riding on top of HTTP are exposed by Windows Communication Foundation (WCF) and include SOAP, REST and Atompub. Cross-Platform data serialization is also provided by WCF including XML, JSON, and OData. Cross-Platform data synchronization if provided by the Sync Framework.  These Multichannel capabilities support thick clients making web service calls as well as thin web clients making Ajax calls.  Distributed caching to dramatically boost the performance of any client is provided by Windows Server AppFabric Caching.</li>
<li>While the <strong>Hosting Critical Capability</strong> may not be as relevant in an on-premises scenario, Windows Azure Connect provide an IPSec-protected connection to the Cloud and SQL Azure Data Sync can be used to move data between SQL Server and SQL Azure.</li>
<li>For the <strong>Packaged Mobile Apps or Components Critical Capability</strong>, Windows 7 runs cross-platform mobile apps include Office/Lync/IE/Outlook/Bing.</li>
</ol>
<p>It should come as no surprise that Windows 7 has a compelling and complete MEAP story to address the issues surrounding the Consumerization of IT (CoIT) when an employee walks in the door with a wireless Windows 7 Slate device.</p>
<p>Next week, I’ll cover how Windows 7 connects to the Cloud.</p>
<p>Best Regards,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/consumerization-of-it-collides-with-meap-windows-on-premises/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Important User Experience (UX) You Can&#8217;t See</title>
		<link>http://robtiffany.com/the-important-user-experience-ux-you-cant-see/</link>
		<comments>http://robtiffany.com/the-important-user-experience-ux-you-cant-see/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 21:25:26 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=529</guid>
		<description><![CDATA[Whenever I hear the term, &#8220;UX,&#8221; I immediately think of graphic designers, artists and folks who focus on making the UI of your application beautiful.  Nine times out of ten, this is the appropriate connection to make.  Great UX folks &#8230; <a href="http://robtiffany.com/the-important-user-experience-ux-you-cant-see/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Whenever I hear the term, &#8220;UX,&#8221; I immediately think of graphic designers, artists and folks who focus on making the UI of your application beautiful.  Nine times out of ten, this is the appropriate connection to make.  Great UX folks at Microsoft came together to make Windows Phone 7 the most visually-appealing smartphone on the market and that&#8217;s a good thing.  Lucky for me, great UX folks come to my rescue all the time because while I can build functional and usable client applications that solve users problems, my stuff isn&#8217;t that pretty.  Gotta love Expression Blend and the people who can use it to transform your app!</p>
<p>There&#8217;s lots of folks out there that think they don&#8217;t have an actual connection to the end user because they develop on-premise and cloud server APIs.  You know who I&#8217;m talking about.  Server developers who are building Web Services using WCF to expose functionality to be consumed by clients.  Web developers that are creating dynamic ASP.NET web pages that make AJAX requests.  Well, I&#8217;m one of those people too. </p>
<p>Just because you don&#8217;t build client UI&#8217;s that people can see and touch, doesn&#8217;t mean you don&#8217;t have an important impact on UX.</p>
<p>Once a user gets past the &#8220;skin-deep&#8221; beauty of the UI you typically think of, they&#8217;re often more concerned about accomplishing the task that the mobile app was designed for.  If a user taps on a button and has to wait over a minute to retrieve and display the data they&#8217;re requesting, it&#8217;s fair to say that they just had a poor user experience. </p>
<p style="text-align: center;"><a href="http://robtiffany.com/wp-content/uploads/2011/02/CellTower.jpg"><img class="aligncenter size-full wp-image-540" title="Cellular Tower" src="http://robtiffany.com/wp-content/uploads/2011/02/CellTower.jpg" alt="Cellular Tower" width="280" height="412" /></a></p>
<p>In our new world where wirelessly-connected smartphones and tablets rule the day, a number of factors that you may not have thought of, come into play that impact user experience.  After the user clicks the button, and before data is retrieved, quite a few steps are taken through a very long path:</p>
<ol>
<li>Your Request is transmitted from the device to the nearest cell tower while competing for bandwidth with hundreds or thousands of other nearby mobile devices all doing the same thing.  Oh, and those 3G and psuedo-4G speeds you read about are only achieved in perfect conditions with a limited number of wireless devices connected at any given time.</li>
<li>Your Request travels down the tower to the base station.</li>
<li>Your Request travels from base station to the mobile operator&#8217;s backhaul network where it competes with millions of other requests for bandwidth across fiber and other types of circuits.  Keep in mind that despite providing fast wireless speeds in perfect conditions, the amount of bandwidth in the various mobile operators backhaul networks varies widely.</li>
<li>Your Request jumps on to the public Internet and starts hopping through routers.</li>
<li>Your Request hits the outer firewall of the Domain you&#8217;re trying to reach.</li>
<li>Your Request might hit a reverse proxy.</li>
<li>Your Request might go through a back firewall as it leaves the DMZ to enter a corporate network.</li>
<li>Your Request finally gets to the intended server, and depending on the amount of traffic it&#8217;s experiencing, it will wait in an invisible queue created by the server operating system until it gets processed.</li>
<li>Your Response travels back through all those same hoops to get back to your wireless, mobile device.</li>
</ol>
<p>Wow, I&#8217;m already tired just thinking about that!</p>
<p>So it should be clear that despite the great convenience provided by wireless data networks, there are a lot of hoops built into the system that work against you to diminish the user experience.  Doctors take an oath to &#8220;do no harm,&#8221; and I think server developers should take that oath to heart.  You have a lot of options to consider to make this wireless journey as fast as possible in order to put a smile on the user&#8217;s face.  Besides fast servers, lots of processor cores, fast SANs, caching, queuing, scaling out, data sharding, using the best SQL query plan, using faster code algorithms and such, I want you to optimize the stuff that&#8217;s actually going over the wireless network.  I want to make sure you &#8220;do no harm,&#8221; and that means not using fat, slow transports and wire protocols to move your data between devices and servers.</p>
<p>If you&#8217;ve been to my Tech Ed sessions or read past blog posts from me, you know that speed and efficiency mean a lot to me.  In the past, I&#8217;ve demonstrated 4 different ways to return a list of 8 delivery drivers from SQL Azure.  Depending on the choice the server developer made, the resulting user experience could be bad or good.</p>
<ol>
<li>Worst:  Using OData with all it&#8217;s helpful metadata, the list of drivers used 8.54 kb of data.</li>
<li>Not as bad:  Using SOAP + DataSets, the list of drivers used 3 kb of data.</li>
<li>Much better:  Using REST + XML, the list shrank to 1.24 kb of data.</li>
<li>Best:  Using REST + JSON, the list dropped all the way down to 639 bytes.</li>
</ol>
<p>Each one of the examples above returned the data my user was asking for, but they diverged in how much bandwidth they ate along the way.  Guess what happens if you take advantage of the built-in gzip + deflate compression capabilities found in IIS 7?  Through the use of the URL Rewrite Module, tweaks to your web.config file, and specifying an Accept-Encoding header like <a title="Compression" href="http://nicksnettravels.builttoroam.com/post/2010/08/27/Windows-Phone-7-and-Compression-using-Accept-Encoding-Header.aspx" target="_blank">Nick Randolph </a>figured out, you can shrink the 639 bytes to a fraction of that size.  Now we&#8217;re talking great user experience here!</p>
<p>Now you&#8217;re on the right track with efficient, compressed, REST + JSON Web Services, so let&#8217;s move on to the mobile web. </p>
<p>Those giant, flashy websites you&#8217;ve been building since the 90&#8242;s aren&#8217;t going to cut it on mobile devices.  It doesn&#8217;t matter that your iPhone or Windows Phone 7 browser can render the Wall Street Journal in all its glory.  It&#8217;s not a good user experience.  Have you ever heard the phrase, &#8220;just because you can do something, doesn&#8217;t mean you should do that thing?&#8221;  Just because my mobile browser can flawlessly render the New York Times, doesn&#8217;t mean my user is interested in waiting till the next ice age of it to download and fully render.  Oh, and then you have to pinch and zoom to actually find anything that your eyes can read.  Do your users a favor and view my<a title="Mobile Web" href="http://www.msteched.com/2010/Europe/WPH309" target="_blank"> Tech Ed Europe session on the mobile web </a>and download the <a title="Mobile Web Flash Cards" href="http://www.w3.org/2010/09/MWABP/" target="_blank">mobile web best practices cards </a>to build web sites for small screens and slow wireless networks with lots of latency.</p>
<p>Mobile web sites should be displayed in a single column, heavy on text, light on pictures and graphics, and weigh-in at under 20 kb in size.  Yes, I just said under 20 kb.  Just in case you&#8217;ve heard otherwise, the secret to a successful mobile web site is not HTML 5.  Remember, the mobile web is all about reaching as many users as possible with your site or web application.  I&#8217;ll have more to say about this in my forthcoming book on the subject.</p>
<p>So what&#8217;s the big takeaway here?</p>
<p>Cloud and on-premise server developers have a big role to play in UX even if you can&#8217;t always see what they&#8217;re doing!</p>
<p>Keep coding,</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/the-important-user-experience-ux-you-cant-see/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL Server Compact 4.0 Lands on the Web</title>
		<link>http://robtiffany.com/sql-server-compact-4-0-lands-on-the-web/</link>
		<comments>http://robtiffany.com/sql-server-compact-4-0-lands-on-the-web/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 06:31:33 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[.NET Compact Framework]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Remote Data Access]]></category>
		<category><![CDATA[SQL CE]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Sync Framework]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows CE]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Windows phones]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=486</guid>
		<description><![CDATA[With the new version 4.0, the little-database-that-could has grown up into a powerful server database ready to take on the web. <a href="http://robtiffany.com/sql-server-compact-4-0-lands-on-the-web/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A decade has passed since I first started using SQL CE on my Compaq iPAQ.  What started as a great upgrade to Pocket Access turned into the ultimate embedded database for Windows CE, the Pocket PC, Windows Mobile and Windows Phones.  The one-two punch of Outlook Mobile synchronizing email with Exchange and SQL Server Compact synchronizing data with SQL Server helped set the mobile enterprise on fire.  In 2005, version 3.0 supported Windows Tablets and progressive enhancements to the code base led to full Windows support on both x86 and x64 platforms.  With the new version 4.0, the little-database-that-could has grown up into a powerful server database ready to take on the web. </p>
<p>We&#8217;ve come a long way and you&#8217;re probably wondering what qualifies this new embedded database to take on the Internet:</p>
<ul>
<li>Native support for x64 Windows Servers</li>
<li>Virtual memory usage has been optimized to ensure the database can support up to 256 open connections &#8211; (Are you actually using 256 pooled connections with your &#8220;Big&#8221; database today?)</li>
<li>Supports databases up to 4 GB in size &#8211; (Feel free to implement your own data sharding scheme<a href="http://robtiffany.com/wp-content/uploads/2011/01/sqlserver_sql_server_2008_logo.png"><img class="alignright size-medium wp-image-496" title="SQL Server Compact" src="http://robtiffany.com/wp-content/uploads/2011/01/sqlserver_sql_server_2008_logo-300x246.png" alt="SQL Server Compact" width="180" height="148" /></a>)</li>
<li>Developed, stress-tested, and tuned to support ASP.NET web applications</li>
<li>Avoids the interprocess communications performance hit by running in-process with your web application</li>
<li>Row-level locking to boost concurrency</li>
<li>Step up to Government + Military grade security SHA2 algorithm to secure data with FIPS compliance</li>
<li>Enhanced data reliability via true atomicity, consistency, isolation, and durability (ACID) support</li>
<li>Transaction support to commit and roll back grouped changes</li>
<li>Full referential integrity with cascading deletes and updates</li>
<li>Support ADO.NET Entity Framework 4 &#8211; (Do I hear WCF Data Services?)</li>
<li>Paging queries are supported via T-SQL syntax to only return the data you actually need</li>
</ul>
<p>Wow, that&#8217;s quite a list!  SQL Server Compact 4.0 databases are easily developed using the new WebMatrix IDE or through Visual Studio 2010 SP1.  I&#8217;m loving the new ASP.NET Web Pages.  It reminds me of the good old days of building web applications with Classic ASP back in the 90&#8242;s with Visual InterDev and Homesite.</p>
<p>What about Mobility?</p>
<p>Since SQL Server Compact owes its heritage to mobile and embedded versions of Windows, you might be wanting to know what our story is there.  The good news is that you can build and deploy v4.0 databases on Windows XP, Windows Vista, and Windows 7.  If you want to implement an occasionally-connected solution that utilizes the Sync Framework, Remote Data Access (RDA), or Merge Replication, you&#8217;ll need to stick with SQL Server Compact 3.5 SP2.  Time and resource-constraints prevented the Compact team from enabling these features.  Luckily, single-user WPF/WinForms database applications running on Windows Slates, laptops and Windows Embedded Handheld devices will work just fine with the v3.5 SP2 runtime.  Get a jumpstart with this by pickup up &#8220;Enterprise Data Synchronization with Microsoft SQL Server 2008 and SQL Server Compact 3.5 Mobile Merge Replication&#8221; at   <a href="http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1281715114&amp;sr=1-1">http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1281715114&amp;sr=1-1</a> to start building those MEAP solutions.</p>
<p>With the tidal wave of Windows Slates hitting the market, a secure, powerful mobile database that allows users to work offline and syncs with SQL Server is definitely going to be a hot item!</p>
<p>So run, don&#8217;t walk to the Microsoft Download site to download the Next-Gen database for the web:</p>
<p><a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=033cfb76-5382-44fb-bc7e-b3c8174832e2">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=033cfb76-5382-44fb-bc7e-b3c8174832e2</a></p>
<p>If you need to support occasionally-connected mobile applications with sync capabilities on muliple Windows platforms, download SQL Server Compact 3.5 SP2:</p>
<p><a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e497988a-c93a-404c-b161-3a0b323dce24">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e497988a-c93a-404c-b161-3a0b323dce24</a></p>
<p>Keep Syncing,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/sql-server-compact-4-0-lands-on-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing Windows Phone 7 Web Applications with WebMatrix Tech Ed Video</title>
		<link>http://robtiffany.com/developing-windows-phone-7-web-applications-with-webmatrix-tech-ed-video/</link>
		<comments>http://robtiffany.com/developing-windows-phone-7-web-applications-with-webmatrix-tech-ed-video/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 15:03:23 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Windows Phone 7 Developer Tools]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[IIS Express]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=385</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object class="player" width="645" height="363" type="application/x-silverlight-2" data="data:application/x-silverlight-2,"><param value="http://www.msteched.com/ClientBin/players/VideoPlayer2009_03_27.xap" name="source" /><param value="m=http://ecn.channel9.msdn.com/o9/te/Europe/2010/wmv/wph309.wmv,thumbnail=http://www.msteched.com/Skins/TechEdOnline/Styles/images/DefaultPlayerBackground.png,autohide=true,showembed=true" name="initParams" /><param value="#00000000" name="background" /><param name="minRuntimeVersion" value="3.0.50106.0" /><param name="windowless" value="true" /><param name="enableGPUAcceleration" value="true" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&#038;v=3.0.50106.0" style="text-decoration:none"><br />
	  <img src="http://www.msteched.com/Skins/TechEdOnline/Styles/images/NoSilverlight.jpg" alt="Get Microsoft Silverlight" style="border-style:none"/><br />
  </a><br />
</object></p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/developing-windows-phone-7-web-applications-with-webmatrix-tech-ed-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://ecn.channel9.msdn.com/o9/te/Europe/2010/wmv/wph309.wmv" length="76103415" type="video/asf" />
		</item>
		<item>
		<title>Build the Mobile Web with WebMatrix</title>
		<link>http://robtiffany.com/build-the-mobile-web-with-webmatrix/</link>
		<comments>http://robtiffany.com/build-the-mobile-web-with-webmatrix/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 20:40:55 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Internet Information Services]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Razor]]></category>
		<category><![CDATA[SQL CE]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SQLCE]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WebForms]]></category>
		<category><![CDATA[Webkit]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[webOS]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[XHTML Basic]]></category>

		<guid isPermaLink="false">http://robtiffany.com/mobile-web/build-the-mobile-web-with-webmatrix</guid>
		<description><![CDATA[Build mobile web sites that adhere to W3C Mobile Web Best Practices using the new WebMatix web development tool.&#160; This tool introduces simple-to-use ASP.NET Web Pages which don’t follow the MVC pattern nor do they include server controls like WebForms.&#160; &#8230; <a href="http://robtiffany.com/build-the-mobile-web-with-webmatrix/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Build mobile web sites that adhere to <a href="http://www.w3.org/TR/2008/REC-mobile-bp-20080729/" target="_blank">W3C Mobile Web Best Practices</a> using the new <a href="http://www.microsoft.com/web/webmatrix/" target="_blank">WebMatix</a> web development tool.&#160; This tool introduces simple-to-use ASP.NET Web Pages which don’t follow the MVC pattern nor do they include server controls like WebForms.&#160; It also introduces the “Razor” templating engine and a model where you have HTML and inline code where needed.&#160; This way to building sites is easy and flexible and takes me back to the golden age of Microsoft ASP web development in the late ‘90’s.</p>
<p>Our favorite mobile database, <a href="http://robtiffany.com/sql-server-compact/here-comes-sql-server-compact-4-0" target="_blank">SQL Server Compact 4.0</a> finds it&#8217;s way to the web with this tool providing a simple way to give your mobile web site a database.&#160; It’s been beefed up and tuned for the stress of providing data services to Internet and supports 256 concurrent connections.&#160; Since it’s a file-based database, you just copy it along with your web pages to your on-premise server, web hosting provider or Azure.</p>
<p>Last but not least, you get <a href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx" target="_blank">IIS Express</a> which is a welcome replacement for the Cassini development web server currently used by Visual Studio.&#160; This gives all developers the power of IIS 7.x without needing Administrator access to their box, even if they’re running on Windows XP.</p>
<p>The lightweight, inline-code nature of developing with WebMatrix makes it easy to build low-bandwidth sites that follow <a href="http://www.w3.org/TR/2008/REC-xhtml-basic-20080729/" target="_blank">XHTML Basic 1.1</a> recommendations so you can target any mobile web browser.&#160; From there, it’s up to you to determine if you want to support more advanced features found in mobile browsers like IE Mobile, Opera, or Webkit (iPhone, Android, webOS or Blackberry).</p>
<p>- Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/build-the-mobile-web-with-webmatrix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Merge Replication Performance and Scalability Cheat Sheet</title>
		<link>http://robtiffany.com/mobile-merge-replication-performance-and-scalability-cheat-sheet/</link>
		<comments>http://robtiffany.com/mobile-merge-replication-performance-and-scalability-cheat-sheet/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 21:06:00 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Sync]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Distributor]]></category>
		<category><![CDATA[Enterprise Data Synchronization]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Internet Information Services]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[Mobile Middleware]]></category>
		<category><![CDATA[Publication]]></category>
		<category><![CDATA[Publisher]]></category>
		<category><![CDATA[SQL CE]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Subscriber]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows phone]]></category>
		<category><![CDATA[Windows Vista]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://robtiffany.com/sql-server-compact/meap-mobile-merge-replication-performance-and-scalability-cheat-sheet</guid>
		<description><![CDATA[If your Mobile Enterprise Application Platform (MEAP) is using SQL Server Merge Replication to provide the mobile middleware and reliable wireless wire protocol for SQL Server Compact (SSCE) running on Windows Mobile 5/6.x devices + Windows XP/Vista/7 laptops, desktops and tablets; below is a guide to help you build the fastest, most scalable systems: <a href="http://robtiffany.com/mobile-merge-replication-performance-and-scalability-cheat-sheet/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If your Mobile Enterprise Application Platform (MEAP) is using SQL Server <em><strong>Merge Replication</strong></em> to provide the mobile middleware and reliable wireless wire protocol for SQL Server Compact (SSCE) running on Windows Mobile and Windows Embedded Handheld devices + Windows XP/Vista/7 tablets, laptops, desktops, slates, and netbooks; below is a guide to help you build the fastest, most scalable systems:</p>
<h2>Active Directory</h2>
<ul>
<li>Since your clients will be passing in their Domain\username + password credentials when they sync, both IIS and SQL Server will make auth requests of the Domain Controller. Ensure that you have at least a primary and backup Domain Controller, that the NTDS.dit disk drives are big enough to handle the creation of a large number of new AD DS objects (mobile users and groups), and that your servers have enough RAM to cache all those objects in memory.</li>
</ul>
<h2>Database Schema</h2>
<ul>
<li>Ensure your schema is sufficiently de-normalized so that you never have to perform more than a 4-way JOIN across tables. This affects server-side JOIN filters as well as SSCE performance.</li>
<li>To ensure uniqueness across all nodes participating in the sync infrastructure, use GUIDs for your primary keys so that SQL Server doesn’t have to deal with the overhead of managing Identity ranges. Make sure to mark your GUIDs as <strong>ROWGUIDCOL</strong> for that table so that Merge won’t try to add an additional <strong>Uniqueidentifier</strong> column to the table.  Don&#8217;t create clustered indexes when using GUIDs as primary keys because they will suffer horrible fragmentation that will rapidly degrade performance.  Just use a normal index.</li>
<li>Create clustered indexes for your primary keys when using Indentity columns, Datetime, or other natural keys.  Ensure that every column in every table that participates in a WHERE clause is indexed.</li>
</ul>
<h2>Distributor</h2>
<ul>
<li>If your network connection is fast and reliable like Wi-Fi or Ethernet, your SSCE client has more than 32 MB of free RAM, and SQL Server isn&#8217;t experiencing any deadlocks due to contention with ETL operations or too many concurrent Merge Agents, create a new Merge Agent Profile based on the <strong>High Volume Server-to-Server Profile</strong> so that SQL Server will perform more work per round-trip and speed up your synchronizations.</li>
<li>If you&#8217;re using a 2G/3G Wireless Wide Area Network connection, create a Merge Agent Profile based on the <strong>Default Profile</strong> so that SQL Server will perform less work and use fewer threads per round-trip during synchronization than the <strong>High Volume Server to Server Profile</strong> which will help to reduce server locking contention and perform less work per round trip which will make your synchronizations more likely to succeed.</li>
<li>In order to prevent SQL Server from performing Metadata Cleanup every time a Subscriber synchronizes, set the <strong>–MetadataRetentionCleanup</strong> parameter to <strong>0</strong>.</li>
<li>As SQL Server has to scale up to handle a higher number of concurrent users in the future, locking contention will increase due to more Merge Agents trying to perform work at the same time.  When this happens, adjust the parameters of the <strong>Default Profile</strong> so that both <strong> –SrcThreads</strong> and <strong>–DestThreads</strong> are equal to <strong>1</strong>.</li>
</ul>
<h2>Publication</h2>
<ul>
<li>When defining the Articles you’re going to sync, only check the minimum tables and columns needed by the Subscriber to successfully perform its work.</li>
<li>For Lookup/Reference tables that aren’t modified by the Subscriber, mark those as <strong>Download-only</strong> to prevent change-tracking metadata from being sent to the Subscriber.</li>
<li>Despite the fact the <strong>column-level</strong> tracking sends less data over the air, stick with <strong>row-level</strong> tracking so SQL Server won’t have to do as much work to track the changes.</li>
<li>Use the default conflict resolver where the “Server wins” unless you absolutely need a different manner of picking a winner during a conflict.</li>
<li>Use Static Filters to reduce the amount of server data going out to all Subscribers.</li>
<li>Make limited use of Parameterized Filters which are designed to reduce and further specify the subset of data going out to a particular Subscriber based on a HOST_NAME() which creates data partitions.  This powerful feature slows performance and reduces scalability with each additional filter, so it must be used sparingly.</li>
<li><em><strong>Keep filter queries simple</strong></em> and don’t use IN clauses, sub-selects or any kind of circular logic.</li>
<li>Strive to always create &#8220;well-partitioned&#8221; Articles where all changes that are uploaded/downloaded are mapped to only the single partition ID for best performance and scalability.
<ul>
<li>When using Parameterized Filters, always create non-overlapping data partitions where each row from a filtered table only goes to a single Subscriber instead of more than one which will avoid the use of certain Merge metadata tables.</li>
<li>Each Article in this scenario can only be pubished to a single Publication</li>
<li>A Subscriber cannot insert rows that do not belong to its partition ID.</li>
<li>A Subscriber cannot update columns that are involved in filtering.</li>
<li>In a join filter hierarchy, a regular article cannot be the parent of a &#8220;well-partitioned&#8221; article.</li>
<li>The join filter in which a well-partitioned article is the child must have the join_unique_key set to a value of 1 which relates to the <strong>Unique key</strong> check box of the Add Join dialog.  This means there&#8217;s a one-to-one or one-to-many relationship with the foreign key.</li>
<li>Each &#8220;well-partitioned&#8221; Article can have only one subset or join filter. The article can have a subset filter and be the parent of a join filter, but cannot have a subset filter and be the child of a join filter.</li>
</ul>
</li>
<li>Never extend a filter out to more than 4 joined tables.</li>
<li>Do not filter tables that are primarily lookup/reference tables, small tables, and tables with data that does not change.</li>
<li>Schedule the Snapshot Agent to run once per day to create an unfiltered schema Snapshot.</li>
<li>Set your Subscriptions to expire as soon as possible to keep the amount change-tracking metadata SQL Server has to manage to an absolute minimum. Normally, set the value to 2 to accommodate 3-day weekends since 24 hours are automatically added to the time to account for multiple time zones. If server-side change tracking isn’t needed and Subscribers are pulling down a new database every day and aren’t uploading data, then set the expiration value to 1.</li>
<li>Set <strong>Allow parameterized filters</strong> equal to True.</li>
<li>Set <strong>Validate Subscribers</strong> equal to HOST_NAME().</li>
<li>Set <strong>Precompute partitions</strong> equal to True to allow SQL Server to optimize synchronization by computing in advance which data rows belong in which partitions.</li>
<li>Set <strong>Optimize synchronization</strong> equal to False if <strong>Precompute partitions</strong> is equal to True.  Otherwise set it to True to optimize filtered Subscriptions by storing more metadata at the Publisher.</li>
<li>Set <strong>Limit concurrent processes</strong> equal to True.</li>
<li>Set <strong>Maximum concurrent processes</strong> equal to the number of SQL Server processor cores.  If exceesive locking contention occurs, reduce the number of concurrent processes until the problem is fixed.</li>
<li>Set <strong>Replicate schema changes</strong> equal to True.</li>
<li>Check <strong>Automatically define a partition and generate a snapshot if needed when a new Subscriber tries to synchronize</strong>. This will reduce Initialization times since SQL Server creates and applies snapshots using the fast BCP utility instead of a series of slower SELECT and INSERT statements.</li>
<li>Add data partitions based on unique HOST_NAMEs and schedule the Snapshot Agent to create those filtered Snapshots nightly or on the weekend so they’ll be built using the fast BCP utility and waiting for new Subscribers to download in the morning.</li>
<li>Ensure that SQL Server has 1 processor core and 2 GB of RAM for every 100 concurrent Subscribers utilizing bi-directional sync. Add 1 core and 2 GB of RAM server for every additional 100 concurrent Subscribers you want to add to the system.  Never add more Subscribers and/or IIS servers without also adding new cores and RAM to the Publisher.</li>
<li>Turn off <strong>Hyperthreading</strong> in the BIOS of the SQL Server as it has been known to degrade SQL Server performance.</li>
<li>Do not add your own user-defined triggers to tables on a Published database since Merge places 3 triggers on each table already.</li>
<li>Add one or more <strong>Filegroups</strong> to your database to contain multiple, secondary database files spread out across many physical disks.</li>
<li>Limit use of large object types such as text, ntext, image, varchar(max), nvarchar(max) or varbinary(max) as they require a significant memory allocation and will negatively impact performance.</li>
<li>Set SQL Servers’s minimum and maximum memory usage to within 2 GB of total system memory so it doesn’t have to allocate more memory on-demand.</li>
<li>Always use SQL Server 2008 R2 and Windows Server 2008 R2 since they work better together because they take advantage of the next generation networking stack which dramatically increases network throughput. They can also scale up as high as 256 cores.</li>
<li>Due to how Merge Replication tracks changes with triggers, Merge Agents, and tracking tables, it will create locking contention withDML/ ETL operations.  This contention degrades server performance which negatively impacts sync times with devices.  This contention should be mitgated by performing large INSERT/UPDATE/DELETE DML/ETL operations during a nightly maintenance window when Subscribers aren’t synchronizing.</li>
<li>Since Published databases result in slower DML/ETL operations, perform changes in bulk by using XML Stored Procedures to boost performance.</li>
<li>To improve the performance of pre-computed partitions when DML/ETL operations result in lots of data changes, ensure that changes to a Parent table in a join filter are made before corresponding changes in the child tables.  This means that when DML/ETL operations are pushing new data into SQL Server, they must add master data to the parent filter table first, and then add detail data to all the related child tables second, in order for that data to be pre-computed and optimized for sync.</li>
<li>Create filter partitions based on things that don’t change every day.  Partitions that are added and deleted from SQL Server and Subscribers that move from one partition to another is very disruptive to the performance of Merge Replication.</li>
<li>Always perform initializations and re-initializations over Wi-Fi or Ethernet when the device is docked because this is the slowest operation where the entire database must be downloaded instead of just deltas.  To determine rough estimates for initialization, multiply the size of the resulting SSCE .sdf file <strong>x</strong> the bandwidth speed available to the device.  A file copy over the expected network will also yield estimates for mininum sync times.  These times don&#8217;t include the work SQL Server and IIS must perform to provide the data or data INSERT times on SSCE.</li>
<li>If your SQL Server Publisher hits a saturation point with too many concurrent mobile Subscribers, you can scale it out creating a Server/Push Republishing hierarchy. Put the primary SQL Server Publisher at the top of the pyramid and have two or more SQL Servers subscribe to it. These can be unfiltered Subscriptions where all SQL Servers get the same data or the Subscribers can filter their data feeds by region for example. Then have the Subscribing SQL Servers Publish their Subscription for consumption by mobile SSCE clients.</li>
<li>Create just a single Publication.</li>
</ul>
<h2>Internet Information Services</h2>
<ul>
<li>Use the x64 version of the <strong>SQL Server Compact 3.5 SP2 Server Tools</strong> with Windows Server 2008 R2 running inside IIS 7.5.</li>
<li>Use a single Server Agent in a single Virtual Directory.</li>
<li>Ensure the IIS Virtual Directory where the Server Agent resides is on a fast solid-state drive that’s separate from the disk where Windows Server is installed to better support file I/O.</li>
<li>Use a low-end server with 2 processor cores and 2 GB of RAM to support 400 concurrent Subscribers queued at the same time.</li>
<li>Set the MAX<strong>_THREADS_PER_POOL </strong>Server Agent registry key equal to 2 to match the IIS processor cores and RAM. Do not set this value to a higher number than the number of cores.</li>
<li>Set the <strong>MAX_PENDING_REQUEST</strong> Server Agent registry key equal to 400 which means the Server Agent will queue up to 400 concurrent Subscribers waiting for one of the 2 worker threads to become available to sync with SQL Server.</li>
<li>Set the <strong>IIS Connection Limits</strong> property to 400 to prevent an unlimited number of connections reaching the Server Agent.</li>
<li>Add a new load-balanced IIS server for every additional 400 concurrent Subscribers you want to add to the system.</li>
</ul>
<h2>Subscriber</h2>
<ul>
<li>Use the appropriate x64, x86 or ARM version of SQL Server Compact 3.5 SP2 to take advantage of the <strong>PostSyncCleanup</strong> property of the <strong>SqlCeReplication</strong> object that can reduce the time it takes to perform an initial synchronization. Set the <strong>PostSyncCleanup</strong> property equal to 3 where neither <strong>UpdateStats</strong> nor <strong>CleanByRetention</strong> are performed.</li>
<li>Increase the <strong>Max Buffer Size</strong> connection string parameter to <strong>1024</strong> on a phone and <strong>4096</strong> on a PC to boost both replication and SQL query processing performance. If you have more RAM available, set those values even higher until you reach the law of diminishing returns.</li>
<li>Keep your SSCE database compact and fast by setting the <strong>Autoshrink Threshold</strong> connection string parameter to 10 so it starts reclaiming empty data pages once the database has become 10% fragmented.</li>
<li>Replication performance testing must be performed using actual PDAs to observe how available RAM, storage space and CPU speed affect moving data into the device’s memory area and how quickly this data is inserted into the SSCE database tables.  Since the SSCE database doubles in size during replication, the device must have enough storage available or the operation will fail.  Having plenty of available RAM is important so that SSCE can utilize its memory buffer to complete a Merge Replication operation more quickly.  With plenty of available RAM and storage, a fast CPU will make all operations faster.</li>
<li>The PDA must have at least an extra 32 MB of available free RAM that can be used by the .NET Compact Framework (NETCF) application.  If additional applications are running on the device at the same time, even more RAM is needed.  If a NETCF application has insufficient RAM is will discard its compiled code and run in interpreted mode which will slow the application down.  If the NETCF app is still under memory pressure after discarding compiled code, Windows Mobile will first tell the application to return free memory to the operating system and then will terminate the app if needed.</li>
<li>Set the <strong>CompressionLevel</strong> property of the <strong>SqlCeReplication </strong>object to 0 for fast connections and increment it from 1 to 6 on slower connections like GPRS to increase speed and reduce bandwidth consumption.</li>
<li>Tune the <strong>ConnectionRetryTimeout</strong>, <strong>ConnectTimeout</strong>, <strong>ReceiveTimeout</strong> and <strong>SendTimeout</strong> properties of the <strong>SqlCeReplication</strong> object based on expected bandwidth speeds:</li>
</ul>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="160"><strong>Property</strong></td>
<td valign="top" width="160"><strong>High Bandwidth</strong></td>
<td valign="top" width="160"><strong>Medium Bandwidth</strong></td>
<td valign="top" width="160"><strong>Low Bandwidth</strong></td>
</tr>
<tr>
<td valign="top" width="160">ConnectionRetryTimeout</td>
<td valign="top" width="160">30</td>
<td valign="top" width="160">60</td>
<td valign="top" width="160">120</td>
</tr>
<tr>
<td valign="top" width="160">ConnectTimeout</td>
<td valign="top" width="160">3000</td>
<td valign="top" width="160">6000</td>
<td valign="top" width="160">12000</td>
</tr>
<tr>
<td valign="top" width="160">ReceiveTimeout</td>
<td valign="top" width="160">1000</td>
<td valign="top" width="160">3000</td>
<td valign="top" width="160">6000</td>
</tr>
<tr>
<td valign="top" width="160">SendTimeout</td>
<td valign="top" width="160">1000</td>
<td valign="top" width="160">3000</td>
<td valign="top" width="160">6000</td>
</tr>
</tbody>
</table>
<ul>
<li>You can decrease potentially slow SSCE file I/O by adjusting the Flush Interval connection string parameter to write committed transactions to disk less often than the default of every 10 seconds.  Test longer intervals between flushes like 20 or 30 seconds. Keep in mind that these transactions can be lost if the disk or system fails before flushing occurs so be careful.</li>
<li>When replicating data that has been captured in the field by the device, perform Upload-only syncs to shorten the duration.</li>
</ul>
<h2>Storage</h2>
<ul>
<li>Use a Fibre Channel SAN with 15k RPM or solid-state disks for best I/O performance.</li>
<li>Databases should reside on a RAID 10, unshared LUN comprised of at least 6 disks.</li>
<li>Database logs should reside on a RAID 10, unshared LUN comprised of at least 6 disks.</li>
<li>Tempdb should reside on a RAID 10, unshared LUN comprised of at least 6 disks.</li>
<li>The Tempdb log should reside on a RAID 10, unshared LUN comprised of at least 6 disks.</li>
<li>The Snapshot share should reside on a RAID 10, unshared LUN comprised of at least 6 disks.  This disk array should be large enough to accommodate a growing number of filtered Snapshots. Snapshot folders for Subscribers that no longer use the system must be manually deleted.</li>
<li>Merge Replication metadata tables should reside on a RAID 10, unshared LUN comprised of at least 6 disks.</li>
<li>Increase your Host Bus Adapter (HBA) queue depths to 64.</li>
<li>Your Publication database should be broken up into half the number of files as the SQL Server has processor cores. Each file must be the same size.</li>
<li>Tempdb should be pre-sized with an auto-growth increment of 10%. It should be broken up into the same number of files as the SQL Server has processor cores. Each file must be the same size.</li>
</ul>
<h2>High Availability</h2>
<ul>
<li>Load-balance the IIS servers to scale them out. Enable Server Affinity (stickiness) since the <strong>Replication Session Control Blocks</strong> that transmit data between the Server Agent and SSCE are stateful. Test to ensure that your load-balancer is actually sending equal amounts of Subscriber sync traffic to each IIS server.  Some load-balancers can erroneously send all traffic to a single IIS server if not properly configured.</li>
<li>Implement Windows Clustering so that SQL Server can failover to a second node.</li>
<li>Using SQL Server Mirroring so that your Published database will failover to a standby server.</li>
<li>Make a second SQL Server into an unfiltered Subscriber to your Publisher so that it can take over Merge Replication duties for mobile clients as a Republisher if the primary SQL Server fails. SSCE clients would just have to reinitialize their Subscriptions to begin synchronizing with the new Republisher.</li>
</ul>
<h2>Ongoing Maintenance</h2>
<ul>
<li>Use the Replication Monitor to have a real-time view of the synchronization performance of all your Subscribers.</li>
<li>Use the web-based SQL Server Compact Server Agent Statistics and Diagnostics tools to monitor the health and activity of the Server Agent running on IIS.</li>
<li>Create a SQL Job to execute the <strong>sp_MSmakegeneration</strong> stored procedure after large DML operations. Regular execution after INSERTING/UPDATING/DELETING data from either DML/ETL operations or after receiving lots of changes from Subscribers will maintain subsequent sync performance. Executing this stored procedure from the server-side is preferable to having it executed as a result of a Subscriber sync which would block all other Subscribers.</li>
<li>During your nightly maintenance window, rebuild the indexes and update the statistics of the following Merge Replication metadata tables:
<ul>
<li><strong>MSmerge_contents</strong></li>
<li><strong>MSmerge_tombstone</strong></li>
<li><strong>MSmerge_genhistory</strong></li>
<li><strong>MSmerge_current_partition_mappings</strong></li>
<li><strong>MSmerge_past_partition_mappings</strong></li>
<li><strong>MSmerge_generation_partition_mappings</strong></li>
</ul>
</li>
<li>If you notice performance degradation during the day due to a large number of Subscribers making large changes to the database, you can updates the statistics (with fullscan) of the Merge Replication metadata tables more frequently throughout the day to force stored proc recompiles to get a better query plan.
<ul>
<li>UPDATE STATISTICS MSmerge_generation_partition_mappings WITH FULLSCAN</li>
<li>UPDATE STATISTICS MSmerge_genhistory WITH FULLSCAN</li>
</ul>
</li>
<li>Rebuild/defrag indexes on your database tables and Merge Replication metadata tables throughout the day to reduce locking contention and maintain performance.</li>
<li>Use the Missing Indexes feature of SQL Server to tell you which indexes you could add that would give your system a performance boost. Do not add recommended indexes to Merge system tables.</li>
<li>Use the Database Engine Tuning Advisor to give you comprehensive performance tuning recommendations that cover every aspect of SQL Server.</li>
<li>Monitor the performance of the following counters:
<ul>
<li><strong>Processor Object: % Processor Time: </strong>This counter represents the percentage of processor utilization. A value over 80% is a CPU bottleneck.</li>
<li><strong>System Object: Processor Queue Length: </strong>This counter represents the number of threads that are delayed in the processor Ready Queue and waiting to be scheduled for execution. A value over 2 is bottleneck and shows that there is more work available than the processor can handle. Remember to divide the value by the number of processor cores on your server.</li>
<li><strong>Memory Object: Available Mbytes: </strong>This counter represents the amount of physical memory available for allocation to a process or for system use. Values below 10% of total system RAM indicate that you need to add additional RAM to your server.</li>
<li><strong>PhysicalDisk Object: % Disk Time: </strong>This counter represents the percentage of time that the selected disk is busy responding to read or write requests. A value greater than 50% is an I/O bottleneck.</li>
<li><strong>PhysicalDisk Object: Average Disk Queue Length: </strong>This counter represents the average number of read/write requests that are queued on a given physical disk. If your disk queue length is greater than 2, you’ve got an I/O bottleneck with too many read/write operations waiting to be performed.</li>
<li><strong>PhysicalDisk Object: Average Disk Seconds/Read and Disk Seconds/Write: </strong>These counters represent the average time in seconds of a read or write of data to and from a disk. A value of less than 10 ms is what you’re shooting for in terms of best performance. You can get by with subpar values between 10 – 20 ms but anything above that is considered slow. Times above 50 ms represent a very serious I/O bottleneck.</li>
<li><strong>PhysicalDisk Object: Average Disk Reads/Second and Disk Writes/Second: </strong>These counters represent the rate of read and write operations against a given disk. You need to ensure that these values stay below 85% of a disk’s capacity by adding disks or reducing the load from SQL Server. Disk access times will increase exponentially when you get beyond 85% capacity.</li>
</ul>
</li>
<li>A limited number of database schema changes can be made and synchronized down to SSCE Subscribers without any code changes which makes it easier to update your system as it evolves over time.</li>
<li>Use a Merge Replication Test Harness to stress test the entire system.  The ability to simulate hundreds or thousands of concurrent synchronizing Subscribers allows you to monitor performance and the load on the system.  This is helpful in properly configuring and tuning SQL Server, IIS, and the Windows Mobile devices.  It will tell you where you’re having problems and it will let you predict how much server hardware you will need to support growing numbers of Subscribers over time.  It’s also very important to simulate worst-case scenarios that you never expect to happen.</li>
</ul>
<p>I hope this information sufficiently empowers you to take on the largest MEAP solutions that involve SQL Server Merge Replication and SQL Server Compact.  If you need a deeper dive, go check out my book on Enterprise Data Synchronization <a title="http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271964573&amp;sr=1-1" href="http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271964573&amp;sr=1-1">http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271964573&amp;sr=1-1</a> over at Amazon.  Now go build a fast and scalable solution for your company or your customers.</p>
<p>Best Regards,</p>
<p>Rob</p>
<p>P.S.  If your solution doesn&#8217;t require all the advanced features found in Merge Replication, I highly recommend you use Remote Data Access (RDA).  This is a much simpler sync technology that&#8217;s extremely fast, scalable, and easier to manage.</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/mobile-merge-replication-performance-and-scalability-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Interview with Rob @ Tech Ed Europe 2009</title>
		<link>http://robtiffany.com/interview-with-rob-tech-ed-europe-2009/</link>
		<comments>http://robtiffany.com/interview-with-rob-tech-ed-europe-2009/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 20:45:42 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Compact Framework]]></category>
		<category><![CDATA[Adapter]]></category>
		<category><![CDATA[Application Management]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Mobile Middleware]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Business Intelligence Development Studio]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows phones]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=49</guid>
		<description><![CDATA[Check out the interview I did with David Goon at Tech Ed Europe 2009 in Berlin.  I discuss Microsoft&#8217;s Mobile Enterprise Application Platform and talk about how it aligns with Gartner&#8217;s MEAP critical capabilities and how it can save money for companies. &#8230; <a href="http://robtiffany.com/interview-with-rob-tech-ed-europe-2009/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Check out the interview I did with David Goon at Tech Ed Europe 2009 in Berlin.  I discuss Microsoft&#8217;s Mobile Enterprise Application Platform and talk about how it aligns with Gartner&#8217;s MEAP critical capabilities and how it can save money for companies.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="320" height="180" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.facebook.com/v/241564376017" /><embed type="application/x-shockwave-flash" width="320" height="180" src="http://www.facebook.com/v/241564376017" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>With the tidal wave of mobile and wireless technologies sweeping across both the consumer and enterprise landscapes, I believe MEAP offerings give us a glimpse of a new standard for designing all future infrastructures.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/interview-with-rob-tech-ed-europe-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yes, Microsoft does have a Mobile Enterprise Application Platform (MEAP)</title>
		<link>http://robtiffany.com/yes-microsoft-does-have-a-mobile-enterprise-application-platform-meap/</link>
		<comments>http://robtiffany.com/yes-microsoft-does-have-a-mobile-enterprise-application-platform-meap/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 22:54:55 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[BitLocker]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Exchange Server]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[ISA Server]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Business Intelligence Development Studio]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[WCF Strore and Forward]]></category>
		<category><![CDATA[Windows CE]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows phones]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=15</guid>
		<description><![CDATA[Gartner says that the Mobile Enterprise Application Platform (MEAP) market will top $1 Billion by the end of 2010 and that more than 95% of organizations will choose MEAP instead of point solutions through 2012.  The big takeaway here is &#8230; <a href="http://robtiffany.com/yes-microsoft-does-have-a-mobile-enterprise-application-platform-meap/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="mceTemp" style="text-align: left;">Gartner says that the Mobile Enterprise Application Platform (MEAP) market will top $1 Billion by the end of 2010 and that more than 95% of organizations will choose MEAP instead of point solutions through 2012.  The big takeaway here is that companies have been building tactical mobile application silos that support only one application and now they want to save money by going with a reusable platform capable of supporting multiple applications.  Oh and along the way it needs to support multiple device and OS platforms while providing security, device management, and a single IDE to build apps and logic to integrate with back end systems.</div>
<div class="mceTemp" style="text-align: left;">Gartner has a &#8220;rule of three&#8221; that states that a MEAP offers significant advantages in three situations:</div>
<ol>
<li>When there are 3 or more mobile applications</li>
<li>When there are 3 or more targeted operating systems or platforms</li>
<li>When they involve the integration of 3 or more back-end systems</li>
</ol>
<p>Leaders in this space have included Sybase iAnywhere, Antenna, Dexterra, Syclo and Spring Wireless.  Microsoft goes from a large Mobile General Store with myriad solutions to a player in this space with a MEAP solution of our own:  <img class="aligncenter size-full wp-image-39" title="Microsoft Mobile Enterprise Application Platform" src="http://robtiffany.com/wp-content/uploads/2009/10/MEAPsm.jpg" alt="Microsoft Mobile Enterprise Application Platform" width="448" height="278" />Visual Studio is used to build the mobile logic and UI.  Merge Replication provides occasionally-connected data synchronization between SQL Server Compact on the mobile device and SQL Server in the data center.  SQL Server Business Intelligence Development Studio is used to visually create connections to back-end systems like SAP or databases like Oracle.  Data in transit is secured via SSL or VPN, data at rest is encrypted via device encryption, SQL Server Compact, BitLocker or programmatically through the Crypto API.  Integration packages that communicate with back-end systems are encrypted and digitally signed. </p>
<p>We already have the best mobile email, calendaring, and contacts product in the business where Exchange Active Sync keeps Outlook and Outlook Mobile always up to date with Exchange Server.  Server-to-device as well as peer-to-peer device notifications are facilitated through WCF Store and Forward on Exchange.  Software and patch distribution along with device settings and policy management is accompished via System Center Configuration Manager.  ISA Server provides both VPN and Reverse Proxy access to roaming applications on the Internet on any platform.</p>
<p>When you put this stack in place and resuse it for multiple mobile applications instead of going with point solutions, ROI savings increase as the need for POCs, Pilots and training are reduced and the need for extra client access licenses is eliminated.  That&#8217;s Gartner&#8217;s first requirement.  We hit Gartner&#8217;s second requirement by uniformly supporting 3 mobile operating systems in the form of Windows, Windows CE, and Windows Mobile.  Last but not least, our SQL Server Integration Services technology combined with dozens of connectors mean we can connect your mobile devices with almost any back-end package or database.</p>
<p>Yes, Microsoft does have a Mobile Enterprise Application Platform that&#8217;s already proven to scale to tens of thousands of devices and it will definitely save you time and money.</p>
<p>- Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/yes-microsoft-does-have-a-mobile-enterprise-application-platform-meap/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Enterprise Data Synchronization with Microsoft SQL Server 2008 and SQL Server Compact 3.5 Mobile Merge Replication</title>
		<link>http://robtiffany.com/enterprise-data-synchronization-with-microsoft-sql-server-2008-and-sql-server-compact-3-5-mobile-merge-replication/</link>
		<comments>http://robtiffany.com/enterprise-data-synchronization-with-microsoft-sql-server-2008-and-sql-server-compact-3-5-mobile-merge-replication/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 00:46:53 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[ISA Server]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Remote Data Access]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows phones]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=62</guid>
		<description><![CDATA[I’m happy to say that my latest book is now available on Amazon. With the world&#8217;s largest organizations rolling out tens of thousands of Windows® phones, laptops, tablets and Netbooks to empower their respective mobile workforces, the ability to create &#8230; <a href="http://robtiffany.com/enterprise-data-synchronization-with-microsoft-sql-server-2008-and-sql-server-compact-3-5-mobile-merge-replication/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I’m happy to say that my latest book is now available on <a title="Enterprise Data Synchronization" href="http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1248893911&amp;sr=1-4" target="_blank">Amazon</a>.</p>
<p>With the world&#8217;s largest organizations rolling out tens of thousands of Windows® phones, laptops, tablets and Netbooks to empower their respective mobile workforces, the ability to create mobile line of business solutions that support large numbers of users is absolutely critical. In my fourth book on mobile infrastructure and development, I show you how to take the SQL Server data you use to run your organization and make it available to all of your mobile employees.</p>
<p>Step-by-step, I’ll walk you through the process of building a secure, performant, n-tier, mobile enterprise application platform architecture designed to scale to thousands of users. You&#8217;ll also learn how to create occasionally-connected .NET applications designed to thrive in unreliable wireless conditions.</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2009/10/CoverSM.png"><img class="aligncenter size-full wp-image-82" title="CoverSM" src="http://robtiffany.com/wp-content/uploads/2009/10/CoverSM.png" alt="Enterprise Data Synchronization with Microsoft SQL Server 2008 and SQL Server Compact=" height="300" /></a></p>
<ul>
<li>Learn how to &#8220;Mobilize&#8221; your organization by making your enterprise data available to employees carrying Windows® phones, laptops, Netbooks and tablets in the field.</li>
<li>Learn how to build an N-Tier Mobile Sync infrastructure that will scale to thousands of users.</li>
<li>Learn how to create occasionally-connected .NET applications designed to thrive in unreliable wireless conditions.</li>
<li>Learn best practices in security, reliability, performance, load-balancing, reverse proxy and hardware configuration.</li>
<li>Learn how to implement this technology in real world scenarios like supply chain management, retail, sales force automation, healthcare and emergency management.</li>
</ul>
<p> </p>
<p>Keep in mind that the knowledge you gain from this book didn’t come from me dreaming this stuff up in an Ivory Tower.  It came from building some of the worlds largest and most complex data synchronization systems for the world’s largest companies.  In addition to the hands-on experience that went into this book, I’d also like to thank some of my colleagues for their invaluable contributions:</p>
<ul>
<li>Liam Cavanagh is a Senior Lead Program Manager for Microsoft’s Sync Framework and Cloud Data Services and he wrote the forward.</li>
<li>Catherine Wyatt is the Managing Editor for Hood Canal Press who made the publishing of the book possible.</li>
<li>Darren Shaffer is the CEO of Handheld Logic and he wrote the Chapter on building the Mobile Subscriber. </li>
<li>Michael Jimenez is a Mobility Architect at Microsoft and he wrote the Appendix that shows you how to create an ISA Server 2006 Reverse Proxy to publish your sync infrastructure to the Internet.</li>
</ul>
<p> </p>
<p>It’s my sincere hope that this book will encourage you to un-tether your workforce from their desktop computers and boost your organization’s agility by pushing out critical business functions to the point of activity where employees are empowered to make timely decisions and perform tasks that best serve the interests of their customers and their company.</p>
<p>This repudiation of the traditional “connected” software application model increases customer satisfaction, boosts worker efficiency, reduces “missed opportunities” and results in cost savings as “un-wired” employees get their jobs done wherever they happen to be.</p>
<p>Best Regards,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/enterprise-data-synchronization-with-microsoft-sql-server-2008-and-sql-server-compact-3-5-mobile-merge-replication/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Hidden Message Queue on your Windows phone</title>
		<link>http://robtiffany.com/the-hidden-message-queue-on-your-windows-phone/</link>
		<comments>http://robtiffany.com/the-hidden-message-queue-on-your-windows-phone/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 20:05:26 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Message Queuing]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Message Queue]]></category>
		<category><![CDATA[MSMQ]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Remote Data Access]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows phones]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=8</guid>
		<description><![CDATA[The ability to be “offline” and “occasionally-connected” is a critical component of successful mobile apps.  Wireless data networks lack complete coverage and exhibit a level of unreliability that immediately disqualify permanently-connected apps like you might see on a corporate LAN.  &#8230; <a href="http://robtiffany.com/the-hidden-message-queue-on-your-windows-phone/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The ability to be “offline” and “occasionally-connected” is a critical component of successful mobile apps.  Wireless data networks lack complete coverage and exhibit a level of unreliability that immediately disqualify permanently-connected apps like you might see on a corporate LAN.  For a mobile app to be successful, it must allow the user to keep working in the absence of a data network.  It must also be able to transparently sync data changes from the mobile client to the server whenever a wireless data network is detected.  The primary means of accomplishing that today is via one of Microsoft’s sync technologies that allows SQL Server Compact on the mobile client to replicate data to and from SQL Server in the data center or the cloud.  Since SQL Server Compact runs almost anywhere, your mobile client could be a Windows phone, a laptop, a desktop or even a Netbook.</p>
<p>Besides synchronizing the tables, rows and columns of a complete database between mobile clients and servers, the use of message queuing should be considered for many scenarios due to its high-reliability by ensuring that a critical message arrives at its destination.  Products like MSMQ, MQ Series, Tibco and JMS are used all over the world in the most mission-critical environments to ensure a high level of availability and reliability.  They’re asynchronous by nature and use store and forward mechanisms so that messages get from point A to B to C.  A typical queue message includes the <strong>Destination</strong> which tells the messge where to go, a <strong>Label</strong> which describes the message, a <strong>Body</strong> which contains the message, and a <strong>Body Length</strong> so the receiver can verify that it received everything.</p>
<p>So how does any of this relate to Windows phones?  A number of years ago, an MSMQ client was made available for download and installation on Windows phones.  Additionally, the .NET Compact Framework 2.0 included classes to work with MSMQ.  Unfortunately, the installation of MSMQ was far from seamless which inhibited its adoption by customers.  More recently, functionality was included in the .NET Compact Framework 3.5 that facilitated store and forward messaging using Exchange 2007 as a transport.  This is a good solution for customers running the newest version of Exchange, have an unlimited data plan for their phones, and don’t mind running line of business applications over their email infrastructure.</p>
<p>So what do we do for customers that have found the Windows Mobile MSMQ client too much of a hassle, don’t have Exchange 2007 or don’t want to use it as a mobile message queue server?  I think the answer has been under our noses all along.  Burned in the ROM of every Windows Mobile 6.x device is SQL Server Compact + a lightweight data sync solution called Remote Data Access (RDA).  For those of you running Windows Mobile 5, XP, Vista or 7, you can easily download these bits to your mobile client.  SQL Server Compact is you local queue, RDA is your transport and SQL Server in the cloud or data center is your message queue server.  So let’s break this down and see how it will work.</p>
<p>A mobile application that captures data in the field would want to drop that info in a local queue.  SQL Server Compact becomes that local queue and the message format is actually a table with the following structure:</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="200" valign="top"><strong>Table name</strong></td>
<td width="200" valign="top">Message</td>
</tr>
<tr>
<td width="200" valign="top"><strong>MessageId</strong></td>
<td width="200" valign="top">Uniqueidentifier</td>
</tr>
<tr>
<td width="200" valign="top"><strong>Destination</strong></td>
<td width="200" valign="top">NVarchar(whatever)</td>
</tr>
<tr>
<td width="200" valign="top"><strong>Label</strong></td>
<td width="200" valign="top">NVarchar(whatever)</td>
</tr>
<tr>
<td width="200" valign="top"><strong>Body</strong></td>
<td width="200" valign="top">NVarchar(4000)</td>
</tr>
<tr>
<td width="200" valign="top"><strong>BodyLength</strong></td>
<td width="200" valign="top">int</td>
</tr>
</tbody>
</table>
<p>This table would be created inside a <strong>MessgeQueue</strong> database in SQL Server and RDA would pull it down to SQL Server Compact.  In the <strong>Pull</strong> method you call from .NET on the client, you would add “<strong>WHERE 1=0</strong>” to the SQL statement.  This filter has the effect of pulling down an empty shell of the table without retrieving any data to the client since that’s all you want.  It also means that when you insert local data into the table and call the <strong>Push</strong> method, the data will be removed from the client at the completion of a successful sync.</p>
<p>So you’re probably wondering, what makes this so special and message queue-like vs. anything else?  The secret is that unlike other sync technologies, RDA can wrap the upload of data into a transaction.  As the data is being uploaded over wireless, if any of the INSERTs into SQL Server fail for whatever reason, everything gets rolled-back and the original data remains in the local SQL Server Compact queue.  This is the kind of guaranteed commit that you expect from a message queuing system.  It’s an “all or nothing” success or rollback. </p>
<p>It actually gets better.  A property of both RDA and Merge Replication is called ConnectionRetryTimeout.  This feature is designed to help you with unreliable wireless coverage where you have signal one minute and then lose it the next.  Let’s say you have this timeout value set to 2 minutes and you begin your <strong>Push</strong> upload of queued data.  Everything is working fine for the first few seconds but then you lose wireless coverage from your mobile operator.  If you regain coverage before the 2 minute time-out, the upload will resume where it left off.  Since both RDA and Merge send and receive data between the SQL Server Compact and IIS in tiny blocks, you never have to worry about running out of memory and you can pick up where you left off in case of a network dropout.</p>
<p>So the big takeaway here is that we do in fact have a<strong> Mobile Message Queue</strong> solution hidden on our Windows phones.  We have a message format that lets us drop text/xml/whatever data into the body, a label that a server process or SQL trigger can key off of to perform an action, and a transactional upload mechanism that ensures your critical data will cross the wireless chasm and make it to the other side intact.</p>
<p>So what’s next?  Now that you can capture data in a local queue and safely upload it, you might be wondering how queued messages from someone else can be pushed to your device.  Don’t worry, that will be in my next post.  Also, this isn’t just an article on how to solve a big problem in the mobile space, I’m actually building the necessary client and server pieces as well.  We’re all looking for a reliable and unified way to connect mobile devices to corporate assets and this just might be the simple answer we’re looking for.</p>
<p>- Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/the-hidden-message-queue-on-your-windows-phone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What ever happened to RDA?</title>
		<link>http://robtiffany.com/what-ever-happened-to-rda/</link>
		<comments>http://robtiffany.com/what-ever-happened-to-rda/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 05:34:47 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Sync]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[MEDC]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Remote Data Access]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[SSCE]]></category>
		<category><![CDATA[Sync Framework]]></category>
		<category><![CDATA[Sync Services for ADO.NET]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Transactional Replication]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows phones]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=3</guid>
		<description><![CDATA[Who remembers using Remote Data Access to synchronize data between SQL Server and SQL Server Compact?  I certainly do! Before I dove head first into the world of Merge Replication, I always used RDA to get my customers up and &#8230; <a href="http://robtiffany.com/what-ever-happened-to-rda/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Who remembers using Remote Data Access to synchronize data between SQL Server and SQL Server Compact?  I certainly do!</strong></p>
<p>Before I dove head first into the world of Merge Replication, I always used RDA to get my customers up and running quickly.  Mobilizing an organization’s workforce quickly and easily is what it’s all about so they can start reaping the benefits.  In addition to a speedy time to market, there’s no faster or more scalable mobile sync technology on the market anywhere. </p>
<p><strong>So why wouldn’t I always use RDA?  Here’s a quick list:</strong></p>
<ol>
<li>You’re using Identity columns.</li>
<li>You want to replicate schema changes to the client.</li>
<li>You want change tracking on both the client and server to perform diffs of each of the tables during a sync instead of re-downloading the entire table.</li>
<li>You want to automatically resolve conflicts that arise when 2 people update the same data.</li>
<li>You want referential integrity constraints to be pushed down to the client database from SQL Server.</li>
<li>You don’t want to write code to perform synchronization or filter data.</li>
</ol>
<p>If anything on the above list applied to you, you would shift to Merge Replication because it could manage ranges of Identity columns, push down schema changes, only sync data differences, resolve conflicts and push down a database’s referential integrity constraints.  Merge requires almost no code to get started and tables and columns are filtered visually via a wizard.</p>
<p><strong>So why might you choose to use RDA?  Here’s another list:</strong></p>
<ol>
<li>Your Primary Keys use GUIDs instead of Identity columns.</li>
<li>Users don’t overwrite each other’s data so you don’t need conflict resolution.  The rule of “Last in Wins” works for you.</li>
<li>While you want indexes to be pushed down, you don’t care if your local SSCE database has referential integrity constraints applied.</li>
<li>You want to wrap the changes you upload to SQL Server in a transaction so that all changes are applied or none of them are.</li>
<li>Change tracking on the client is good enough and re-downloading updated server tables doesn’t take too long.</li>
<li>You developers don’t mind writing some sync code.</li>
<li>Be able to execute SQL and Stored Procedures directly against SQL Server via IIS.</li>
<li>You&#8217;re downloading read-only data.</li>
</ol>
<p>If your solution meets the criteria in the list above, you’re probably a good candidate for using RDA instead of Merge.  Are there any other choices out there?</p>
<p>Back at MEDC 2007, we announced a new data replication technology for devices called Occasionally Connected Sync that would sit somewhere between RDA and Merge.  OCS as it used to be called was renamed Sync Services for ADO.NET and then was eventually merged into the Sync Framework. </p>
<p><strong>The Sync Framework is a developer-focused technology:</strong></p>
<ol>
<li>Supports conflict resolution.</li>
<li>Change tracking on the server as well as the client so that only data differences are exchanged.</li>
<li>Peer to Peer sync in the forthcoming v2 of Sync Framework.</li>
<li>Sync with databases other than SQL Server.</li>
<li>Best suited for SSCE running on a desktop or laptop.</li>
</ol>
<p>The clearest differentiation that the Sync Framework has over Merge is its provider model which allows it to sync with other ADO.NET databases like Oracle or DB2.  SQL Server supports built-in P2P Transactional replication and v2 of the Sync Framework will allow you to do this via WCF.  If you development team doesn’t mind writing lots of sync code and needs to support scenarios like synchronizing with other databases from SSCE on the desktop, then the Sync Framework might be the way to go for you.  I wouldn’t yet recommend the Sync Framework for device sync since its wire protocol is currently based on the DataSet which may cause out of memory errors on Windows phones with limited working sets.</p>
<p><strong>So where does this leave RDA?</strong></p>
<p>The reason I’m writing this blog post is because time and time again I run into customer sync scenarios that don’t always need the power of Merge or the extra flexibility of the Sync Framework.  Most field service applications follow the same kind of pattern:</p>
<ol>
<li>Lots of download-only lookup/reference tables that aren’t changed by the user.</li>
<li>Tables that are pushed down to the device that tell a user where to go and what to do.</li>
<li>Tables (sometimes empty) that are used to capture data from the user in the field that are upload-only.</li>
</ol>
<p>These kinds of schemas don’t require conflict resolvers or server change tracking and are therefore well suited for RDA. </p>
<p><strong>What’s the big benefit of using RDA if a sync scenario meets its criteria?</strong></p>
<ol>
<li>You won’t modify SQL Server’s schema with GUIDs and Triggers.</li>
<li>You won’t degrade the performance of SQL Server by having it track changes and maintain extra metadata.</li>
<li>You will have the fastest and most scalable sync solution with least amount of hardware.</li>
<li>Time to market is shorter.</li>
</ol>
<p>The big takeaway here is that I want you to consider your sync solution carefully before choosing a technology.  If your customer’s needs are met by RDA, then you should use it and reap the benefits of developing and deploying a simpler solution with fewer moving parts.</p>
<p><strong>Remember Occam&#8217;s Razor.</strong></p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/what-ever-happened-to-rda/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

