<?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; Wireless</title>
	<atom:link href="http://robtiffany.com/tag/wireless/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>Sun, 20 May 2012 04:39:16 +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>The Meek Shall in Inherit the Smartphone World</title>
		<link>http://robtiffany.com/the-meek-shall-in-inherit-the-smartphone-world/</link>
		<comments>http://robtiffany.com/the-meek-shall-in-inherit-the-smartphone-world/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 04:24:30 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[Smartphone]]></category>
		<category><![CDATA[Windows phone]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1764</guid>
		<description><![CDATA[Like the PC&#8217;s domination over Macs in decades past, low-cost devices for the masses will win the global smartphone war.  It won&#8217;t even be close. Most of the world population has to buy their device first, without the luxury of &#8230; <a href="http://robtiffany.com/the-meek-shall-in-inherit-the-smartphone-world/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Like the PC&#8217;s domination over Macs in decades past, low-cost devices for the masses will win the global <em><strong>smartphone</strong></em> war.  It won&#8217;t even be close.</p>
<p>Most of the world population has to buy their device first, without the luxury of carrier subsidies.  This means devices with a lower hardware and software BOM cost will have the advantage over ones that absolutely depend on carrier subsidies for their very survival.  I&#8217;m not talking smartphones that are cheaper because they lack the features and functionality of higher-end device.  If you step back and look across most of today&#8217;s smartphone platforms like the iPhone, Android, Blackberry, Windows Phone, Symbian, and Bada, you&#8217;ll notice that they all have similar functionality.  They all make calls and have email, an HTML5 web browser, SMS, MMS, touch, keyboards, APIs to build apps, 2G/3G/4G data networks, digital still/video cameras, web services, calendars, app stores, contacts, push notifications, music, maps, yada yada.  Will there be variations in quality?  Sure, but that&#8217;s the case with all products people buy.</p>
<p>It&#8217;s easy to forget that most of the world is still using feature phones because they meet minimum communications requirements and because they are inexpensive to buy.  These billions of folks are moving to smartphones, but don&#8217;t make the mistake in believing that they are capable of purchasing the most envied phone in the affluent country you live in.  For wealthy nations that currently live in a smartphone reality distortion field, this might be hard to understand.  Remember, the populations of the combined affluent countries make up just 1/7th of the total world population.  Even most folks in that group of ~1 billion people couldn&#8217;t afford the $850 unsubsidized cost of a certain smartphone that comes to mind.</p>
<p>Oh and by the way, the tablet market will shake-out the same way as it matures.</p>
<p>It&#8217;s the way of things in technology.  Remember, once the IBM BIOS was reverse-engineered, we had the Attack of the Clones in the 1980s that democratized the personal computer market.  Prices plunged, and Bill Gates&#8217; vision of a computer on every desk was largely realized.  The same thing is already beginning to play out for smartphones around the world in developing and not-so-developing countries.  Players in the mobile and wireless space who are moving to where the kicked football will be in this emerging reality, rather than where it is today, are the ones who will benefit in the long run.</p>
<p>It won&#8217;t even be close.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/the-meek-shall-in-inherit-the-smartphone-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Current State and Trends of the Mobile Internet</title>
		<link>http://robtiffany.com/the-current-state-and-trends-of-the-mobile-internet/</link>
		<comments>http://robtiffany.com/the-current-state-and-trends-of-the-mobile-internet/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 17:53:22 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[Smartphone]]></category>
		<category><![CDATA[Social]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Windows phone]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[Youtube]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1153</guid>
		<description><![CDATA[Since 90% of the world's population has mobile network coverage, lets take a look at how they’re using it, where they're using it, and what we should expect from the future... <a href="http://robtiffany.com/the-current-state-and-trends-of-the-mobile-internet/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Since 90% of the world&#8217;s population has mobile network coverage, lets take a look at how they’re using it, where they&#8217;re using it, and what we should expect from the future&#8230;</p>
<p><a href="http://www.webhostingbuzz.com/blog/2011/10/19/mobile-internet-trends/" _mce_href="http://www.webhostingbuzz.com/blog/2011/10/19/mobile-internet-trends/"><img src="http://www.webhostingbuzz.com/blog/wp-content/uploads/2011/10/IG_Browse_640.jpg" _mce_src="http://www.webhostingbuzz.com/blog/wp-content/uploads/2011/10/IG_Browse_640.jpg" border="0" alt="The State and Trends of Mobile Internet" /></a></p>
<p>Interesting stuff!<br />
-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/the-current-state-and-trends-of-the-mobile-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sync Framework v4 is now Open Source, and ready to Connect any Device to SQL Server and SQL Azure</title>
		<link>http://robtiffany.com/sync-framework-v4-is-now-open-source-and-ready-to-connect-any-device-to-sql-server-and-sql-azure/</link>
		<comments>http://robtiffany.com/sync-framework-v4-is-now-open-source-and-ready-to-connect-any-device-to-sql-server-and-sql-azure/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 20:54:27 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Sync Framework]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1014</guid>
		<description><![CDATA[The profound effects of the Consumerization of IT (CoIT) is blurring the lines between consumers and the enterprise.  The fact that virtually every type of mobile device is now a candidate to make employees productive means that cross-platform, enabling technologies are &#8230; <a href="http://robtiffany.com/sync-framework-v4-is-now-open-source-and-ready-to-connect-any-device-to-sql-server-and-sql-azure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The profound effects of the Consumerization of IT (CoIT) is blurring the lines between consumers and the enterprise.  The fact that virtually every type of mobile device is now a candidate to make employees productive means that cross-platform, enabling technologies are a must.  Luckily, Microsoft has brought the power to synchronize data with either SQL Server on-premise or SQL Azure in the cloud to the world of mobility.  If you&#8217;ve ever synched the music on your iPhone with iTunes, the calendar on your Android device with Gmail, or the Outlook email on your Windows Phone with Exchange, then you understand the importance of sync.  In my experience architecting and building enterprise mobile apps for the world&#8217;s largest organizations over the last decade, data sync has always been a critical ingredient.</p>
<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/sql-azure_rgb_2" rel="attachment wp-att-1027"><img class="alignright size-medium wp-image-1027" title="SQL Azure" src="http://robtiffany.com/wp-content/uploads/2011/09/SQL-Azure_rgb_2-300x92.png" alt="" width="300" height="92" /></a><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/microsoft-sql-server-2008" rel="attachment wp-att-1026"><img class="aligncenter size-medium wp-image-1026" title="SQL Server" src="http://robtiffany.com/wp-content/uploads/2011/09/microsoft-sql-server-2008-300x246.jpg" alt="" width="300" height="246" /></a></p>
<p>The new <strong><a title="Sync Framework Toolkit" href="http://code.msdn.microsoft.com/Sync-Framework-Toolkit-4dc10f0e" target="_blank">Sync Framework Toolkit</a></strong> found on MSDN builds on the existing Sync Framework 2.1&#8242;s ability to create disconnected applications, making it easier to expose data for synchronization to apps running on any client platform.  Where Sync Framework 2.1 required clients to be based on Windows, this free toolkit allows other Microsoft platforms to be used for offline clients such as Silverlight, Windows Phone 7, Windows Mobile, Windows Embedded Handheld, and new Windows Slates.   Additionally, non-Microsoft platforms such as iPhones, iPads, Android phones and tablets, Blackberries and browsers supporting HTML5 are all first-class sync citizens.  The secret is that we no longer require the installation of the Sync Framework runtime on client devices.  When coupled with use of an open protocol like <a title="OData" href="http://www.odata.org/" target="_blank">OData </a>for data transport, no platform or programming language is prevented from synchronizing data with our on-premise and cloud databases.  When the data arrives on your device, you can serialize it as JSON, or insert it into SQL Server Compact or SQLite depending on your platform preferences.</p>
<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/sync" rel="attachment wp-att-1032"><img class="aligncenter size-full wp-image-1032" title="sync" src="http://robtiffany.com/wp-content/uploads/2011/09/sync.png" alt="" width="256" height="256" /></a>The Sync Framework Toolkit provides all the features enabled by the<a href="http://blogs.msdn.com/b/sync/archive/2010/11/16/sync-framework-4-0-october-2010-ctp-refreshed-on-11-16.aspx">Sync Framework 4.0 October 2010 CTP</a>.  We are releasing the toolkit as source code samples on MSDN with the source code utilizing Sync Framework 2.1.  Source code provides the flexibility to customize or extend the capabilities we have provided to suit your specific requirements. The client-side source code in the package is released under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0 license</a> and the server-side source code under the <a href="http://mef.codeplex.com/license">MS-LPL license</a>.  The Sync Framework 2.1 is fully supported by Microsoft and the mobile-enabling source code is yours to use, build upon, and support for the apps you create.</p>
<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/windowsslate" rel="attachment wp-att-1051"><img class="alignleft size-full wp-image-1051" title="WindowsSlate" src="http://robtiffany.com/wp-content/uploads/2011/09/WindowsSlate.png" alt="" width="182" height="115" /></a><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/windowsphone" rel="attachment wp-att-1050"><img class="alignleft size-full wp-image-1050" title="WindowsPhone" src="http://robtiffany.com/wp-content/uploads/2011/09/WindowsPhone.png" alt="" width="152" height="153" /></a><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/mc55a0_lg_us-en-2" rel="attachment wp-att-1048"><img class="alignleft size-thumbnail wp-image-1048" title="MC55A0_LG_US-EN" src="http://robtiffany.com/wp-content/uploads/2011/09/MC55A0_LG_US-EN1-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<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/html5_logo_512" rel="attachment wp-att-1045"><img class="alignleft size-thumbnail wp-image-1045" title="HTML5_Logo_512" src="http://robtiffany.com/wp-content/uploads/2011/09/HTML5_Logo_512-150x150.png" alt="" width="150" height="150" /></a><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/mac" rel="attachment wp-att-1047"><img class="alignleft size-full wp-image-1047" title="Mac" src="http://robtiffany.com/wp-content/uploads/2011/09/Mac.png" alt="" width="184" height="106" /></a><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/blackberry" rel="attachment wp-att-1044"><img class="alignleft size-full wp-image-1044" title="Blackberry" src="http://robtiffany.com/wp-content/uploads/2011/09/Blackberry.png" alt="" width="173" height="173" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<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="alignleft size-full wp-image-1046" title="iPad" src="http://robtiffany.com/wp-content/uploads/2011/09/iPad.png" alt="" width="113" height="144" /></a><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/android" rel="attachment wp-att-1043"><img class="alignleft size-full wp-image-1043" title="Android" src="http://robtiffany.com/wp-content/uploads/2011/09/Android.png" alt="" width="154" height="153" /></a><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/symbian" rel="attachment wp-att-1049"><img class="alignleft size-full wp-image-1049" title="Symbian" src="http://robtiffany.com/wp-content/uploads/2011/09/Symbian.png" alt="" width="152" height="163" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Now some of you might be wondering why you would use a sync technology to move data rather than SOAP or REST web services.  The reason has to do with performance and bandwidth efficiency.  Using SOA, one would retrieve all the data needed to the device in order to see what has changed in SQL Server.  The same goes for uploading data.  Using the Sync Framework Toolkit, only the changes, or deltas, are transmitted over the air.  The boosts performance and reduces bandwidth usage which saves time and money in a world of congested mobile data networks with capped mobile data plans.  You also get a feature called batching, which breaks up the data sent over wireless networks into manageable pieces.  This not only prevents you from blowing out your limited bandwidth, but it also keeps you from using too much RAM memory both on the server and your memory-constrained mobile device.  When combined with conflict resolution and advanced filtering, I&#8217;m sold!</p>
<p>I think you&#8217;ll find the Sync Framework Toolkit to be an immensely valuable component of your MEAP solutions for the enterprise as well as the ones you build for consumers.</p>
<p>Keep Synching,</p>
<p>Rob</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/sync-framework-v4-is-now-open-source-and-ready-to-connect-any-device-to-sql-server-and-sql-azure/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Performance and Memory Management Improvements with Windows Embedded Handheld</title>
		<link>http://robtiffany.com/performance-and-memory-management-improvements-with-windows-embedded-handheld/</link>
		<comments>http://robtiffany.com/performance-and-memory-management-improvements-with-windows-embedded-handheld/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 15:49:39 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows Embedded Handheld]]></category>
		<category><![CDATA[.NET Compact Framework]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Device Management]]></category>
		<category><![CDATA[Merge Replication]]></category>
		<category><![CDATA[Microsoft]]></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 Compact]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=944</guid>
		<description><![CDATA[It should be no surprise that over 80% of enterprise handhelds shipped are running Windows Mobile or Windows Embedded Handheld.  <a href="http://robtiffany.com/performance-and-memory-management-improvements-with-windows-embedded-handheld/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A lot has changed since the launch of Windows Phone in the Fall of 2010.  Microsoft now has a compelling phone platform that targets consumers inside and outside the office.  One thing that that hasn&#8217;t changed is the widespread use of Windows Embedded Handheld to solve tough enterprise mobility problems.  It should be no surprise that over 80% of enterprise handhelds shipped are running Windows Mobile or Windows Embedded Handheld.  They include support for barcode scanning, RFID reading, rugged hardware, every type of wireless, full device encryption, complete over-the-air software distribution and device managment support, FIPS compliance, and both capacitive touch and stylus operation.  On the application platform side of the equation, they have rich support for WinForm development using Visual Studio and the .NET Compact Framework, C++ and a full-featured database with built-in sync capabilities via SQL Server Compact.  They can easily communicate with WCF SOAP and REST web services running on Windows Servers on-premise or with Azure in the cloud.  Support for Merge Replication means faster time to market to get device synchronizing with SQL Server with almost no coding.</p>
<p><a href="http://robtiffany.com/windows-embedded-handheld/performance-and-memory-management-improvements-with-windows-embedded-handheld/attachment/motorola-es400" rel="attachment wp-att-951"><img class="alignleft size-medium wp-image-951" title="Windows Embedded Handheld" src="http://robtiffany.com/wp-content/uploads/2011/09/motorola-es400-144x300.jpg" alt="" width="144" height="300" /></a><a href="http://robtiffany.com/windows-embedded-handheld/performance-and-memory-management-improvements-with-windows-embedded-handheld/attachment/pp-psion-teklogix-12-6-10" rel="attachment wp-att-978"><img class="alignleft size-medium wp-image-978" title="pp-Psion-Teklogix-12-6-10" src="http://robtiffany.com/wp-content/uploads/2011/09/pp-Psion-Teklogix-12-6-10-183x300.jpg" alt="" width="183" height="300" /></a><a href="http://robtiffany.com/windows-embedded-handheld/performance-and-memory-management-improvements-with-windows-embedded-handheld/attachment/dolphin" rel="attachment wp-att-976"><img class="alignleft size-medium wp-image-976" title="dolphin" src="http://robtiffany.com/wp-content/uploads/2011/09/dolphin-163x300.jpg" alt="" width="163" height="300" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://robtiffany.com/windows-embedded-handheld/performance-and-memory-management-improvements-with-windows-embedded-handheld/attachment/intermec" rel="attachment wp-att-979"><img class="alignleft size-medium wp-image-979" title="intermec" src="http://robtiffany.com/wp-content/uploads/2011/09/intermec-140x300.jpg" alt="" width="140" height="300" /></a><a href="http://robtiffany.com/windows-embedded-handheld/performance-and-memory-management-improvements-with-windows-embedded-handheld/attachment/honeywell_99ex" rel="attachment wp-att-977"><img class="alignleft size-medium wp-image-977" title="honeywell_99ex" src="http://robtiffany.com/wp-content/uploads/2011/09/honeywell_99ex-127x300.jpg" alt="" width="127" height="300" /></a></p>
<p>Since Windows Embedded Handheld uses an advanced version of the operating system kernel used by Windows Mobile 6.5.3, many of the techniques and best practices I&#8217;ve taugh customers and developers all over the world still apply.  While it still uses the slotted memory model found in Windows CE 5 with 32 processes and 32 MB of memory per process, you&#8217;ll find that numerous enhancements and tuning has taken place to give your line of business apps more of what they need.  I&#8217;m talking about more memory per process and improved performance.  Therefore, I&#8217;d like you to sit back and watch the video of a presentation I delivered at Tech Ed in Los Angeles a couple of years ago so you can better learn what this mobile platform has to offer in the form of better memory management and improved performance:<br />
<iframe style="width: 512px; height: 384px;" src="http://channel9.msdn.com/Events/TechEd/Europe/2009/MOB401/player?w=512&amp;h=384" frameborder="0" scrolling="no" width="320" height="240"></iframe></p>
<p>A recent Gartner report recommends that organizations should stay with Windows Embedded Handheld as the best mobile platform for enterprise line of business needs.  Great devices are available from OEMs like Intermec, Motorola, Psion, and Honeywell just to name a few.  I hope this video helps you with any memory management or performance issues you may need to deal with in your enterprise mobile apps.</p>
<p>Best Regards,<br />
Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/performance-and-memory-management-improvements-with-windows-embedded-handheld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7 Line of Business App Dev :: Uploading Data back to Azure</title>
		<link>http://robtiffany.com/windows-phone-7-line-of-business-app-dev-uploading-data-back-to-azure/</link>
		<comments>http://robtiffany.com/windows-phone-7-line-of-business-app-dev-uploading-data-back-to-azure/#comments</comments>
		<pubDate>Wed, 04 May 2011 05:11:35 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Queues]]></category>
		<category><![CDATA[Azure Table Storage]]></category>
		<category><![CDATA[Data Contract]]></category>
		<category><![CDATA[Data Member]]></category>
		<category><![CDATA[DataContractJsonSerializer]]></category>
		<category><![CDATA[DELETE]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[GET]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Loosely-coupled]]></category>
		<category><![CDATA[Memcache]]></category>
		<category><![CDATA[MemoryStream]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[POST]]></category>
		<category><![CDATA[PUT]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Slate]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[Tablet]]></category>
		<category><![CDATA[URI]]></category>
		<category><![CDATA[UriTemplate]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WebClient]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Communication Foundation]]></category>
		<category><![CDATA[Windows phone]]></category>
		<category><![CDATA[Windows Slate]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XmlSerializer]]></category>

		<guid isPermaLink="false">http://robtiffany.com/windows-phone-7/windows-phone-7-line-of-business-app-dev-uploading-data-back-to-azure</guid>
		<description><![CDATA[Looking back over the last 6 months of this series of articles, you’ve created wireless-efficient WCF REST + JSON Web Services in Azure to download data from SQL Azure tables to Windows Phone.  You’ve maintained in-memory collections of objects in &#8230; <a href="http://robtiffany.com/windows-phone-7-line-of-business-app-dev-uploading-data-back-to-azure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>Looking back over the last 6 months of this series of articles, you’ve created wireless-efficient <strong>WCF REST + JSON</strong> Web Services in <strong>Azure</strong> to download data from <strong>SQL Azure</strong> tables to <strong>Windows Phone</strong>.  You’ve maintained in-memory collections of objects in your own local <strong>NoSQL</strong> object cache.  You&#8217;ve used <strong>LINQ</strong> to query those collections and bind results to various <strong>Silverlight</strong> UI elements.  You’ve even serialized those collections to <strong>Isolated Storage</strong> using memory-efficient JSON.  So what’s left to do?</div>
<div><a href="http://robtiffany.com/wp-content/uploads/2011/05/Sub.png"><img class="aligncenter size-medium wp-image-681" title="Submarine" src="http://robtiffany.com/wp-content/uploads/2011/05/Sub-180x300.png" alt="" width="180" height="300" /></a></div>
<div></div>
<div>Oh yeah, I guess you might want to know how to <strong>upload</strong> an object full to data back to a WCF Web Service in Azure.  In order to keep this article simple and to-the-point, I’m going to work with a basic Submarine object and show you how to fill it with data and upload it from a <strong>Windows Phone</strong> or <strong>Slate</strong> to a WCF REST + JSON Web Service.  Let’s take a look at this object:</div>
<div></div>
<div><span style="font-family: Consolas;">using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using System.Runtime.Serialization;</span></div>
<div><span style="font-family: Consolas;">namespace Models<br />
{<br />
[DataContract()]<br />
public class Submarine<br />
{<br />
[DataMember()]<br />
public int Id { get; set; }<br />
[DataMember()]<br />
public string Name { get; set; }<br />
}<br />
}</span></div>
<div></div>
<div>It includes just an integer data type called <strong>Id</strong>, and a string called <strong>Name</strong>.  As in previous articles before, its decorated with a <strong>[DataContract()]</strong> and two <strong>[DataMember()]</strong>s to allow<strong> .NET serialization</strong> to do its thing.  So the next thing we need to do is create and populate this Submarine object with data, serialize it as JSON, and send it on its way using <strong>WebClient</strong>.</div>
<div></div>
<div>Below is the method and its callback that accomplishes this:</div>
<div></div>
<div><span style="font-family: Consolas;">using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Net;<br />
using System.Windows;<br />
using Microsoft.Phone.Controls;<br />
using System.IO;<br />
using System.Runtime.Serialization.Json;<br />
using System.Text;</span></div>
<div><span style="font-family: Consolas;">private void AddSubmarine()<br />
{<br />
Uri uri = new Uri(&#8220;</span><a href="http://127.0.0.1:81/SubService.svc/AddSubmarine&quot;);"><span style="font-family: Consolas;">http://127.0.0.1:81/SubService.svc/AddSubmarine&#8221;);</span></a></div>
<div><span style="font-family: Consolas;"> Models.Submarine submarine = new Models.Submarine() { Id = 3, Name = &#8220;Seawolf&#8221; };<br />
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Models.Submarine));<br />
MemoryStream mem = new MemoryStream();<br />
ser.WriteObject(mem, submarine);<br />
string data = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);</span></div>
<div><span style="font-family: Consolas;"> WebClient webClient = new WebClient();<br />
webClient.UploadStringCompleted += new UploadStringCompletedEventHandler(webClient _UploadStringCompleted);<br />
webClient.Headers["Content-type"] = &#8220;application/json&#8221;;<br />
webClient.Encoding = Encoding.UTF8;<br />
webClient.UploadStringAsync(uri, &#8220;POST&#8221;, data);</span></div>
<div><span style="font-family: Consolas;">}</span></div>
<div><span style="font-family: Consolas;">void webClient_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)<br />
{<br />
var x = e.Result;<br />
}</span></div>
<div></div>
<div>As you can see above, I point the <strong>URI</strong> at a WCF Service called <strong>SubService.svc/AddSubmarine</strong>.  How <strong>RESTful</strong>.  Next, I create an instance of the Submarine object, give it an <strong>Id</strong> of <strong>3</strong> and the <strong>Name</strong> <strong>Seawolf</strong>.  I then use the same <strong>DataContractJsonSerializer</strong> I’ve been using in all the other articles to serialize the Submarine object to a JSON representation.  Using the <strong>MemoryStream</strong>, I write the JSON to a stream and then artfully turn it into a string.  Last but not least, I instantiate a new WebClient object, create an event handler for a callback, and upload the <strong>stringified</strong> Submarine object to the WCF Service.</div>
<div></div>
<div>So where did I upload the Submarine object to?</div>
<div></div>
<div>It takes two to Mango, so let’s take a look.  For starters, it goes without saying that every WCF Service starts with an <strong>Interface</strong>.  This one is called<strong> ISubService.cs</strong>:</div>
<div></div>
<div><span style="font-family: Consolas;">using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Runtime.Serialization;<br />
using System.ServiceModel;<br />
using System.ServiceModel.Web;<br />
using System.Text;</span></div>
<div><span style="font-family: Consolas;">namespace DataSync<br />
{<br />
[ServiceContract]<br />
public interface ISubService<br />
{<br />
</span><span style="font-family: Consolas;">[OperationContract]<br />
[WebInvoke(UriTemplate = "/AddSubmarine", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]<br />
bool AddSubmarine(Models.Submarine sub);</span></div>
<div><span style="font-family: Consolas;"> }<br />
}</span></div>
<div></div>
<div>Unlike previous articles where I had you download data with <strong>WebGet</strong>, this time I’m using <strong>WebInvoke</strong> to denote that a <strong>PUT</strong>, <strong>POST</strong>, or <strong>DELETE</strong> <strong>HTTP</strong> <strong>Verb</strong> is being used with our <strong>REST</strong> service.  The <strong>UriTemplate</strong> gives you the RESTful <strong>/AddSubmarine</strong>, and I added the <strong>Method = “POST”</strong> for good measure.  Keep in mind that you’ll need the exact same Submarine class on the server that you had on your Windows Phone to make all this work.</div>
<div></div>
<div>Let’s see what we get when we <strong>Implement this Interface</strong>:</div>
<div></div>
<div><span style="font-family: Consolas;">using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Runtime.Serialization;<br />
using System.ServiceModel;<br />
using System.ServiceModel.Web;<br />
using System.Text;<br />
using Microsoft.WindowsAzure;<br />
using Microsoft.WindowsAzure.Diagnostics;<br />
using Microsoft.WindowsAzure.ServiceRuntime;<br />
using Microsoft.WindowsAzure.StorageClient;<br />
using System.Configuration;<br />
using System.Xml.Serialization;<br />
using System.IO;</span></div>
<div><span style="font-family: Consolas;">namespace DataSync<br />
{<br />
public class SubService : ISubService<br />
{<br />
public SubService()<br />
{ </span></div>
<div><span style="font-family: Consolas;"></p>
<div>}</div>
<p></span></div>
<div><span style="font-family: Consolas;"> public bool AddSubmarine(Models.Submarine submarine)<br />
{<br />
try<br />
{<br />
if (submarine != null)<br />
{<br />
//Do something with your Deserialized .NET Submarine Object<br />
//… = submarine.Id </span><span style="font-family: Consolas;"> //… = submarine.Name</span></div>
<div><span style="font-family: Consolas;"> return true;<br />
}<br />
else<br />
{<br />
return false;<br />
}<br />
}<br />
catch<br />
{<br />
return false;<br />
}<br />
}</span></div>
<div><span style="font-family: Consolas;"> }<br />
}</span></div>
<div></div>
<div>Here we end up with <strong>SubService.svc</strong> with the simple <strong>AddSubmarine</strong> method where you pass in a Submarine object as a parameter.  What you do with this object, I’ll leave to you.  Some might be tempted to INSERT it into <strong>SQL Azure</strong>.  I’d prefer that you drop it into an <strong>Azure Queue</strong> and have a <strong>Worker Role</strong> do the INSERTing later so you can stay <strong>loosely-coupled</strong>.  Just in case you need a refresher on a REST-based <strong>Web.config</strong> file, here’s one below:</div>
<div></div>
<div><span style="font-family: Consolas;">&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;configuration&gt;<br />
&lt;!&#8211;  To collect diagnostic traces, uncomment the section below.<br />
To persist the traces to storage, update the DiagnosticsConnectionString setting with your storage credentials.<br />
To avoid performance degradation, remember to disable tracing on production deployments.<br />
&lt;system.diagnostics&gt;<br />
&lt;sharedListeners&gt;<br />
&lt;add name=&#8221;AzureLocalStorage&#8221; type=&#8221;DataSync.AzureLocalStorageTraceListener, DataSync&#8221;/&gt;<br />
&lt;/sharedListeners&gt;<br />
&lt;sources&gt;<br />
&lt;source name=&#8221;System.ServiceModel&#8221; switchValue=&#8221;Verbose, ActivityTracing&#8221;&gt;<br />
&lt;listeners&gt;<br />
&lt;add name=&#8221;AzureLocalStorage&#8221;/&gt;<br />
&lt;/listeners&gt;<br />
&lt;/source&gt;<br />
&lt;source name=&#8221;System.ServiceModel.MessageLogging&#8221; switchValue=&#8221;Verbose&#8221;&gt;<br />
&lt;listeners&gt;<br />
&lt;add name=&#8221;AzureLocalStorage&#8221;/&gt;<br />
&lt;/listeners&gt;<br />
&lt;/source&gt;<br />
&lt;/sources&gt;<br />
&lt;/system.diagnostics&gt; &#8211;&gt;<br />
&lt;system.diagnostics&gt;<br />
&lt;trace&gt;<br />
&lt;listeners&gt;<br />
&lt;add type=&#8221;Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&#8243;<br />
name=&#8221;AzureDiagnostics&#8221;&gt;<br />
&lt;filter type=&#8221;" /&gt;<br />
&lt;/add&gt;<br />
&lt;/listeners&gt;<br />
&lt;/trace&gt;<br />
&lt;/system.diagnostics&gt;<br />
&lt;system.web&gt;<br />
&lt;compilation debug=&#8221;true&#8221; targetFramework=&#8221;4.0&#8243; /&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;/system.web&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;!&#8211;Add Connection Strings&#8211;&gt;<br />
&lt;connectionStrings&gt; </span></div>
<div><span style="font-family: Consolas;"></p>
<div>&lt;/connectionStrings&gt;</div>
<p></span></div>
<div><span style="font-family: Consolas;"> &lt;system.serviceModel&gt;<br />
&lt;behaviors&gt;<br />
&lt;serviceBehaviors&gt;<br />
&lt;behavior&gt;<br />
&lt;!&#8211; To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment &#8211;&gt;<br />
&lt;serviceMetadata httpGetEnabled=&#8221;true&#8221;/&gt;<br />
&lt;!&#8211; To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information &#8211;&gt;<br />
&lt;serviceDebug includeExceptionDetailInFaults=&#8221;false&#8221;/&gt;<br />
&lt;/behavior&gt;<br />
&lt;/serviceBehaviors&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;!&#8211;Add REST Endpoint Behavior&#8211;&gt;<br />
&lt;endpointBehaviors&gt;<br />
&lt;behavior name=&#8221;REST&#8221;&gt;<br />
&lt;webHttp /&gt;<br />
&lt;/behavior&gt;<br />
&lt;/endpointBehaviors&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;/behaviors&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;!&#8211;Add Service with webHttpBinding&#8211;&gt;<br />
&lt;services&gt;<br />
&lt;service name=&#8221;DataSync.SubService&#8221;&gt;<br />
&lt;endpoint address=&#8221;" behaviorConfiguration=&#8221;REST&#8221; binding=&#8221;webHttpBinding&#8221;<br />
contract=&#8221;DataSync.ISubService&#8221; /&gt;<br />
&lt;/service&gt;<br />
&lt;/services&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;serviceHostingEnvironment aspNetCompatibilityEnabled=&#8221;true&#8221; multipleSiteBindingsEnabled=&#8221;true&#8221; /&gt;</span></div>
<div><span style="font-family: Consolas;"> &lt;!&#8211;&lt;serviceHostingEnvironment multipleSiteBindingsEnabled=&#8221;true&#8221; /&gt;&#8211;&gt;<br />
&lt;/system.serviceModel&gt;<br />
&lt;system.webServer&gt;<br />
&lt;modules runAllManagedModulesForAllRequests=&#8221;true&#8221;/&gt;<br />
&lt;/system.webServer&gt;<br />
&lt;/configuration&gt;</span></div>
<div></div>
<div>This Web.Config gives you the <strong>webHttpBinding</strong> you’re looking for to do a <strong>REST</strong> service.  I even left you a spot to add your own database or Azure storage <strong>connection strings</strong>.</div>
<div>This article wraps up the <strong>Windows Phone 7 Line of Business App Dev series</strong> that I’ve been delivering to you since last September.  Who knew I would make fun of <strong>OData</strong> or have you create your own <strong>NoSQL</strong> database to run on your phone along the way?  I think I actually wrote the first article in this series from a hotel room in <strong>Nantes, France</strong>.</div>
<div></div>
<div>But have no fear, this isn’t the end.</div>
<div></div>
<div>In preparation for <strong>Tech Ed 2010 North America</strong> coming up on May 16th in Atlanta, I’ve been building the <strong>next-gen</strong>, <strong>super-fast</strong>, <strong>super-scalable Azure architecture</strong> designed for <strong>mobile devices roaming on wireless data networks</strong>.  I’ve spent the last decade building the world’s largest and most scalable mobile infrastructures for Microsoft’s wonderful global customers.  Now it’s time to make the jump from supporting <strong>enterprise-level scalability</strong> to the much bigger <strong>consumer-level scalability</strong>.</div>
<div></div>
<div>Yes, I’m talking <strong>millions</strong> of devices.</div>
<div></div>
<div>No, you won’t have to recreate <strong>Facebook’s</strong> servers, <strong>NoSQL</strong>, <strong>Memcache</strong>, or <strong>Hadoop</strong> infrastructure to make it happen.  I’m going to show you how to make it happen with Azure in just two weeks so I’m looking forward to seeing everyone in Atlanta in two weeks.</div>
<div></div>
<div>Keep coding,</div>
<div>Rob</div>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/windows-phone-7-line-of-business-app-dev-uploading-data-back-to-azure/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Top Ten Mobile Internet Trends</title>
		<link>http://robtiffany.com/top-ten-mobile-internet-trends/</link>
		<comments>http://robtiffany.com/top-ten-mobile-internet-trends/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 20:32:32 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=619</guid>
		<description><![CDATA[Our friends at Kleiner Perkins have some great insights into where things are going with the Mobile Internet: Top 10 Mobile Internet Trends (Feb 2011) View more presentations from Kleiner Perkins Caufield &#038; Byers]]></description>
			<content:encoded><![CDATA[<p>Our friends at Kleiner Perkins have some great insights into where things are going with the Mobile Internet:</p>
<div style="width:425px" id="__ss_6872807"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/kleinerperkins/kpcb-top-10-mobile-trends-feb-2011" title="Top 10 Mobile Internet Trends (Feb 2011)">Top 10 Mobile Internet Trends (Feb 2011)</a></strong> <object id="__sse6872807" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=kpcbtop10mobiletrends021011finalpdf-110210002130-phpapp02&#038;stripped_title=kpcb-top-10-mobile-trends-feb-2011&#038;userName=kleinerperkins" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6872807" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=kpcbtop10mobiletrends021011finalpdf-110210002130-phpapp02&#038;stripped_title=kpcb-top-10-mobile-trends-feb-2011&#038;userName=kleinerperkins" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px"> View more presentations from <a href="http://www.slideshare.net/kleinerperkins">Kleiner Perkins Caufield &#038; Byers</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/top-ten-mobile-internet-trends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Web Facts and Best Practices</title>
		<link>http://robtiffany.com/mobile-web-facts-and-best-practices/</link>
		<comments>http://robtiffany.com/mobile-web-facts-and-best-practices/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 02:50:47 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=563</guid>
		<description><![CDATA[&#60;what is the mobile web? /&#62; It’s growing faster than the desktop web Faster growth than desktop web during 1990’s There&#8217;s been a 2000% increase in mobile websites since 2008 The mobile web is: The mobile web is not: The &#8230; <a href="http://robtiffany.com/mobile-web-facts-and-best-practices/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1><span style="color: #ff0000;">&lt;what is the mobile web? /&gt;</span></h1>
<p><span style="color: #ff0000;"><br />
</span></p>
<ul>
<li><strong>It’s growing faster than the desktop web</strong></li>
<li><strong>Faster growth than desktop web during 1990’s</strong></li>
<li><strong>There&#8217;s been a 2000% increase in mobile websites since 2008</strong></li>
<li><strong>The mobile web <span style="text-decoration: underline;">is</span>:</strong></li>
</ul>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/02/mobilenyt.png"><img class="aligncenter size-medium wp-image-570" title="New York Times" src="http://robtiffany.com/wp-content/uploads/2011/02/mobilenyt-158x300.png" alt="New York Times" width="158" height="300" /></a></p>
<ul>
<li><strong>The mobile web <span style="text-decoration: underline;">is not</span>:</strong></li>
</ul>
<p><a href="http://robtiffany.com/wp-content/uploads/2011/02/nytimebig.png"><img class="aligncenter size-medium wp-image-573" title="New York Times" src="http://robtiffany.com/wp-content/uploads/2011/02/nytimebig-158x300.png" alt="New York Times" width="158" height="300" /></a></p>
<ul>
<li><strong>The mobile web is glanceable info for people on the go</strong></li>
<li><strong>The desktop web is for people who aren’t going anywhere</strong></li>
<li><strong>The mobile web can reach half the planet</strong></li>
<li><strong>The desktop web reaches ~1 billion users</strong></li>
<li><strong>The mobile web browser is the #1 app used on most phones</strong></li>
<li><strong>The mobile web browser consumes 13% of user face time</strong></li>
<li><strong>The mobile web browser accounts for 50% of all phone data traffic</strong></li>
<li><strong>There are around 326,000 touchable mobile web sites</strong></li>
<li><strong>Most of the top mobile web sites focus on shopping, services, social and news</strong></li>
<li><strong>Retailers can increase consumer engagement by 85% by having mobile-specific website</strong></li>
<li><strong>But only 4.8% of U.S. retailers have a mobile website</strong></li>
<li><strong>9 out of 10 mobile shoppers use the mobile web while in-store</strong></li>
<li><strong>50% of users in-store mobile web activity is shopping related</strong></li>
<li><strong>51% of in-store mobile research has led to a purchase</strong></li>
<li><strong>Amazon took in &gt; $1 billion via its mobile commerce site</strong></li>
<li><strong>Google says mobile shopping searches are up 3,000% over last 3 years</strong></li>
<li><strong>Most native device attributes will reach HTML5 by 2013, enabling UX that rivals native apps</strong>
<ul>
<li><strong>Geo-location 2010</strong></li>
</ul>
<ul>
<li><strong>Camera 2011</strong></li>
<li><strong>Motion detection 2011</strong></li>
</ul>
<ul>
<li><strong>Calendar 2012</strong></li>
</ul>
<ul>
<li><strong>Contacts 2012</strong></li>
</ul>
<ul>
<li><strong>SMS2012</strong></li>
</ul>
<ul>
<li><strong>Files 2013</strong></li>
</ul>
</li>
</ul>
<h1><span style="color: #ff0000;">&lt;markup differences /&gt;</span></h1>
<p><span style="color: #ff0000;"><br />
</span></p>
<ul>
<li><strong>Today’s mobile web is XHTML Basic 1.1Second Edition</strong>
<ul>
<li><strong>W3C recommendation in November 2010</strong></li>
</ul>
<ul>
<li><strong>http://www.w3.org/TR/2010/REC-xhtml-basic-20101123/</strong></li>
</ul>
<ul>
<li><strong>Supersedes XHTML-MP 1.2 from Open Mobile Alliance (OMA)</strong></li>
</ul>
<ul>
<li><strong>Similar to HTML 4.01</strong></li>
</ul>
<ul>
<li><strong>Not WAP</strong></li>
</ul>
</li>
<li><strong>Yes, it’s XML</strong>
<ul>
<li><strong>XML parsing rules enforced</strong></li>
</ul>
<ul>
<li><strong>&lt;?xml version = &#8217;1.0&#8242; encoding = &#8216;UTF-8&#8242;?&gt;</strong></li>
</ul>
<ul>
<li><strong>Every tag name and attribute must be in lowercase</strong></li>
</ul>
<ul>
<li><strong>All attributes must have a value</strong></li>
</ul>
<ul>
<li><strong>Every tag must be closed</strong></li>
</ul>
</li>
<li><strong>You must have a document type definition (DTD)<img src="file:///C:/Users/ROBTIF%7E1/AppData/Local/Temp/moz-screenshot.png" alt="" /></strong>
<ul>
<li><strong>&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML Basic 1.1//EN&#8221; &#8220;http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd&#8221;&gt;</strong></li>
</ul>
<ul>
<li><strong>Your markup must stick to the definition</strong></li>
</ul>
</li>
<li><strong>You need an XML namespace for your document</strong>
<ul>
<li><strong>&lt;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221; xml:lang=&#8221;en&#8221;&gt;</strong></li>
</ul>
</li>
<li><strong>You need a mime type</strong>
<ul>
<li><strong>@Response.AddHeader(&#8220;Content-Type&#8221;, &#8220;application/xhtml+xml&#8221;);</strong></li>
</ul>
</li>
<li><strong>There are no frames, no framesets and no iframes</strong></li>
<li><strong>No Java applets</strong></li>
<li><strong>No Flash</strong></li>
<li><strong>No image maps</strong></li>
<li><strong>Simple tables</strong>
<ul>
<li><strong>Not for layout (Use CSS)</strong></li>
<li><strong>No table nesting (Tables within tables)</strong></li>
<li><strong>No thead</strong></li>
<li><strong>No tbody</strong></li>
<li><strong>No tfoot</strong></li>
</ul>
</li>
</ul>
<h1><span style="color: #ff0000;">&lt;user experience /&gt;</span></h1>
<p><span style="color: #ff0000;"><br />
</span></p>
<ul>
<li><strong>CSS Mobile Profile</strong>
<ul>
<li><strong>Subset of CSS2</strong></li>
<li><strong>Must specify units</strong></li>
</ul>
</li>
<li><strong>Keep your &lt;title&gt;&lt;/title&gt; short, description and &lt; 20 characters</strong></li>
<li><strong>Stack everything in a single column</strong>
<ul>
<li><strong>No left/right horizontal scrolling</strong></li>
<li><strong>Minimize up/down vertical scrolling</strong></li>
</ul>
</li>
<li><strong>Include just the top 20% most important content from the desktop web</strong></li>
<li><strong>Use minimal, lightweight advertisements</strong></li>
<li><strong>Link to the desktop website</strong></li>
<li><strong>Use short URLs that fit on a single line and don&#8217;t disappear off the side of your phone</strong></li>
<li><strong>Accommodate different device dimensions</strong>
<ul>
<li><strong>Width = 100%</strong></li>
<li><strong>Height = Auto</strong></li>
</ul>
</li>
<li><strong>No hovering or mouse-overs needed for touch</strong></li>
<li><strong>Limit the need for text entry</strong>
<ul>
<li><strong>Use checkboxes</strong></li>
<li><strong>Use drop-down combo boxes</strong></li>
<li><strong>Use lists</strong></li>
<li><strong>Use radio buttons</strong></li>
<li><strong>Use pre-filled text</strong></li>
</ul>
<ul>
<li><strong>Maintain reusable session data in a cookie</strong></li>
</ul>
</li>
<li><strong>Each page must only provide a single function or idea</strong></li>
<li><strong>Use larger fonts because people can&#8217;t read small screens with high resolution</strong></li>
<li><strong>Use large touchable UI elements</strong>
<ul>
<li><strong>Fingertips are up to 80 pixels wide</strong></li>
</ul>
<ul>
<li><strong>Touchable elements must be 40+ high/wide</strong></li>
</ul>
<ul>
<li><strong>Touchable elements must be 20+ pixels apart</strong></li>
</ul>
</li>
<li><strong>Navigation should be at the top of each page (Also use breadcrumbs for one-click access)</strong></li>
<li><strong>Just say no to background images</strong>
<ul>
<li><strong>Makes pages harder to read</strong></li>
</ul>
<ul>
<li><strong>Increases page size</strong></li>
</ul>
</li>
<li><strong>No pop-up windows</strong></li>
<li><strong>Don’t use absolute values for measurements</strong>
<ul>
<li><strong>You&#8217;ll get unexpected results on different mobile browsers</strong></li>
</ul>
<ul>
<li><strong>Use ems</strong></li>
</ul>
<ul>
<li><strong>Use percentages</strong></li>
</ul>
</li>
<li><strong><span style="text-decoration: underline;">Do not</span> use images for:</strong>
<ul>
<li><strong>Icons for links or menus</strong></li>
<li><strong>Buttons</strong></li>
</ul>
<ul>
<li><strong>Visual separators</strong></li>
</ul>
</li>
<li><strong><span style="text-decoration: underline;">Do </span>use small images:</strong>
<ul>
<li><strong>For maps</strong></li>
</ul>
<ul>
<li><strong>For an article</strong></li>
<li><strong>As a product logo</strong></li>
</ul>
<ul>
<li><strong>If they are smaller than device screen</strong></li>
</ul>
<ul>
<li><strong>As long as they are lightweight thumbnails</strong></li>
</ul>
<ul>
<li><strong>Only when absolutely necessary</strong></li>
</ul>
</li>
<li><strong>Click to call  &lt;a href=&#8221;tel:+12065551212&#8243;&gt;Call Rob&lt;/a&gt;</strong></li>
<li><strong>Click to email  &lt;a href=&#8221;mailto:+rtif@ms.com?subject=Hi&amp;body=Rob&gt;email rob&lt;/a&gt;</strong></li>
<li><strong>Access keys for fast access to list items</strong>
<ul>
<li><strong>For phones with keyboards</strong></li>
</ul>
<ul>
<li><strong>&lt;a href=&#8221;Products.cshtml“ accesskey=&#8221;1&#8243;&gt;Products&lt;/a&gt;</strong></li>
</ul>
</li>
</ul>
<h1><span style="color: #ff0000;">&lt;adaptability /&gt;</span></h1>
<p><span style="color: #ff0000;"><br />
</span></p>
<ul>
<li><strong>Server-side device capability databases</strong>
<ul>
<li><strong>Wireless universal resource file (WURFL)</strong></li>
</ul>
<ul>
<li><strong>Device Atlas</strong></li>
</ul>
<ul>
<li><strong>51 Degrees (points to WURFL)</strong></li>
</ul>
</li>
<li><strong>Client-side device capability detection</strong>
<ul><strong>browser name == navigator.appName</strong></p>
<p><strong>var screenSize = screen.width + &#8221; x &#8221; + screen.height;</strong></p>
<p><strong>cookies == navigator.cookieEnabled</strong></p>
<p><strong>browser version == navigator.appVersion</strong></p>
<p><strong>user agent header == navigator.userAgent</strong></ul>
</li>
<li><strong>Detect modern DOM</strong></li>
</ul>
<p style="padding-left: 60px;"><strong>function hasModernDOM()</strong></p>
<p style="padding-left: 60px;"><strong>{</strong></p>
<p style="padding-left: 90px;"><strong> // Check for support of DOM Level 1 functions</strong></p>
<p style="padding-left: 90px;"><strong> if (document.getElementById &amp;&amp; document.getElementsByTagName)</strong></p>
<p style="padding-left: 90px;"><strong> return true;</strong></p>
<p style="padding-left: 90px;"><strong> return false;</strong></p>
<p style="padding-left: 60px;"><strong>}</strong></p>
<ul>
<li><strong>Don’t assume…test for object existence</strong></li>
</ul>
<p style="padding-left: 60px;"><strong>if (object)</strong></p>
<p style="padding-left: 60px;"><strong>{</strong></p>
<p style="padding-left: 90px;"><strong> // object available</strong></p>
<p style="padding-left: 60px;"><strong>}</strong></p>
<ul>
<li><strong>Determine device orientation</strong></li>
</ul>
<p style="padding-left: 60px;"><strong>if (window.orientation)</strong></p>
<p style="padding-left: 60px;"><strong>{</strong></p>
<p style="padding-left: 90px;"><strong> if (window.orientation == 90 || window.orientation == -90)</strong></p>
<p style="padding-left: 90px;"><strong> return “landscape”;</strong></p>
<p style="padding-left: 90px;"><strong> else return “portrait”;</strong></p>
<p style="padding-left: 60px;"><strong>}</strong></p>
<ul>
<li><strong>Detect AJAX capabilities</strong></li>
</ul>
<p style="padding-left: 60px;"><strong>if (window.XMLHttpRequest)</strong></p>
<p style="padding-left: 60px;"><strong>{</strong></p>
<p style="padding-left: 90px;"><strong> return new XMLHttpRequest();</strong></p>
<p style="padding-left: 60px;"><strong>} else try {</strong></p>
<p style="padding-left: 90px;"><strong> return new ActiveXObject(‘Msxml2.XMLHTTP’);</strong></p>
<p style="padding-left: 60px;"><strong>}catch(e) {</strong></p>
<p style="padding-left: 90px;"><strong> try {</strong></p>
<p style="padding-left: 120px;"><strong> return new ActiveXObject(“Microsoft.XMLHTTP”);</strong></p>
<p style="padding-left: 90px;"><strong> } catch (e) {</strong></p>
<p style="padding-left: 90px;"><strong> return null;</strong></p>
<p style="padding-left: 90px;"><strong> }</strong></p>
<p style="padding-left: 60px;"><strong>}</strong></p>
<ul>
<li><strong>Viewport</strong>
<ul>
<li><strong>Prevent mobile browsers from displaying desktop-optimized markup</strong></li>
</ul>
<ul>
<li><strong>&lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0, user-scalable=no&#8221; /&gt;</strong></li>
</ul>
</li>
<li><strong>Internet Explorer Mobile adaptation  &lt;meta name=&#8221;MobileOptimized&#8221; content=&#8221;width&#8221; /&gt;</strong></li>
<li><strong>Blackberry adaptation  &lt;meta name=&#8221;HandheldFriendly&#8221; content=&#8221;true&#8221; /&gt;</strong></li>
</ul>
<p>&nbsp;</p>
<h1><span style="color: #ff0000;">&lt;optimizations /&gt;</span></h1>
<p><span style="color: #ff0000;"><br />
</span></p>
<ul>
<li><strong>Minify XHTML, CSS and JavaScript</strong>
<ul>
<li><strong>Remove non-useful tags</strong></li>
</ul>
<ul>
<li><strong>Remove comments</strong></li>
</ul>
<ul>
<li><strong>Remove spaces</strong></li>
</ul>
<ul>
<li><strong>Use YUI compressor to compress HTML</strong></li>
<li><strong>Use jsmin to compress JavaScript</strong></li>
</ul>
</li>
<li><strong>Use Yahoo YSlow to analyze website performance</strong></li>
<li><strong>Validate your site with W3C mobileOK Checker at http://validator.w3.org/mobile/</strong></li>
<li><strong>Some DOM thoughts</strong>
<ul>
<li><strong>Avoid large DOM frameworks like JQuery</strong></li>
</ul>
<ul>
<li><strong>Most DOM frameworks lock you into Webkit</strong></li>
</ul>
<ul>
<li><strong>DOM frameworks use extra system memory and JavaScript libraries and CSS take longer to download</strong></li>
</ul>
<ul>
<li><strong>Keep small and uncomplex DOM for fast manipulation</strong></li>
</ul>
</li>
<li><strong>Enable Web server compression (GZip/Deflate)</strong></li>
<li><strong>Cache for performance</strong></li>
</ul>
<p style="padding-left: 60px;"><strong>//Timed caching for freshness since last request:</strong></p>
<p style="padding-left: 60px;"><strong>Response.AddHeader(&#8220;Cache-Control&#8221;, “max-age=3600&#8243;);</strong></p>
<p style="padding-left: 60px;"><strong>Response.OutputCache(3600);</strong></p>
<p style="padding-left: 60px;"><strong>//Request always goes to origin server for validation:</strong></p>
<p style="padding-left: 60px;"><strong>Response.AddHeader(&#8220;Cache-Control&#8221;, &#8220;no-cache&#8221;);</strong></p>
<p style="padding-left: 60px;"><strong>//Instructs caches not to store sensitive data:</strong></p>
<p style="padding-left: 60px;"><strong>Response.AddHeader(&#8220;Cache-Control&#8221;, &#8220;no-store&#8221;);</strong></p>
<ul>
<li><strong>Conserve battery life</strong>
<ul>
<li><strong>No auto-refreshing</strong></li>
</ul>
<ul>
<li><strong>Be smart about JavaScript usage</strong></li>
</ul>
</li>
<li><strong>The scourge of Transcoders</strong>
<ul>
<li><strong>They are proxies that reformat desktop web pages</strong></li>
</ul>
<ul>
<li><strong>They might add mobile operator navigation bar to each page</strong></li>
</ul>
<ul>
<li><strong>They might inject advertising from unknown sources</strong></li>
</ul>
<ul>
<li><strong>They might replace original graphics with smaller/low res images</strong></li>
</ul>
<ul>
<li><strong>Maintain your page integrity:</strong></li>
</ul>
</li>
</ul>
<p style="padding-left: 60px;"><strong>Response.AddHeader(&#8220;Cache-Control&#8221;, &#8220;no-transform&#8221;)</strong></p>
<ul>
<li><strong>Reduce number of linked resources</strong>
<ul>
<li><strong>Use only one JavaScript file</strong></li>
</ul>
<ul>
<li><strong>Use only one CSS file</strong></li>
</ul>
<ul>
<li><strong>Use only one Cookie</strong></li>
</ul>
<ul>
<li><strong>Check for and eliminate duplicate scripts</strong></li>
</ul>
</li>
<li><strong>No client-side redirecting</strong></li>
<li><strong>Empty strings can cause unnecessary HTTP requests to the server</strong>
<ul>
<li><strong>&lt;script src=” ”&gt;</strong></li>
</ul>
<ul>
<li><strong>&lt;link href=” ”&gt;</strong></li>
</ul>
<ul>
<li><strong>&lt;img src=” ”&gt;</strong></li>
</ul>
</li>
<li><strong>Link to JavaScript at bottom of page so page loads before download/loading JavaScript file</strong></li>
<li><strong>Above all, keep pages &lt; 20 k  (Yeah, I said 20 k)</strong></li>
</ul>
<p>&nbsp;</p>
<h1><span style="color: #ff0000;">&lt;what do I like best about the mobile web /&gt;</span></h1>
<p><span style="color: #ff0000;"><br />
</span></p>
<ul>
<li><strong>It allows me to bypass App Stores and Marketplaces to reach consumers and the enterprise directly</strong></li>
<li><strong>I can reach more users, at a lower cost, with just a single web app</strong></li>
<li><strong>It taps into the HTML, CSS, JavaScript and ASP.NET skills that more people have</strong></li>
<li><strong>It&#8217;s a real W3C Recommendation unlike HTML5 which means it&#8217;s supported by more smartphones and feature phones</strong></li>
<li><strong>It allows me to reach the billions of people in the developing world that can&#8217;t afford an iPhone</strong></li>
<li><strong>It brings simple mobile commerce to everyone</strong></li>
<li><strong>It allows me to push educational content to any child with a mobile phone (there&#8217;s a landfill of feature phones for the kids who don&#8217;t already have one)</strong></li>
<li><strong>Oh, and this lightweight, simple, and fast content is great for XO Laptops (OLPC) and underpowered Netbooks (that same landfill has old laptops too)</strong></li>
</ul>
<h1><span style="color: #ff0000;">&lt;we&#8217;re done /&gt;</span></h1>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/mobile-web-facts-and-best-practices/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7 Demo Fest Tech Ed Video</title>
		<link>http://robtiffany.com/windows-phone-7-demo-fest-tech-ed-video/</link>
		<comments>http://robtiffany.com/windows-phone-7-demo-fest-tech-ed-video/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 21:21:55 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Exchange Server]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=398</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/wph103-lnc.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/windows-phone-7-demo-fest-tech-ed-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://ecn.channel9.msdn.com/o9/te/Europe/2010/wmv/wph103-lnc.wmv" length="139729637" type="video/asf" />
		</item>
		<item>
		<title>The Windows Phone 7 Mobile Enterprise Application Platform (MEAP) Tech Ed Video</title>
		<link>http://robtiffany.com/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-video/</link>
		<comments>http://robtiffany.com/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-video/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 21:11:29 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[Windows Phone 7 Developer Tools]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Middleware]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[Sync Framework]]></category>
		<category><![CDATA[Visual Studio 2010 Express for Windows Phone]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=395</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/wph212-lnc.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/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://ecn.channel9.msdn.com/o9/te/Europe/2010/wmv/wph212-lnc.wmv" length="65167819" type="video/asf" />
		</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>Come and Meet the Windows Phone 7 Team @ Tech Ed Europe 2010</title>
		<link>http://robtiffany.com/come-and-meet-the-windows-phone-7-team-tech-ed-europe-2010/</link>
		<comments>http://robtiffany.com/come-and-meet-the-windows-phone-7-team-tech-ed-europe-2010/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 15:52:10 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Expression Blend]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[Mobile Middleware]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio 2010 Express for Windows Phone]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=369</guid>
		<description><![CDATA[Do you have a burning question related to Windows Phone?  Are you unsure, confused or need more information?  Do you have feedback you want to share?  Whatever your motivation, this session is not to be missed.  For one time only &#8230; <a href="http://robtiffany.com/come-and-meet-the-windows-phone-7-team-tech-ed-europe-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>Do you have a burning question related to <strong>Windows Phone</strong>?  Are you unsure, confused or need more information?  Do you have feedback you want to share?  Whatever your motivation, this session is not to be missed.  For one time only at Tech Ed Europe 2010, you will have virtually all the Windows Phone speakers in one room to answer your questions, listen to your feedback and discuss anything Windows Phone 7!  This session has proven to be very lively in the past and with such a great platform to talk about, we expect it to be even more so this year!</div>
<p></p>
<div>Come spend some time with <strong>me</strong>, <strong>Augusto Valdez</strong>, <strong>Daniel Bouie</strong>, <strong>Jaime Rodriguez</strong>, <strong>Larry Lieberman</strong>, and <strong>Maarten Struys</strong> at session <strong>WPH117-IS</strong>  next week in <strong>Berlin at <a href="http://europe.msteched.com/default.aspx" target="_blank">Tech Ed Europe 2010</a></strong>!</div>
<div>-Rob</div>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/come-and-meet-the-windows-phone-7-team-tech-ed-europe-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Windows Phone 7 Mobile Enterprise Application Platform (MEAP) @ Tech Ed Europe 2010</title>
		<link>http://robtiffany.com/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-europe-2010/</link>
		<comments>http://robtiffany.com/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-europe-2010/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 18:18:53 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile Enterprise Application Platform]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile Middleware]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=364</guid>
		<description><![CDATA[A Mobile Enterprise Application Platform (MEAP) allows corporate IT departments to support multiple mobile applications on a single platform. Gartner states that this market currently tops $1 billion, and forecasts that 95% of the world&#8217;s organizations will standardize on a &#8230; <a href="http://robtiffany.com/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-europe-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A Mobile Enterprise Application Platform (MEAP) allows corporate IT departments to support multiple mobile applications on a single platform. Gartner states that this market currently tops $1 billion, and forecasts that 95% of the world&#8217;s organizations will standardize on a single MEAP offering by 2012. Companies looking for a better ROI are moving to reusable platforms instead of building tactical, ad-hoc mobile solutions that support only a single app.</p>
<p>Attendees of this session will learn how to save money by steering away from point solutions and moving on to Microsoft&#8217;s MEAP stack. Come see what Microsoft&#8217;s Next-Gen Mobile Enterprise Application Platform looks like, and learn how it will support the cloud and a broader range of mobile platforms and operating systems, including Windows Phone 7.</p>
<div>Come check out session <strong>WPH212-LNC</strong> and I’ll see you next week in <strong>Berlin at <a href="http://europe.msteched.com/default.aspx" target="_blank">Tech Ed Europe 2010</a></strong>!</div>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/the-windows-phone-7-mobile-enterprise-application-platform-meap-tech-ed-europe-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing Cloud Connected Applications for Windows Phone 7 @ Tech Ed Europe 2010</title>
		<link>http://robtiffany.com/developing-cloud-connected-applications-for-windows-phone-7-tech-ed-europe-2010/</link>
		<comments>http://robtiffany.com/developing-cloud-connected-applications-for-windows-phone-7-tech-ed-europe-2010/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 17:42:20 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=357</guid>
		<description><![CDATA[The Silverlight development environment has proven itself to be a rich, capable and adaptable runtime that has reached across platforms to support Windows, the Mac, the Web, Nokia and Windows Phone 7.  Azure is Microsoft’s powerful cloud offering that brings compute, &#8230; <a href="http://robtiffany.com/developing-cloud-connected-applications-for-windows-phone-7-tech-ed-europe-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>The Silverlight development environment has proven itself to be a rich, capable and adaptable runtime that has reached across platforms to support Windows, the Mac, the Web, Nokia and Windows Phone 7.  Azure is Microsoft’s powerful cloud offering that brings compute, database, storage, and web services to Windows Phone 7 devices.</div>
<p></p>
<div>To ensure the best experience for mobile users, apps built for Windows Phone 7 must implement an occasionally-connected pattern of development that might be unfamiliar to Silverlight developers for the other platforms.  In this session, learn how to build mobile apps that adjust their behavior based on changing network conditions.  Also learn how to conquer unreliable wireless networks by implementing RESTful principles to ensure your messages are both compact and fast.  Then take those WCF REST + JSON Azure services and use them to retrieve SQL Azure tables, rows and columns in order to drive the behavior of your mobile applications.  Finally, learn how to build an in-memory database that you can query with LINQ and save its data to Isolated Storage to ensure that your Windows Phone apps keep working regardless of network conditions.</div>
<p></p>
<div>Come check out session <strong>WPH304-IS</strong> and I’ll see you next week in <strong>Berlin at <a href="http://europe.msteched.com/default.aspx" target="_blank">Tech Ed Europe 2010</a></strong>!</div>
<div>
<p>-Rob</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/developing-cloud-connected-applications-for-windows-phone-7-tech-ed-europe-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7 Line of Business App Dev :: Consuming an Azure WCF REST + JSON Service</title>
		<link>http://robtiffany.com/windows-phone-7-line-of-business-app-dev-consuming-an-azure-wcf-rest-json-service/</link>
		<comments>http://robtiffany.com/windows-phone-7-line-of-business-app-dev-consuming-an-azure-wcf-rest-json-service/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 03:40:25 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Emulator]]></category>
		<category><![CDATA[Isolated Storage]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[ObservableCollection]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Singleton]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>
		<category><![CDATA[Visual Studio 2010 Express for Windows Phone]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WebClient]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://robtiffany.com/windows-phone-7/windows-phone-7-line-of-business-app-dev-consuming-an-azure-wcf-rest-json-service</guid>
		<description><![CDATA[In my last two articles, I showed you how to build WCF REST services using Visual Studio 2010 that can reside on-premise in Windows Server 2008 or in the Cloud in Windows Azure.&#160; Furthermore, I demonstrated pulling data from a &#8230; <a href="http://robtiffany.com/windows-phone-7-line-of-business-app-dev-consuming-an-azure-wcf-rest-json-service/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last two articles, I showed you how to build <strong>WCF REST</strong> services using <strong>Visual Studio 2010</strong> that can reside <strong>on-premise</strong> in <strong>Windows Server 2008</strong> or in the <strong>Cloud</strong> in <strong>Windows Azure</strong>.&#160; Furthermore, I demonstrated pulling data from a table in <strong>SQL Server/SQL Azure</strong>.&#160; I <strong>serialized .NET Objects</strong> using lightweight <strong>JSON</strong> to speed data transfers over even the slowest wireless data networks.&#160; Now it’s time to call that <strong>REST</strong> service from <strong>Windows Phone 7</strong>.</p>
<p>Launch <strong>VS2010</strong> and open the solution you created to build the <strong>WCF Service Web Role</strong> in <strong>Azure</strong> last time.&#160; Right-click on the solution and add a <strong>Windows Phone Application project</strong>.&#160; Change the name to <strong>ContosoPhone</strong>.</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2010/10/WP71.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="WP71" border="0" alt="WP71" src="http://robtiffany.com/wp-content/uploads/2010/10/WP71_thumb.png" width="644" height="365" /></a></p>
<p>Part of the magic of making all this work is to have both the <strong>Azure Development Fabric</strong> and the <strong>Windows Phone 7 project</strong> start when it comes time to debug.&#160; Most developers are accustomed to only having a single startup project so let’s make sure you have everything we need running when you hit F5.&#160; Right-click on the solution and select Properties.&#160; Select <strong>Startup Project</strong> and then click on the<strong> Multiple startup projects</strong> radio button.&#160; Set both the <strong>AzureRestService</strong> and <strong>ContosoPhone</strong> projects <strong>Action</strong> value to <strong>Start</strong> and click OK as shown below:</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2010/10/WP72.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="WP72" border="0" alt="WP72" src="http://robtiffany.com/wp-content/uploads/2010/10/WP72_thumb.png" width="644" height="405" /></a></p>
<p>With the startup configuration complete, the next thing I want you to do is copy <strong>Customer.cs</strong> from the <strong>AzureRestService</strong> <strong>project</strong> to the new <strong>ContosoPhone</strong> <strong>project</strong> since you’ll need it to create local Customer objects when you retrieve the data from the WCF call.&#160; In this new <strong>Customer</strong> class you’ll need to change the <strong>Namespace</strong> to <strong>ContosoPhone</strong> and remove <strong>using System.Web;</strong> at the top of the class.&#160; In order to support the <strong>DataContract()</strong> and <strong>DataMember()</strong> attributes, you’ll need to add a reference to <strong>System.Runtime.Serialization</strong> in order to get it to compile.</p>
<p>Drag a Button on to your MainPage.xaml and call it Test.&#160; Double-click on this Button and add the following WebClient code to the click event:</p>
<p><font size="1"><strong>try       <br />{        <br />&#160;&#160;&#160; WebClient webClient = new WebClient();        <br />&#160;&#160;&#160; Uri uri = new Uri(&quot;</strong></font><a href="http://127.0.0.1:48632/service1.svc/getdata?number=8&quot;);"><font size="1"><strong>http://127.0.0.1:48632/service1.svc/getdata?number=8&quot;);</strong></font></a>    <br /><font size="1"><strong>&#160;&#160;&#160; webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTest);       <br />&#160;&#160;&#160; webClient.OpenReadAsync(uri);        <br />}        <br />catch (Exception ex)        <br />{        <br />&#160;&#160;&#160; MessageBox.Show(ex.Message);        <br />}</strong></font></p>
<p>As you can see above, I create a <strong>WebClient</strong> and a <strong>Uri</strong> object that points to the local Url presented by the <strong>Azure Development Fabric</strong>.&#160; The port number my be different on your machine so double-check.&#160; This is the test <strong>REST</strong> service from the last article used to prove that you’re calls are making it through.&#160; You’ve made this call with your web browser and <strong>Windows Phone 7</strong> will call it the same way.&#160; Since all calls are <strong>asynchronous</strong> and the <strong>WebClient</strong> above created an event handler, copy the following code into the <strong>MainPage</strong> class and make sure to add <strong>using System.IO;</strong> at the top:</p>
<p><font size="1"><strong>void OpenReadCompletedTest(object sender, OpenReadCompletedEventArgs e)       <br />{        <br />&#160;&#160;&#160; try        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; StreamReader reader = new System.IO.StreamReader(e.Result);        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; MessageBox.Show(reader.ReadToEnd().ToString());        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; reader.Close();        <br />&#160;&#160;&#160; }        <br />&#160;&#160;&#160; catch (Exception ex)        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; MessageBox.Show(ex.Message);        <br />&#160;&#160;&#160; }        <br />}</strong></font></p>
<p>In the event handler above, I use the <strong>StreamReader</strong> to grab the entire <strong>XML</strong> return value.&#160; The fact that I’m using <strong>WebClient</strong> means that <strong>callbacks</strong> are run on the <strong>UI thread</strong> thus relieving you of the need to use the dispatcher to update the UI.&#160; This allows you to display the following XML string in the MessageBox:</p>
<p><strong><font size="2">&lt;string xmlns=&quot;http://schemas.microsoft.com/2003/10/Serialization/&quot;&gt;You entered: 8&lt;/string&gt;</font></strong></p>
<p>It’s time to try this thing out so hit F5.&#160; If it compiles and everything executes properly, you should see both a <strong>web browser</strong> pointing to the root of your Azure services as well as your <strong>emulator</strong> and you can test your services with both.&#160; Click the simple<strong> Test Button</strong> on your <strong>Silverlight MainPage</strong> and the <strong>MessageBox</strong> should pop up after the XML result is returned from Azure displaying the answer:</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2010/10/WP73.png"><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="WP73" border="0" alt="WP73" src="http://robtiffany.com/wp-content/uploads/2010/10/WP73_thumb.png" width="255" height="484" /></a></p>
<p>Click the Back button on the <strong>Emulator</strong> to close your app and close the web browser window to shut down Azure.&#160; </p>
<p>Now it’s time to do something a little more ambitious like return the <strong>JSON-encoded</strong> list of Customers from <strong>SQL Azure</strong>.&#160; Unlike most books and articles on <strong>Silverlight</strong> and <strong>RIA Services</strong> that you may have read, I’m not going to return this data and immediately <strong>data-bind</strong> it to a control.&#160; As a long-time <strong>mobile and wireless</strong> guy that understands <strong>intermittent connectivity</strong> and the importance of an <strong>offline data store</strong>, I’m going to have you put this data in a local database first.&#160; Since <strong>SQL Server Compact</strong> is nowhere to be found and I don’t want you going off and using a <strong>3rd party</strong> or <strong>open source embedded database</strong>, I’m going to show you how to create a simple one of your own.</p>
<p>Right-click on your <strong>ContosoPhone</strong> project and select <strong>Add</strong> | <strong>Class</strong>.&#160; Name this new class <strong>Database</strong>.&#160; </p>
<p><a href="http://robtiffany.com/wp-content/uploads/2010/10/WP74.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="WP74" border="0" alt="WP74" src="http://robtiffany.com/wp-content/uploads/2010/10/WP74_thumb.png" width="644" height="397" /></a></p>
<p>You’re going to turn this class into a <strong>Singleton</strong> to create an<strong> in-memory database</strong> which will ensure that only instance is available.&#160; For simplicity’s sake, just copy the code below into the new Database class:</p>
<p><font size="1"><strong>using System;       <br />using System.Net;        <br />using System.Windows;        <br />using System.Collections.Generic;        <br />using System.Collections.ObjectModel;</strong></font></p>
<p><font size="1"><strong>namespace ContosoPhone       <br />{        <br />&#160;&#160;&#160; sealed class Database        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Declare Instance        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; private static readonly Database instance = new Database();</strong></font></p>
<p><font size="1"><strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Private Constructor       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; private Database() { }</strong></font></p>
<p><font size="1"><strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160; //The entry point into this Database       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public static Database Instance        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; get        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return instance;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</strong></font></p>
<p><font size="1"><strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Declare Private Variables       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; private ObservableCollection&lt;Customer&gt; customerTable = null;</strong></font></p>
<p><font size="1"><strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Customer Table       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public ObservableCollection&lt;Customer&gt; Customers        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; get { return customerTable; }        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; set { customerTable = value; }        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }        <br />&#160;&#160;&#160; }        <br />}</strong></font></p>
<p>As you can see above, I’ve had you create a <strong>sealed</strong> <strong>class</strong> with a <strong>private</strong>, <strong>static</strong>, <strong>readonly</strong> <strong>constructor</strong> as an entry point following a popular .NET method of implementing a <strong>Singleton</strong>.&#160; The big thing here is the <strong>Customers</strong> property of type <strong>ObservableCollection&lt;Customer&gt;</strong>.&#160; Since each Customer object is a <strong>Row</strong> with properties that are <strong>Columns</strong>, then it’s easy to think of this <strong>ObservableCollection</strong> of these <strong>Customer</strong> objects as a <strong>Table</strong>.&#160; You now have the beginnings of a simple, in-memory database with which to store all the Customer objects when they arrive from the <strong>Cloud</strong>.</p>
<p>Start out by dragging another button on to <strong>MainPage.xaml</strong> and calling it <strong>Get Customers</strong>.&#160; Double-click on this Button and add the following <strong>WebClient</strong> code to the click event:</p>
<p><font size="1"><strong>try       <br />{        <br />&#160;&#160;&#160; WebClient webClient = new WebClient();        <br />&#160;&#160;&#160; Uri uri = new Uri(&quot;</strong></font><a href="http://127.0.0.1:48632/service1.svc/customers&quot;);"><font size="1"><strong>http://127.0.0.1:48632/service1.svc/customers&quot;);</strong></font></a>    <br /><font size="1"><strong>&#160;&#160;&#160; webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedCustomers);       <br />&#160;&#160;&#160; webClient.OpenReadAsync(uri);        <br />}        <br />catch (Exception ex)        <br />{        <br />&#160;&#160;&#160; MessageBox.Show(ex.Message);        <br />}</strong></font></p>
<p>You’ll notice that it looks almost identical to the previous <strong>WebClient</strong> call except this time you’re just adding <strong>/customers</strong> to the end of <strong>service1.svc</strong>.&#160; The beauty of the <strong>UriTemplate</strong> is that Microsoft makes it just that easy to call a REST service from WCF.&#160; Since the above code created an event handler, paste this following code into the MainPage class to handle the callback:</p>
<p><font size="1"><strong>void OpenReadCompletedCustomers(object sender, OpenReadCompletedEventArgs e)       <br />{        <br />&#160;&#160;&#160; DataContractJsonSerializer ser = null;</strong></font></p>
<p><font size="1"><strong>&#160;&#160;&#160; try       <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ser = new DataContractJsonSerializer(typeof(ObservableCollection&lt;Customer&gt;));        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Database.Instance.Customers = ser.ReadObject(e.Result) as ObservableCollection&lt;Customer&gt;;        <br />&#160;&#160;&#160; }        <br />&#160;&#160;&#160; catch (Exception ex)        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; MessageBox.Show(ex.Message);        <br />&#160;&#160;&#160; }        <br />}</strong></font></p>
<p>You’ll immediately see a bunch of <strong>squiggly lines</strong> telling you something is missing.&#160; Add a <strong>reference</strong> to <strong>System.Servicemodel.Web</strong> and then add <strong>using</strong> <strong>System.Runtime.Serialization.Json;</strong> at the top in order to fix the problems with <strong>DataContractJsonSerializer</strong>.&#160; Next add <strong>using System.Collections.ObjectModel;</strong> at the top to fix the <strong>ObservableCollection</strong> squigglies.&#160; Give your solution a quick Rebuild to ensure that everything compiles.</p>
<p>In analyzing the new code I just had you add, you’ll notice the use of <strong>DataContractJsonSerializer</strong> which in this case is used to <strong>de-serialize JSON-encoded Customer objects</strong> that are downloading over the air.&#160; It does this by casting them as <strong>ObservableCollection&lt;Customer&gt;</strong> which works because I had you copy that class from the <strong>AzureRestService</strong> project.&#160; In a world of right-clicking to add a <strong>Service/Web Reference</strong> to consume <strong>SOAP</strong> web services, you never had to know what was going on under the covers to create an easy to use proxy.&#160; You also never saw Visual Studio create hidden classes that looked just like the ones found on the server side so your client would have something to work with and so that intellisense worked.&#160; </p>
<p>The last important line of code you see is setting the Customers table of your in-memory database equal to the de-serialization of the <strong>OpenReadCompletedEventArgs</strong>.&#160; I think we’re ready to try out this code.&#160; If all goes well, you’ll have a bunch of downloaded Customer data stored in an <strong>in-memory database</strong> on <strong>Windows Phone 7</strong>.</p>
<p>Set a <strong>breakpoint</strong> at the <strong>declaration</strong> of the <strong>DataContractJsonSerializer</strong>, hit <strong>F5</strong>, and click the <strong>Get Customers</strong> button!</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2010/10/WP75.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="WP75" border="0" alt="WP75" src="http://robtiffany.com/wp-content/uploads/2010/10/WP75_thumb.png" width="644" height="365" /></a>    </p>
<p>Success looks like the picture above!&#160; I hovered my mouse over <strong>Database.Instance.Customers</strong> and revealed that I was now storing <strong>Customers</strong> with <strong>Cities</strong>, <strong>CustomerId’s</strong>, <strong>PostalCodes</strong>, <strong>RouteId’s</strong> and <strong>StateProvinces</strong> for all to see in<strong> Visual Studio’s</strong> amazing debugger.</p>
<p>You are now consuming <strong>wireless-friendly</strong> <strong>WCF REST + JSON Services</strong> from both <strong>Windows Server</strong> and <strong>Windows Azure</strong> with data coming from <strong>SQL Server/SQL Azure</strong>.&#160; Windows Phone 7 is connected to tiny, fast, efficient services designed to thrive in unreliable/slow wireless coverage.&#160; You now know how to serialize/de-serialize .NET objects as JSON and you’ve also created your own in-memory database.</p>
<p>So what’s next?&#160; In my next article, I’ll show you how to <strong>query</strong> this new in-memory database using <strong>LINQ</strong> and I’ll show you how to <strong>save the data</strong> in your local tables to <strong>Isolated Storage</strong> so you can keep using your apps even when the network has disappeared.    </p>
<p>Keep coding and I’ll see everyone at Tech Ed in Berlin!</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/windows-phone-7-line-of-business-app-dev-consuming-an-azure-wcf-rest-json-service/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ray Ozzie sees the Dawn of a New Day for Microsoft</title>
		<link>http://robtiffany.com/ray-ozzie-sees-the-dawn-of-a-new-day-for-microsoft/</link>
		<comments>http://robtiffany.com/ray-ozzie-sees-the-dawn-of-a-new-day-for-microsoft/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 17:06:41 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[4G]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Connected Devices]]></category>
		<category><![CDATA[Continuous Services]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[LTE]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Office 365]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[Ray Ozzie]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[Whitespace]]></category>
		<category><![CDATA[Wi-Fi]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[Xbox Live]]></category>

		<guid isPermaLink="false">http://robtiffany.com/azure/ray-ozzie-sees-the-dawn-of-a-new-day-for-microsoft</guid>
		<description><![CDATA[Five years after Ray Ozzie penned The Internet Services Disruption, he reflects on Microsoft’s move to the cloud.&#160; While he’s most proud of Windows Azure and SQL Azure, he also gives our competitors their due by mentioning that they have &#8230; <a href="http://robtiffany.com/ray-ozzie-sees-the-dawn-of-a-new-day-for-microsoft/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Five years after Ray Ozzie penned <a href="http://ozzie.net/docs/the-internet-services-disruption/" target="_blank">The Internet Services Disruption</a>, he reflects on Microsoft’s move to the cloud.&#160; While he’s most proud of Windows Azure and SQL Azure, he also gives our competitors their due by mentioning that they have out-executed us when it comes to mobile experiences.&#160; He harps on the subject of how complexity kills and then challenges us to close our eyes and form a realistic picture of what a <em>post-PC world</em> might actually look like.</p>
<p><a href="http://robtiffany.com/wp-content/uploads/2010/10/rayozzie.jpg"><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="rayozzie" border="0" alt="rayozzie" src="http://robtiffany.com/wp-content/uploads/2010/10/rayozzie_thumb.jpg" width="244" height="184" /></a></p>
<p>Ray goes on to state that those who can envision a plausible future that’s brighter than today will earn the opportunity to lead.&#160; His ultimate dream is to move us toward a world of :</p>
<ul>
<li>Cloud-based <strong>c<em>ontinuous services</em></strong> that connect us all and do our bidding.&#160; These are websites and cloud-based agents that we can rely on for more and more of what we do.&#160; On the back end, they possess attributes enabled by our newfound world of cloud computing: They’re always-available and are capable of unbounded scale. </li>
<li>Appliance-like <strong><em>connected devices</em></strong> enabling us to interact with those cloud-based services.&#160; This goes beyond the PC and will increasingly come in a breathtaking number of shapes and sizes, tuned for a broad variety of communications, creation &amp; consumption tasks.&#160; Each individual will interact with a fairly good number of these connected devices on a daily basis – their phone / internet companion; their car; a shared public display in the conference room, living room, or hallway wall. </li>
</ul>
<p>&#160;</p>
<p>As a Mobility Architect at Microsoft, I’m excited that my commitments align with this vision in connecting the Peanut Butter of the Cloud with the Chocolate of devices.&#160; Wireless data networks, bandwidth, latency and signal coverage are the wildcards when it comes to making this vision a reality.&#160; That’s why you’ll always see my concern for this Wireless wildcard reveal itself in all the Cloud-connected mobile architectures I design.</p>
<p>Check out the rest of Ray’s new memo at <a title="http://ozzie.net/docs/dawn-of-a-new-day/" href="http://ozzie.net/docs/dawn-of-a-new-day/">http://ozzie.net/docs/dawn-of-a-new-day/</a>.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/ray-ozzie-sees-the-dawn-of-a-new-day-for-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

