<?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</title>
	<atom:link href="http://robtiffany.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://robtiffany.com</link>
	<description>Author, Mobility Strategist at Microsoft, Speaker, Advisor, Technology Executive, Former Navy Submariner</description>
	<lastBuildDate>Wed, 16 May 2012 01:19:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Last Resort</title>
		<link>http://robtiffany.com/last-resort/</link>
		<comments>http://robtiffany.com/last-resort/#comments</comments>
		<pubDate>Wed, 16 May 2012 01:19:09 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Submarine]]></category>
		<category><![CDATA[Navy]]></category>
		<category><![CDATA[Submarines]]></category>
		<category><![CDATA[Trident]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1840</guid>
		<description><![CDATA[Hey Submarine Warriors! A new show about a Trident submarine that&#8217;s gone rogue and is being hunted down by its own country is coming to television on ABC. This story line should sound very familiar. Check out the trailer. It&#8217;s &#8230; <a href="http://robtiffany.com/last-resort/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hey Submarine Warriors! A new show about a Trident submarine that&#8217;s gone rogue and is being hunted down by its own country is coming to television on ABC. This story line should sound very familiar. Check out the trailer. It&#8217;s amazing!</p>
<p><iframe src="http://www.youtube.com/embed/lDSttA64KGU" frameborder="0" width="560" height="315"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/last-resort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview at the Independent Author Network</title>
		<link>http://robtiffany.com/interview-at-the-independent-author-network/</link>
		<comments>http://robtiffany.com/interview-at-the-independent-author-network/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 16:38:21 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Writing]]></category>
		<category><![CDATA[writing]]></category>
		<category><![CDATA[Young Adult]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1834</guid>
		<description><![CDATA[Just wanted to pass along that my interview with the Independent Author Network has been published over at http://www.indieauthorsnetwork.com/2012/04/rob-tiffany-ian-interview.html. As you might imagine, we discussed my latest action/adventure novel for Young Adults, &#8220;Submarine Warriors &#62; The Enemy Beneath.&#8221; In the interview you&#8217;ll discover: &#8230; <a href="http://robtiffany.com/interview-at-the-independent-author-network/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Just wanted to pass along that my interview with the Independent Author Network has been published over at <a title="Independent Author Network" href="http://www.indieauthorsnetwork.com/2012/04/rob-tiffany-ian-interview.html" target="_blank">http://www.indieauthorsnetwork.com/2012/04/rob-tiffany-ian-interview.html</a>.</p>
<p>As you might imagine, we discussed my latest action/adventure novel for Young Adults, &#8220;<a title="Submarine Warriors &gt; The Enemy Beneath" href="http://www.amazon.com/Submarine-Warriors-Enemy-Beneath-ebook/dp/B005OT3VD0/ref=sr_1_1?s=digital-text&amp;ie=UTF8&amp;qid=1335715375&amp;sr=1-1" target="_blank">Submarine Warriors &gt; The Enemy Beneath</a>.&#8221;</p>
<p>In the interview you&#8217;ll discover:</p>
<ul>
<li>What inspired me to write the book</li>
<li>How I approached the writing process</li>
<li>How this this book different from others in the same genre like Hunger Games or Harry Potter</li>
<li>That I&#8217;m currently working on the next book in the Submarine Warriors series</li>
<li>How I learned so much about the inner workings of submarines</li>
<li>How I ensured that the dialog in the novel had the right “voice” for young adult readers</li>
<li>How long it took to write Submarine Warriors</li>
</ul>
<p>As an added bonus, you&#8217;ll also get to read a 1,000 word excerpt from the novel.</p>
<p>I really encourage you to go check it out.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/interview-at-the-independent-author-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Mobile Sync with SQL Server 2012 and SQL Server Compact: Episode III</title>
		<link>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/</link>
		<comments>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 18:08:50 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Sync]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1758</guid>
		<description><![CDATA[Back in my first article, I showed you where to find Microsoft&#8217;s latest updates to the SQLCE and RDA technologies so you can begin synchronizing data with the new SQL Server 2012 (Denali) database.  Just imagine, you now have mobile &#8230; <a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Episode I" href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/" target="_blank">Back in my first article</a>, I showed you where to find Microsoft&#8217;s latest updates to the SQLCE and RDA technologies so you can begin synchronizing data with the new <em><strong>SQL Server 2012</strong></em> (Denali) database.  Just imagine, you now have mobile sync components that give you the flexibility to to work with SQL Server 7, 2000, 2005, 2008, and 2012 from your devices.  I&#8217;d say you have both your legacy and state-of-the-art bases covered.  <a title="Episode II" href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/" target="_blank">In the second article </a>you built both the server and client databases so now you&#8217;re ready to sync some data.</p>
<p>As I may have mentioned before, Remote Data Access (RDA) is the fastest and easiest way for your mobile devices to synchronize data with SQL Server - and then take it offline in SQL Server Compact.  It works on the simple premise of pulling and pushing data to and from SQL Server via the Server Agent which is running on the middle-tier IIS application server.  The Server Agent is able to communicate with SQL Server via an OLEDB connection string which is passed to it from your device application code:</p>
<p>string rdaConnection = @&#8221;Provider=SQLOLEDB;&#8221; +</p>
<p style="padding-left: 180px;">&#8220;Data Source=Machinename\\SQLExpress;&#8221; +</p>
<p style="padding-left: 180px;">&#8220;Initial Catalog = ContosoBottling;&#8221; +</p>
<p style="padding-left: 180px;"><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;">&#8220;User Id = sa;&#8221; +</span></span></p>
<p style="padding-left: 180px;">&#8220;Password = P@ssw0rd;&#8221;;</p>
<p>You&#8217;ll use this connection string over and over whether your pulling or pushing data so keep it handy.  Data is retrieved on a table-by-table basis using the Pull method of the SqlCeRemoteDataAccess object.  You would put the example code below in a method to retrieve a list of Distribution Centers from SQL Server:</p>
<p>using (SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess())</p>
<p>{</p>
<p style="padding-left: 30px;">rda.InternetUrl = &#8220;http://localhost/rda/sqlcesa35.dll&#8221;;</p>
<p style="padding-left: 30px;">rda.LocalConnectionString = &#8220;Data Source=ContosoBottling.sdf&#8221;;</p>
<p style="padding-left: 30px;">//Drop Table</p>
<p style="padding-left: 30px;">DropTable(&#8220;DistributionCenters&#8221;, rda.LocalConnectionString);</p>
<p style="padding-left: 30px;">//Pull Table</p>
<p style="padding-left: 30px;">rda.Pull(&#8220;DistributionCenters&#8221;,</p>
<p style="padding-left: 90px;">&#8220;SELECT DistributionCenterId, Name FROM DistributionCenters&#8221;,</p>
<p style="padding-left: 90px;">rdaConnection,</p>
<p style="padding-left: 90px;">RdaTrackOption.TrackingOnWithIndexes,</p>
<p style="padding-left: 90px;">&#8220;ErrorTable&#8221;);</p>
<p>}</p>
<p>Notice that the mobile device connects to the Server Agent on IIS by pointing to it via a URL.  After that, you assign a connection string that points to the local path of your SQLCE database.  For now, I want you to ignore the DropTable method, because I&#8217;ll cover it in a sec.  The Pull method is where the magic happens.  In the first parameter, you pass in the name of the local table you want to create as an argument.  This typically matches the name of the table you&#8217;re retrieving from SQL Server.  In the second parameter, you pass a standard SQL statement or call to stored procedure.  This is how you filter the data you want to download to the device.  I don&#8217;t want to see any SELECT *&#8217;s and I do expect to see appropriate use of the WHERE clause to reduce the amount of data downloaded.  Remember, this filtering allows you download lookup tables that apply to everyone, as well as tables with data that uniquely pertain to a specific user.  In the next parameter you pass in the OLEDB connection string I displayed at the beginning of the article.  The following parameter is where you decide if you want SQLCE to track changes or not, as well as whether to create the same indexes found on the server.  Indexes are typically always a good thing except for very small tables.  Download-only data won&#8217;t need change-tracking but your transactional stuff will.  This amazing feature allows offline users of your app to keep working in the absence of a network connection.  In the last parameter you specify the name of a table to auto-create to track any sync errors that may arise.</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/serverexplorer/" rel="attachment wp-att-1787"><img class="alignleft size-full wp-image-1787" title="ServerExplorer" src="http://robtiffany.com/wp-content/uploads/2012/04/ServerExplorer.png" alt="Server Explorer" width="243" height="205" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>After executing this code, I connected to the new SQLCE ContosoBottling bottling database on my Windows laptop using the Server Explorer in Visual Studio as shown above.  You can see that the ErrorTable and DistributionCenters tables were created locally.</p>
<p>So now let&#8217;s talk about that DropTable method.  RDA works on the premise of downloading complete table snapshots.  Unlike Merge Replication that downloads incremental changes from SQL Server, RDA re-downloads the entire table in order to make SQLCE aware of any server changes.  The catch is that you have to drop an existing local table before downloading an updated version from SQL Server.  Here&#8217;s how you do it:</p>
<p>private void DropTable(string tableName, string connectionString)</p>
<p>{</p>
<p style="padding-left: 30px;">using (SqlCeConnection cn = new SqlCeConnection(connectionString))</p>
<p style="padding-left: 30px;">{</p>
<p style="padding-left: 60px;">SqlCeCommand cmd = cn.CreateCommand();</p>
<p style="padding-left: 60px;">cmd.CommandText = String.Format(&#8220;SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = &#8216;{0}&#8217;&#8221;, tableName);</p>
<p style="padding-left: 60px;">cn.Open();</p>
<p style="padding-left: 60px;">if((int)cmd.ExecuteScalar() == 1)</p>
<p style="padding-left: 60px;">{</p>
<p style="padding-left: 90px;">cmd.CommandText = String.Format(&#8220;DROP TABLE {0}&#8221;, tableName);</p>
<p style="padding-left: 90px;">cmd.ExecuteNonQuery();</p>
<p style="padding-left: 60px;">}</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<p>You can see that I use SqlCeConnection and SqlCeCommand objects in order to query the INFORMATION_SCHEMA.TABLES database object.  If the return value of the query is 1, then you know that a table already exists.  This result leads you to execute a DROP TABLE statement so that the existing table is gone before the new one is downloaded.</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/localquery/" rel="attachment wp-att-1792"><img class="alignleft size-full wp-image-1792" title="LocalQuery" src="http://robtiffany.com/wp-content/uploads/2012/04/LocalQuery.png" alt="Local Query" width="603" height="206" /></a></p>
<p>&nbsp;</p>
<p>Right-clicking on DistributionCenters and selecting Show Table Data reveals that the Seattle and Redmond distribution centers and their associated uniqueidentifiers were downloaded to SQLCE from SQL Server 2012.</p>
<p>Right about now, I know you&#8217;re thinking that this whole process of dropping a table and re-downloading a new one in order to keep a mobile database up to date sounds wasteful.  I get it.  I also get all the heavyweight processes that are required by Merge Replication to figure out server changes for each device that synchronizes with SQL Server.  You have to weigh your options.  For instance, in boosting Merge Replication performance and scalability, one of the keys to success is maintaining a low Subscription Expiration value.  This value determines how long a mobile user can go without synchronizing her data before her subscription expires, which requires her to re-download an entire database from scratch.  Keeping a low value ensures that SQL Server doesn&#8217;t track too much performance-degrading metadata.  It also means that users might have to synchronize more frequently than business rules dictate.  The great thing about RDA is that the notion of a subscription doesn&#8217;t exist since it downloads table snapshots to keep mobile clients up to date.  This means users can download data to their devices and remain disconnected for an indefinite amount of time while capturing new data out in the field.  No expiration or degraded performance on SQL Server 2012.  This leads to infinitely greater scalability for your system.</p>
<p>In the most common mobile scenarios I see in business, laptops/devices download the data needed to perform work for a given day via Wi-Fi or cradled Ethernet.  Unless each of your downloaded tables are 100+ MB a piece, this shouldn&#8217;t be a big deal at these types of network speeds.  Most organizations roll their own web services to do the same thing and they don&#8217;t bat an eye at the amount of data they have to re-download with each web method call.  Heck, most companies I work with allow their devices to take all night to download the data needed for the next morning.</p>
<p>So after a user has spent some time in the field capturing new data or changing/deleting existing data, it&#8217;s time to push those tracked changes back up to SQL Server 2012.  This is the simplest code of all:</p>
<p>SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();</p>
<p>rda.InternetUrl = &#8220;http://localhost/rda/sqlcesa35.dll&#8221;;</p>
<p>rda.LocalConnectionString = &#8220;Data Source=ContosoBottling.sdf&#8221;;</p>
<p>rda.Push(&#8220;DistributionCenters&#8221;, rdaConnection, RdaBatchOption.BatchingOn);</p>
<p>For each table that you tracked changes for, you need to use the SqlCeRemoteDataAccess object and the Push method.  The first parameter should look familiar since it&#8217;s the name of the tracked table that you had previously Pulled.  The second parameter is the same OLEDB connection string we used in the Pull method.  The last one allows you to specify batching of uploads.  This feature gives you the transactional, all-or-nothing functionality of a message queue.  If any of the table data uploads fail, the whole transaction is rolled back.  This is a great feature to ensure data integrity.</p>
<p>Before you run this code, I want you to go back to the local SQLCE query result from the Server Explorer in Visual Studio and change the Distribution Center Name column from Redmond to Bellevue.  I have to prove that this great change tracking feature actually works after all.  Once you&#8217;ve made the change and hit the tab key to save it, go ahead and run your Push code.  If everything works as expected, the local change you made should be pushed up to SQL Server.  We need some proof, so open up SQL Server Managment Studio:</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/objectexplorer/" rel="attachment wp-att-1799"><img class="alignleft size-full wp-image-1799" title="ObjectExplorer" src="http://robtiffany.com/wp-content/uploads/2012/04/ObjectExplorer.png" alt="Object Explorer" width="755" height="248" /></a></p>
<p>&nbsp;</p>
<p>Right-clicking on dbo.DistributionCenters and clicking Select Top 1000 Rows should return the result you see in the figure above.  Happily, the local SQLCE change from Redmond to Bellevue is reflected in the result on SQL Server 2012.</p>
<p>The circle is complete.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>Simple Mobile Sync with SQL Server 2012 and SQL Server Compact: Episode II</title>
		<link>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/</link>
		<comments>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 03:21:42 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Sync]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1683</guid>
		<description><![CDATA[In my last article, I walked you through finding, downloading, installing, and configuring SQL Server 2012 Express, SQL Server Compact 3.5 SP2 CU6, and the Sync Server Tools.  With that series of tasks completed, you&#8217;re now capable of performing data synchronization with &#8230; <a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last article, I walked you through finding, downloading, installing, and configuring SQL Server 2012 Express, SQL Server Compact 3.5 SP2 CU6, and the <em><strong>Sync </strong></em>Server Tools.  With that series of tasks completed, you&#8217;re now capable of performing data synchronization with a mobile Windows client.</p>
<p>Open SQL Server 2012 Management Studio and connect to the local SQL Express instance.  You’ll quickly notice the new Visual Studio 2010 IDE look and feel.  Since you’re going to need a database to sync with, right-click on the Databases folder in the Object Explorer and select New Database.  Type ContosoBottling in the Database name text box and click OK.  I want you to create three simple tables for the purposes of this article:</p>
<table width="646" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="137"><strong>DistributionCenters</strong></td>
<td colspan="5" width="509"></td>
</tr>
<tr>
<td valign="top" width="137"><strong>Column</strong></td>
<td valign="top" width="93"><strong>PK</strong></td>
<td valign="top" width="113"><strong>Data Type</strong></td>
<td valign="top" width="97"><strong>Nulls</strong></td>
<td valign="top" width="102"><strong>Defaults</strong></td>
<td valign="top" width="104"><strong>RowGuid</strong></td>
</tr>
<tr>
<td valign="top" width="137">DistributionCenterId</td>
<td valign="top" width="93">Yes</td>
<td valign="top" width="113">uniqueidentifier</td>
<td valign="top" width="97">No</td>
<td valign="top" width="102">newid()</td>
<td valign="top" width="104">Yes</td>
</tr>
<tr>
<td valign="top" width="137">Name</td>
<td valign="top" width="93"></td>
<td valign="top" width="113">nchar(20)</td>
<td valign="top" width="97">Yes</td>
<td valign="top" width="102"></td>
<td valign="top" width="104">No</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table width="646" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="137"><strong>Routes</strong></td>
<td colspan="5" width="509"></td>
</tr>
<tr>
<td valign="top" width="137"><strong>Column</strong></td>
<td valign="top" width="93"><strong>PK</strong></td>
<td valign="top" width="113"><strong>Data Type</strong></td>
<td valign="top" width="97"><strong>Nulls</strong></td>
<td valign="top" width="102"><strong>Defaults</strong></td>
<td valign="top" width="104"><strong>RowGuid</strong></td>
</tr>
<tr>
<td valign="top" width="137">RouteId</td>
<td valign="top" width="93">Yes</td>
<td valign="top" width="113">uniqueidentifier</td>
<td valign="top" width="97">No</td>
<td valign="top" width="102">newid()</td>
<td valign="top" width="104">Yes</td>
</tr>
<tr>
<td valign="top" width="137">DistributionCenterId</td>
<td valign="top" width="93"></td>
<td valign="top" width="113">uniqueidentifier</td>
<td valign="top" width="97">Yes</td>
<td valign="top" width="102"></td>
<td valign="top" width="104">No</td>
</tr>
<tr>
<td valign="top" width="137">Name</td>
<td valign="top" width="93"></td>
<td valign="top" width="113">nchar(20)</td>
<td valign="top" width="97">Yes</td>
<td valign="top" width="102"></td>
<td valign="top" width="104">No</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table width="640" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="112"><strong>Drivers</strong></td>
<td colspan="5" width="528"></td>
</tr>
<tr>
<td valign="top" width="112"><strong>Column</strong></td>
<td valign="top" width="93"><strong>PK</strong></td>
<td valign="top" width="113"><strong>Data Type</strong></td>
<td valign="top" width="105"><strong>Nulls</strong></td>
<td valign="top" width="108"><strong>Defaults</strong></td>
<td valign="top" width="109"><strong>RowGuid</strong></td>
</tr>
<tr>
<td valign="top" width="112">DriverId</td>
<td valign="top" width="93">Yes</td>
<td valign="top" width="113">uniqueidentifier</td>
<td valign="top" width="105">No</td>
<td valign="top" width="108">newid()</td>
<td valign="top" width="109">Yes</td>
</tr>
<tr>
<td valign="top" width="112">RouteId</td>
<td valign="top" width="93"></td>
<td valign="top" width="113">uniqueidentifier</td>
<td valign="top" width="105">Yes</td>
<td valign="top" width="108"></td>
<td valign="top" width="109">No</td>
</tr>
<tr>
<td valign="top" width="112">FirstName</td>
<td valign="top" width="93"></td>
<td valign="top" width="113">nchar(20)</td>
<td valign="top" width="105">Yes</td>
<td valign="top" width="108"></td>
<td valign="top" width="109">No</td>
</tr>
<tr>
<td valign="top" width="112">LastName</td>
<td valign="top" width="93"></td>
<td valign="top" width="113">nchar(20)</td>
<td valign="top" width="105">Yes</td>
<td valign="top" width="108"></td>
<td valign="top" width="109">No</td>
</tr>
</tbody>
</table>
<p>If you read my last book on Enterprise Data Replication, these tables that support the operations of a delivery driver should look familiar to you.  Since RDA doesn’t support the Identity Range feature of Merge Replication, you’ll be using GUIDs for your primary keys to ensure uniqueness.  Since the offline data capabilities of sync technologies from all vendors are based on the notion of optimistic concurrency, having a globally unique primary key that won’t collide with inserts and updates made by one or more devices is critical to success.  Now it’s time to fill these tables with some sample data to get started:</p>
<p>Right-click on DistributionCenters and select Edit Top 200 Rows.  Type Seattle for the Name in the first row and Redmond for the Name in the second row.  Allow the DistributionCenterId uniqueidentifier values to be automatically created.  It should look something like this:</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/dc/" rel="attachment wp-att-1694"><img class="alignleft size-full wp-image-1694" title="DistributionCenter" src="http://robtiffany.com/wp-content/uploads/2012/04/DC.png" alt="Distribution Center" width="364" height="115" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Now it’s time to tackle the Routes table.  Each Distribution Center will have multiple routes that it supplies products to.  Right-click on Routes and select Edit Top 200 Rows.  Like before, allow the RouteId uniqueidentifier values to be automatically created.  The eight rows of data I want you to enter should be as follows:</p>
<ol>
<li>The DistributionCenterID should equal the related Seattle value from the DistributionCenters table and the Name should equal Magnolia.</li>
<li>The DistributionCenterID should equal the related Seattle value from the DistributionCenters table and the Name should equal Ballard.</li>
<li>The DistributionCenterID should equal the related Seattle value from the DistributionCenters table and the Name should equal Fremont.</li>
<li>The DistributionCenterID should equal the related Seattle value from the DistributionCenters table and the Name should equal Wallingford.</li>
<li>The DistributionCenterID should equal the related Redmond value from the DistributionCenters table and the Name should equal Kirkland.</li>
<li>The DistributionCenterID should equal the related Redmond value from the DistributionCenters table and the Name should equal Bellevue.</li>
<li>The DistributionCenterID should equal the related Redmond value from the DistributionCenters table and the Name should equal Issaquah.</li>
<li>The DistributionCenterID should equal the related Redmond value from the DistributionCenters table and the Name should equal Sammamish.</li>
</ol>
<p>It should look something like this:</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/routes/" rel="attachment wp-att-1695"><img class="alignleft size-full wp-image-1695" title="Routes" src="http://robtiffany.com/wp-content/uploads/2012/04/routes.png" alt="Routes" width="590" height="249" /></a></p>
<p>&nbsp;</p>
<p>Last but not least, we have the Drivers.  Each of these folks will be assigned to a particular route on any given day.  Right-click on Drivers and select Edit Top 200 Rows.  For each row, allow the DriverId uniqueidentifier values to be automatically created.  I’ll just have you enter a couple of drivers for this table:</p>
<ol>
<li>The RouteId should equal the related Magnolia value from the Routes table and the FirstName should equal Dave and the LastName should equal Bottomley.</li>
<li>The RouteId should equal the related Kirkland value from the Routes table and the FirstName should equal Khalid and the LastName should equal Siddiqui.</li>
</ol>
<p>It should look something like this:</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/drivers/" rel="attachment wp-att-1702"><img class="alignleft size-full wp-image-1702" title="Drivers" src="http://robtiffany.com/wp-content/uploads/2012/04/Drivers.png" alt="Drivers" width="666" height="116" /></a></p>
<p>&nbsp;</p>
<p>Now that your sample database has some data inside, it’s time to build a sample Windows app so fire up Visual Studio 2010.  Create a Windows Forms or WPF application and call the Solution SimpleSync.  The first thing I want you to do is go to the Solution Explorer, right-click on References, and add a reference to System.Data.SqlServerCe.  To make sure you’re working with the newest bits based on Cumulative Update package 6, in the Add Reference dialog, click the Browse tab and navigate to C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop\System.Data.SqlServerCe.dll.</p>
<p>With those pieces in place, it&#8217;s time to write some code.</p>
<p>Unlike Merge Replication that automatically creates a SQL Server Compact database for you during the initial sync, with RDA you&#8217;ll need to create it in code with the SqlCeEngine object.  So before your app can start synchronizing data, you&#8217;ll need to first create a database with the following code:</p>
<h6><span style="color: #0000ff; font-family: Consolas; font-size: medium;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;">if</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;"> (!</span></span><span style="color: #2b91af; font-family: Consolas; font-size: medium;"><span style="color: #2b91af; font-family: Consolas; font-size: medium;"><span style="color: #2b91af; font-family: Consolas; font-size: medium;">File</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;">.Exists(</span></span><span style="color: #a31515; font-family: Consolas; font-size: medium;"><span style="color: #a31515; font-family: Consolas; font-size: medium;"><span style="color: #a31515; font-family: Consolas; font-size: medium;">&#8220;ContosoBottling.sdf&#8221;</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;">))</span></span></h6>
<h6>{</h6>
<h6 style="padding-left: 30px;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;">using</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;"> (</span></span><span style="color: #2b91af; font-family: Consolas; font-size: medium;"><span style="color: #2b91af; font-family: Consolas; font-size: medium;"><span style="color: #2b91af; font-family: Consolas; font-size: medium;">SqlCeEngine</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;"> sqlEngine = </span></span><span style="color: #0000ff; font-family: Consolas; font-size: medium;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;"><span style="color: #0000ff; font-family: Consolas; font-size: medium;">new </span></span></span><span style="color: #2b91af; font-family: Consolas; font-size: medium;"><span style="color: #2b91af; font-family: Consolas; font-size: medium;"><span style="color: #2b91af; font-family: Consolas; font-size: medium;">SqlCeEngine</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;">())</span></span></h6>
<h6 style="padding-left: 30px;">{</h6>
<h6 style="padding-left: 60px;">sqlEngine.LocalConnectionString = &#8221;<span style="color: #a31515; font-family: Consolas; font-size: medium;"><span style="color: #a31515; font-family: Consolas; font-size: medium;"><span style="color: #a31515; font-family: Consolas; font-size: medium;">Data Source=ContosoBottling.sdf&#8221;</span></span></span><span style="font-family: Consolas; font-size: medium;"><span style="font-family: Consolas; font-size: medium;">;</span></span></h6>
<h6 style="padding-left: 60px;">sqlEngine.CreateDatabase();</h6>
<h6 style="padding-left: 30px;">}</h6>
<h6>}</h6>
<p>The first thing the above code does is to check and see if a SQL Server Compact database already exists.  If not, then the SqlCeEngine object is instantiated.  The LocalConnectionString property is set to the path of where you want the database to reside.  In this case, I didn&#8217;t enter a path so the database will be created in the same folder as the app&#8217;s exe.  Keep in mind that a number of other parameters can be used for this property to support password protection and encryption among others.  Next, you just call the CreateDatabase() method and that&#8217;s all there is to it.  You will now have an empty shell of a database that typically weighs in at 20 KB.</p>
<p>With a local database created, you can begin retrieving data.  In my next article I&#8217;ll discuss how to RDA filters and pulls both data and indexes, enables local change-tracking, and pushes new data and updates back to SQL Server.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Mobile Sync with SQL Server 2012 and SQL Server Compact: Episode I</title>
		<link>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/</link>
		<comments>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 03:54:28 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Sync]]></category>
		<category><![CDATA[RDA]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Compact]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1619</guid>
		<description><![CDATA[Now that SQL Server 2012 has been released, some of you might be wondering if SQL Server Compact is capable of synchronizing with it.  With the release of Cumulative Update Package 6 for SQL Server Compact 3.5 Service Pack 2, the answer &#8230; <a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Now that <strong>SQL Server 2012</strong> has been released, some of you might be wondering if <em><strong>SQL Server Compact</strong></em> is capable of synchronizing with it.  With the release of <a title="Cumulative Update Package 6" href="http://support.microsoft.com/kb/2628887" target="_blank">Cumulative Update Package 6 for SQL Server Compact 3.5 Service Pack 2</a>, the answer is a resounding yes!  Build number 3.5.8088.00 adds support for replication with<strong> SQL Server</strong> &#8220;<strong>Denali</strong>&#8221; which is pretty awesome in my book.  For those of you keeping score at home, check out Erik&#8217;s<strong> <a title="Everything SQL Server Compact" href="http://erikej.blogspot.com/" target="_blank">Everything SQL Server Compact</a> </strong>blog to see a running total of improvements to <strong>SQLCE</strong> via Cumulative Updates.  After that, click on the Cumulative Update link at the beginning of this article and head on over to the <strong>Microsoft Support</strong> page to get started.</p>
<p>At the top of the page it says <strong>Hotfix Download Available</strong> and beneath that says <a title="Hotfix Downloads" href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=2628887&amp;kbln=en-us" target="_blank">View and request hotfix downloads </a>so click on that.  Keep in mind that my link was defined by my U.S. English IE9 browser so the page I navigated to shows me checkboxes to download x64 Server Tools for IIS and both x86 and x64 versions for Windows.  Your experience may be different depending on where you live.  Luckily, there&#8217;s a link that says<strong> Show hotfixes for all platforms and languages</strong>.  Check the checkboxes to select your language, the Server Tools, Windows, and Windows Mobile/Embedded platforms that you&#8217;re looking for.  Afterward, type in your email address and play the Captcha game in order to have links to the bits you need sent to you.</p>
<p>The next thing you&#8217;re going to need is a copy of SQL Server 2012.  To keep things simple with this series of articles, I won&#8217;t dive into security and I decided that I&#8217;ll use my x64 Windows 7 laptop as the database server, middleware, mobile platform and use <strong>Remote Data Access (RDA)</strong> as the sync transport.  I think you&#8217;ve probably already heard enough about Merge Replication from me so I decided to mix it up a bit with my old friend RDA.  Remember, RDA does not require any configuration on SQL Server, it is not invasive to the schema of the server database, and it&#8217;s amazingly fast and scalable.  With over 650 million copies of <strong>Windows 7</strong> deployed, this is by far the most widely used, occasionally-connected mobile platform in the world, so I don&#8217;t feel bad about not writing another <strong>Windows Phone</strong> article.  <a title="SQL Server 2012 Express" href="http://www.microsoft.com/betaexperience/pd/SQLEXPCTAV2/enus/default.aspx" target="_blank">Navigate your browser to download the free SQL Server 2012 Express with Advanced Services </a>since we won&#8217;t be needing support for Replication.  You might need to navigate elsewhere if you&#8217;re not targetting U.S. English.  Sorry about that.  Once you&#8217;ve downloaded the exe, install the product and make sure you can login via SQL <strong>Server Management Studio</strong>.</p>
<p>At this point, go ahead and install the 32 and 64-bit versions of the <strong>SQL Server Compact 3.5 SP2</strong> runtimes that you downloaded as appropriate.  Remember, on a 64-bit OS, you must install both the x86 and x64 versions in order to have smooth sailing with out favorite embedded database.</p>
<p>I already have <strong>IIS</strong> installed on my x64 Windows 7 laptop so I&#8217;m in good shape to install the<strong> x64 Server Tools</strong>.  Unzip your CU 6 update and click SSCEServerTools-ENU.msi to begin the Server Tools installation.  As a refresher, you must have IIS 6 Management Compatibility enabled to make things work with IIS 7.5.  During the install make sure all the <strong>System Configuration Checks</strong> are successful, and that you select <strong>SQL Server &#8220;Denali&#8221;</strong> to synchronize with. With the Server Tools installed, I want you to create a local folder on your computer and call it <strong>SnapshotShare</strong> and <strong>Share</strong> it with <strong>Everyone</strong> to keep things simple.  It&#8217;s a little silly since RDA doesn&#8217;t use a Snaphot Share, but the installation Wizard may no let you proceed without it.</p>
<p>I know many of you have followed the screenshot-filled installation routines in my books so I&#8217;ll keep the pictures microscopic this time around.  Click <strong>Windows Start</strong>, navigate to <strong>Microsoft SQL Server Compact 3.5</strong>, and select <strong>Configure Web Synchronization Wizard</strong>.</p>
<p>Welcome to the Configure Web Synchronization Wizard | Click Next</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/9/" rel="attachment wp-att-1645"><img class="alignleft size-full wp-image-1645" title="9" src="http://robtiffany.com/wp-content/uploads/2012/03/9.jpg" alt="" width="160" height="145" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Subscriber Type | Select SQL Server Compact | Click Next</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/10/" rel="attachment wp-att-1646"><img class="alignleft size-full wp-image-1646" title="10" src="http://robtiffany.com/wp-content/uploads/2012/03/10.jpg" alt="" width="160" height="146" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Web Server | Create a new virtual directory | Click Next</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/11/" rel="attachment wp-att-1647"><img class="alignleft size-full wp-image-1647" title="11" src="http://robtiffany.com/wp-content/uploads/2012/03/11.jpg" alt="" width="160" height="146" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Virtual Directory Information | Type RDA in the Alias textbox | Click Next | Click Yes to create a folder | Click Yes again</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/12/" rel="attachment wp-att-1648"><img class="alignleft size-full wp-image-1648" title="12" src="http://robtiffany.com/wp-content/uploads/2012/03/12.jpg" alt="" width="160" height="145" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Secure Communications | Select Do not require secure channel (SSL) | Click Next</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/15/" rel="attachment wp-att-1651"><img class="alignleft size-full wp-image-1651" title="15" src="http://robtiffany.com/wp-content/uploads/2012/03/15.jpg" alt="" width="160" height="144" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Client Authentication | Select Clients will connect anonymously | Click Next</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/16/" rel="attachment wp-att-1652"><img class="alignleft size-full wp-image-1652" title="16" src="http://robtiffany.com/wp-content/uploads/2012/03/16.jpg" alt="" width="160" height="147" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Anonymous Access | Default IUSR account of IIS will be used | Click Next</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/17/" rel="attachment wp-att-1653"><img class="alignleft size-full wp-image-1653" title="17" src="http://robtiffany.com/wp-content/uploads/2012/03/17.jpg" alt="" width="160" height="145" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Snapshot Share Access | Enter path to the shared folder I told you to create | Click Next | Click Yes</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/18/" rel="attachment wp-att-1654"><img class="alignleft size-full wp-image-1654" title="18" src="http://robtiffany.com/wp-content/uploads/2012/03/18.jpg" alt="" width="160" height="147" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Complete the Wizard | Verify the choices you made | Click Finish</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/20/" rel="attachment wp-att-1656"><img class="alignleft size-full wp-image-1656" title="20" src="http://robtiffany.com/wp-content/uploads/2012/03/20.jpg" alt="" width="160" height="147" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Configure Web Synchronization | You should have 9 successes | Click Close</p>
<p><a href="http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/attachment/21/" rel="attachment wp-att-1657"><img class="alignleft size-full wp-image-1657" title="21" src="http://robtiffany.com/wp-content/uploads/2012/03/21.jpg" alt="" width="160" height="145" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Congratulations!  You&#8217;re done.</p>
<p>Test your Server Tools installation using Internet Explorer and navigate to this address: <a href="http://localhost/rda/sqlcesa35.dll">http://localhost/rda/sqlcesa35.dll</a>.  Your browser should display <strong>&#8220;Microsoft SQL Server Compact Server Agent&#8221;</strong> if all went well.  Your configuration tasks are almost complete, but I need you to bring up SQL Server Management Studio to do one more thing for me.  In SQL Server, create a new login called NT AUTHORITY\IUSR  with ContosoBottling as the default database so devices can anonymously connect to IIS and SQL Server to sync.  I apologize for not having you build out a network full of servers and for not having you use Windows auth against Active Directory.  Remember, when it&#8217;s time to go to production, you&#8217;ll do this the secure way.</p>
<p>You&#8217;ve accomplished a lot by following along through this article and all the pieces are in place to create an occasionally-connected solution for yourself, your company, or your customers.  In the next article, we&#8217;ll build a sample database and start writing some code in Visual Studio 2010.</p>
<p>Stay in sync,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/simple-mobile-sync-with-sql-server-2012-and-sql-server-compact-episode-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft® SQL Server® Compact 4.0 SP1 (CTP1) is Here</title>
		<link>http://robtiffany.com/microsoft-sql-server-compact-4-0-sp1-ctp1-is-here/</link>
		<comments>http://robtiffany.com/microsoft-sql-server-compact-4-0-sp1-ctp1-is-here/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 03:46:56 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[SQL Server Compact]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1585</guid>
		<description><![CDATA[Just wanted to shout out to all my SQLCE friends around the world that there&#8217;s an update to v4! Head on over to the Microsoft Download Center at http://www.microsoft.com/download/en/details.aspx?id=29037 to grab the x86 and x64 versions of your favorite embedded database. &#8230; <a href="http://robtiffany.com/microsoft-sql-server-compact-4-0-sp1-ctp1-is-here/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Just wanted to shout out to all my SQLCE friends around the world that there&#8217;s an update to v4!</h2>
<p>Head on over to the Microsoft Download Center at <a href="http://www.microsoft.com/download/en/details.aspx?id=29037">http://www.microsoft.com/download/en/details.aspx?id=29037</a> to grab the x86 and x64 versions of your favorite embedded database.</p>
<p>Whether you&#8217;re building mobile apps for Windows Tablets or  you need to get a web site up and running with WebMatrix, SQL Server Compact 4.0 is an easy to use solution for your database needs.  And yes, your data-at-rest is password protected and encrypted</p>
<p>Best Regards,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/microsoft-sql-server-compact-4-0-sp1-ctp1-is-here/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Building your BYOD Baseline: Trust</title>
		<link>http://robtiffany.com/building-your-byod-baseline-trust/</link>
		<comments>http://robtiffany.com/building-your-byod-baseline-trust/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 04:06:37 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[BYOD]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1575</guid>
		<description><![CDATA[Let’s talk about trust. So far, my BYOD guidance has been to give your employees a lot of value without allowing their devices to access your internal corporate network.  Frankly, the ability to trust any mobile device inside the firewall &#8230; <a href="http://robtiffany.com/building-your-byod-baseline-trust/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Let’s talk about trust.</h2>
<p>So far, my BYOD guidance has been to give your employees a lot of value without allowing their devices to access your internal corporate network.  Frankly, the ability to trust any mobile device inside the firewall is a hard sell for security folks.  The closest I’ve ever seen was encrypted Windows Mobile 6.1/6.5 devices that could actually join the corporate Domain, be managed by group policy, and connected via an always-on Mobile IKE VPN.</p>
<p>While you’re thinking that a VPN connection is the ticket to protect corporate data, you might not be ready to trust your <strong><em>whole network</em> with your <em>whole device</em></strong>.</p>
<p>Verizon’s ICSA labs ranked mobile malware and cybercriminals targeting and infecting app stores as the top two security threats for 2012.  They want to lure users into downloading infected apps where the infection will spread beyond the smartphone or tablet and into the corporate network.  This gives me enough pause that I don’t feel the need to punch holes in the firewall to create a VPN tunnel between my device and the internal network.  Even on PIN-enforced devices with encrypted file storage, this could lead to a false sense of security.</p>
<p>The 3rd party apps that your BYOD users freely download can be a bigger threat to sensitive data leakage then losing the phone in the back of a taxi.</p>
<p>How can this be?</p>
<p>Many people have grown numb to paying attention to the &#8216;device capabilities&#8217; apps request permission to access when they download them from an app store.  For instance, when the home screen wallpaper you&#8217;re downloading wants read/write access to your contacts, the file store, SD card, the phone dialer, and the Internet, you should probably think twice.  The problem is too many folks just impatiently tap &#8220;Accept&#8221; or &#8220;Okay&#8221; and put their device at risk.  Other people jailbreak or root their devices so they can side load or download a broader set of potentially risky apps.</p>
<p>The key takeaway here is that using a VPN to extend your Intranet out to your devices may inadvertently provide rogue apps possessing elevated rights the ability to attack your internal network and/or steal sensitive data by traversing the secure tunnel you created.  In worst case scenarios, your mobile VPN is the lowered drawbridge and rogue apps and malware downloaded by your BYOD employees are the Trojan Horse.</p>
<p>Kind of ironic.</p>
<p>For now, keep the tidal wave of devices on the &#8216;Guest&#8217; Wi-Fi network where they can only access the Internet.  Give certified, corporate mobile apps access to discreet internal web services and sites that you publish through a secure gateway.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/building-your-byod-baseline-trust/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s Time to Discover the World of the Submarine Warriors</title>
		<link>http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/</link>
		<comments>http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 22:01:03 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Submarine]]></category>
		<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Navy]]></category>
		<category><![CDATA[Novel]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1526</guid>
		<description><![CDATA[Looking to find out more about everyone&#8217;s favorite undersea adventure novel for young adults? It&#8217;s time to check out http://submarinewarriors.com/. This is the place to join your fellow shipmate readers and learn all about your favorite characters.  Find out the inside story behind the &#8230; <a href="http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Looking to find out more about everyone&#8217;s favorite undersea adventure novel for young adults?</h2>
<h2>It&#8217;s time to check out <a title="Submarine Warriors" href="http://submarinewarriors.com/" target="_blank">http://submarinewarriors.com/</a>.</h2>
<p><a title="Characters" href="http://submarinewarriors.com/who/" target="_blank">This is the place to join your fellow shipmate readers and learn all about your favorite characters.</a>  Find out the inside story behind the young Submarine Warriors, the Submariner fathers they&#8217;re trying to rescue, the Navy SEALs, Admiral Connery, the President, and the dreaded Underworlders.</p>
<p><a href="http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/seals/" rel="attachment wp-att-1527"><img class="aligncenter size-medium wp-image-1527" title="SEALs" src="http://robtiffany.com/wp-content/uploads/2012/03/SEALs-300x168.jpg" alt="SEALs" width="300" height="168" /></a></p>
<p><a title="Facts" href="http://submarinewarriors.com/facts/" target="_blank">Need help with a school science project or paper you have to write?</a> Learn all about the ocean, sonar, water, nuclear propulsion, how drinkable water and breathable air is created from seawater, and how submarines work.  With this vast source of knowledge at your disposal, you&#8217;ll be ready to earn your Dolphin pin and join the elite group of underwater scientists and adventurers.</p>
<p><a href="http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/virginiasm/" rel="attachment wp-att-1528"><img class="aligncenter size-medium wp-image-1528" title="VirginiaClass" src="http://robtiffany.com/wp-content/uploads/2012/03/VirginiaSM-300x180.png" alt="Virginia Class Submarine" width="300" height="180" /></a></p>
<p><a title="Where" href="http://submarinewarriors.com/where/" target="_blank">The Submarine Warriors adventure takes place in the Pacific Northwest of the United States</a> in various bodies of water including the Hood Canal, the Strait of Juan de Fuca, and the Pacific Ocean. Learn more about this amazing and beautiful part of America that is home to Trident and Seawolf submarines, not to mention &#8216;Torpedo Town USA.&#8217;</p>
<p><a href="http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/hoodcanal2/" rel="attachment wp-att-1529"><img class="aligncenter size-medium wp-image-1529" title="HoodCanal" src="http://robtiffany.com/wp-content/uploads/2012/03/Hoodcanal2-300x258.jpg" alt="Hood Canal" width="300" height="258" /></a></p>
<p><a title="Buy the Book" href="http://submarinewarriors.com/buy/" target="_blank">Purchase the book and support the efforts of Matt Damon and Gary White at Water.org.</a>  Water is the world that Submariners live in, and clean water is getting harder to find for roughly one billion people struggling to survive.  We&#8217;re doing our part by donating 10% of all profits from the sales of Submarine Warriors to Water.org.  When you purchase a book for yourself or a friend, you&#8217;ll be providing a better future for those in need.</p>
<p><object width="563" height="396" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/m8O-TAE9zMQ?version=3&amp;feature=player_embedded" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><embed width="563" height="396" type="application/x-shockwave-flash" src="http://www.youtube.com/v/m8O-TAE9zMQ?version=3&amp;feature=player_embedded" allowFullScreen="true" allowScriptAccess="always" allowfullscreen="true" allowscriptaccess="always" /></object></p>
<p>I look forward to seeing you in the new community of <a title="Submarine Warriors" href="http://submarinewarriors.com/" target="_blank">Submarine Warriors</a>.</p>
<p>Stay in touch!</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/its-time-to-discover-the-world-of-the-submarine-warriors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building on your BYOD Baseline: Wireless</title>
		<link>http://robtiffany.com/building-on-your-byod-baseline-wireless/</link>
		<comments>http://robtiffany.com/building-on-your-byod-baseline-wireless/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 03:03:17 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1511</guid>
		<description><![CDATA[By the year 2015, companies will need 300% more Wi-Fi access points to provide the same level of bandwidth, access, and throughput as we have today. <a href="http://robtiffany.com/building-on-your-byod-baseline-wireless/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Bring your own Device (BYOD) Baby Steps" href="http://robtiffany.com/bring-your-own-device-byod-baby-steps/" target="_blank">In my last article, I provided you some simple steps to get started supporting multiple mobile devices with assets you might already have in your organization.</a>  You took the first step by accepting the fact that your employees are already using their own devices and data plans for work.  Since over 65 percent of businesses worldwide use Exchange Server, I&#8217;m hoping most of you took comfort in knowing you could provide push email, calendaring, contacts, tasks, PIN enforcement, and remote wipe to almost any smartphone or tablet your employees brought in.  Rather than juggling Xcode, Visual Studio, and Eclipse to build mobile apps right out of the gate, I suggested you target all mobile platforms with a single HTML5 codebase and securely publish those web apps out to the Internet through the same reverse proxies you’re using to make Exchange email available to devices.  Lastly, I encouraged you to reduce the amount of bytes your employees are paying for on their mobile data plans by giving them access to a segmented ‘Guest’ Wi-Fi network with Internet-only access when they’re at the office.</p>
<p>You just covered a lot of bases while minimizing cost and effort.  So what’s next?</p>
<p>Let’s talk about wireless for a bit.  By the year 2015, companies will need 300% more Wi-Fi access points to provide the same level of bandwidth, access, and throughput as we have today.  Depending on which analyst survey you&#8217;ve read, employees are now carrying between two and five networked devices instead of just one.  Clearly, we’re experiencing a trend that you’ve probably already noticed at your company.  The result is that corporate access points, firewalls, proxies, load-balancers, DNS, DHCP, and Exchange servers are feeling an increased level of stress.  Remember how I told you to give all your BYOD employees a free ride on your segmented Guest Wi-Fi VLAN?  Well, you’re going to have to start spending some money to boost your wireless capacity since your existing access points are probably already saturated.  Not only can they not handle any more connected devices, but I bet you didn’t plan for all those iPad Facetime video calls that are eating up your bandwidth.</p>
<p>Needless to say, it’s probably time for a new wireless site survey at your offices so you can start adding cable drops and hang APs.  While it might seem obvious, make sure you’re implementing a dense WLAN using 802.11n access points with dual radios where appropriate.  You&#8217;re going to have to lower the DHCP leases to make sure you don&#8217;t exhaust IP addresses with lots of devices hopping on and off the network.  Yes, you&#8217;ll need to do channel and power staggering depending on the sophistication of Wi-Fi system you&#8217;re using.  While you’re at it, I want you to analyze the increased load on your other network gear and Exchange servers and scale them out as necessary to maintain the best user experience possible.  Since we’re still inside the office, go out on a limb and consider deploying Femtocells from different mobile operators to those interior locations where employees have trouble using their device’s 3G/4G data connection or making calls.  Remember, the wireless recommendations for the office also apply to fixed structures like warehouses, refineries, distribution centers, etc.</p>
<p>Since we all don’t work inside an office, I’d also like you to think about employees that work outside.  I’m not talking about BYOD employees working from home using their own cable modem or travelling in cars, planes, or trains using their wireless data networks.  I’m thinking of a scenario where you have a group of employees working outside in the fresh air at a fixed location away from the office.  You can make BYOD happen for them by offloading their data usage to MiFi Hotspots for small groups and mobile broadband routers for large groups.   Just a thought.</p>
<p>Stay Connected,</p>
<p>Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/building-on-your-byod-baseline-wireless/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>People are the Platform</title>
		<link>http://robtiffany.com/people-are-the-platform/</link>
		<comments>http://robtiffany.com/people-are-the-platform/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 17:52:39 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1505</guid>
		<description><![CDATA[The user is the Endpoint. Apps and Devices are just Enablers.]]></description>
			<content:encoded><![CDATA[<p>The user is the Endpoint. Apps and Devices are just Enablers.</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/people-are-the-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bring your own Device (BYOD) Baby Steps</title>
		<link>http://robtiffany.com/bring-your-own-device-byod-baby-steps/</link>
		<comments>http://robtiffany.com/bring-your-own-device-byod-baby-steps/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 02:54:43 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1474</guid>
		<description><![CDATA[As someone who spends a lot of time talking to CIOs about the Consumerization of IT (CoIT) and mobile, I get asked a lot about BYOD strategies.  I also recognize that you&#8217;re likely to get a different strategy from every &#8230; <a href="http://robtiffany.com/bring-your-own-device-byod-baby-steps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As someone who spends a lot of time talking to CIOs about the Consumerization of IT (CoIT) and mobile, I get asked a lot about BYOD strategies.  I also recognize that you&#8217;re likely to get a different strategy from every person you ask.  To quickly recap how we got here over the last several years, the rise of BYOD is a result of more compelling devices in the marketplace combined with the move from Corporate-Liable (CL) to Individual-Liable (IL) device ownership policies.  Typically, I like to take baby steps on this one because you don&#8217;t have to boil the ocean in order to respond to this mega-trend all at once:</p>
<p><strong>Baby Step 1: </strong> Oh, it&#8217;s too late.  This step was already taken while you weren&#8217;t looking.  Your employees are already bringing their own smartphones and tablets into the enterprise.  In an Individual-Liable scenario, they&#8217;re using their own data plans to surf the mobile web and use apps.  Don&#8217;t freak out because you haven&#8217;t given them access to anything yet.  At worst, you might have employees that are distracted and not giving you their best work since they&#8217;re playing Angry Birds.  On the other hand, they may already be more productive because they&#8217;re using public information on the mobile web to solve corporate problems.</p>
<p><strong>Baby Step 2: </strong> Your employees want to get their email on their smartphones and tablets.  No surprise here.  Since I&#8217;m a person that believes CIOs and IT Directors should get more value for their dollar, I won&#8217;t ever recommend one-off, point-solutions to satisfy the need of each different mobile platform, because that&#8217;s wasteful.  During the middle of the last decade, I watched in horror as Microsoft began to license the Exchange ActiveSync (EAS) protocol to all its competitors.  At the time, I was worried we were giving away one of Windows Mobile&#8217;s competitive advantages.  Fast forward to our consumer-driven world of today, EAS is the one thing that every smartphone and tablet has in common.</p>
<p><a href="http://robtiffany.com/bring-your-own-device-byod-baby-steps/ms_exchange_active_sync_100x100/" rel="attachment wp-att-1500"><img class="aligncenter size-full wp-image-1500" title="Exchange ActiveSync" src="http://robtiffany.com/wp-content/uploads/2012/03/ms_exchange_active_sync_100x100.jpg" alt="Exchange ActiveSync" width="100" height="100" /></a></p>
<p>While not every organization uses Exchange Server, most do.  Some are even sidestepping the management of additional servers buy running this in the cloud via Office 365.  What this means is that you can instantly give <em>push</em> email, calendar, contacts, and tasks to your employee&#8217;s iPads, Android devices, Windows Phones, Symbian smartphones, and iPhones via a single technology that you probably already have.  If you&#8217;ve ever used Outlook Web Access (OWA), then your organization is already setup to securely deliver this value to most every device over SSL.  Okay, at a basic level, your employees can now get elements of their &#8216;information work&#8217; done anywhere at any time which makes them more productive.  They should also be more responsive to your customers as well.</p>
<p><strong>Baby Step 3:</strong>  Uh oh, someone told you that security could be an issue.  You&#8217;re now thinking that there&#8217;s no free lunch in mobile.  While you may not be able to beat the security you get on your heavily-managed Windows laptops and tablets with BitLocker, there is some light-management that you get for free and you probably don&#8217;t even know it.  Remember the EAS protocol from Baby Step 2?  Well, it gives you some light device management in the form of policy enforcement in addition to the email stuff.  While there are a lot of great device management packages out there that can give you complete control, when dealing with devices owned by your empowered employees, heavy device management may not be appropriate.  The notion of installing a device management agent on each employee-owned device is a huge undertaking.  So how does Exchange ActiveSync sidestep this?  Well, it&#8217;s already installed on their smartphones and tablets and it does things like enforce complex PINs, password expiration, and allows you to remotely wipe a device if it gets lost or stolen.  You get this for free and it works the same way across many popular smartphones and tablet.  Whew, you now have a basic line of defense in play.</p>
<p><strong>Baby Step 4:</strong>  Supported device matrix.  While EAS provides email, calendar, contacts, tasks, PIN enforcement, and remote wipe to the majority of smartphones and tablets your employees might own, some devices might fall through the cracks.</p>
<p><a href="http://robtiffany.com/bring-your-own-device-byod-baby-steps/matrix-enter-the-matrix/" rel="attachment wp-att-1493"><img class="aligncenter size-full wp-image-1493" title="The Matrix" src="http://robtiffany.com/wp-content/uploads/2012/03/matrix-enter-the-matrix.jpg" alt="The Matrix" width="393" height="163" /></a></p>
<p>That&#8217;s why it&#8217;s important to let your employees know which devices and mobile operating systems meet the minimum EAS standards to create your BYOD baseline.  It&#8217;s a list that looks similar like this:</p>
<ol>
<li>Windows Phone 7 and higher</li>
<li>iOS 5.0 and higher</li>
<li>Android 2.3 and higher</li>
<li>Windows Mobile 6 and higher</li>
<li>Symbian S60</li>
</ol>
<p>As you can see, this covers the majority of devices that consumers are buying today with the exception of the Blackberry, which has its own device management system.</p>
<p><strong>Baby Step 5: </strong>Your employees are now asking for enterprise apps so they can perform other elements of their job remotely from their devices.  It&#8217;s too soon.  I know your IT department has been developing desktop apps for decades, but your BYOD baseline isn&#8217;t ready for this yet.  The heterogeneous mobile diversity created by BYOD makes cross-platform native development inefficient and costly.  There are too many programming languages, IDEs, MEAP vendors, app security, and deployment issues for you to think about during this early Baby Step phase.  Don&#8217;t worry, you&#8217;ll get there later.  For now, I want you to keep it simple, and follow my theme of using the same technology over and over for every smartphone and tablet to realize training and cost efficiencies while shortening time to market.  The Mobile Web is your key to cross-platform success.  Today&#8217;s devices all have web browsers that support many of the features that comprise HTML5.</p>
<p><a href="http://robtiffany.com/bring-your-own-device-byod-baby-steps/html5-logo-256-320x320/" rel="attachment wp-att-1496"><img class="aligncenter size-medium wp-image-1496" title="HTML5" src="http://robtiffany.com/wp-content/uploads/2012/03/html5-logo-256-320x320-300x300.png" alt="HTML5" width="300" height="300" /></a></p>
<p>By continuing to build web applications like you&#8217;ve been doing for your company Intranet since the 90&#8242;s, you can target every device via a single code base, through a single engineering effort on the part of your internal or outsourced developers.  Since your employees will be accessing your web servers via their device browsers, you&#8217;ve effectively sidestepped software deployment and patching issues, blacklisting/whitelisting users and groups, as well as data-at-rest concerns.  WebKit, Opera, and Internet Explorer all provide the same SSL-encrypted experience you get on the desktop when you&#8217;re doing online banking.  Oh, and make sure to use Basic Authentication on your web servers since it&#8217;s the only auth method guaranteed to predictably prompt users for credentials and work across all device browsers.  To make things more competitive with native apps, the faster JavaScript engines of today&#8217;s mobile browsers make business logic and Ajax calls to your backend web services infinitely faster.  While your employees will securely get the data they need in the palm of their hand, it doesn&#8217;t mean I want them to access internal web servers via the corporate Wi-Fi network.  The BYOD baseline I&#8217;m creating for you doesn&#8217;t include secure CorpNet access because the necessary level of device trust hasn&#8217;t been established.  Publish your internal web servers out to the Internet using reverse proxy servers or through a public cloud where your employees can access them via their mobile operator&#8217;s data network.   The HTML5 mobile web is your no-brainer strategy for cross-platform mobile development until further notice.</p>
<p><strong>Bonus Baby Step:</strong>  Speaking of Wi-Fi, the tidal wave of folks bringing in their consumer-focused, individual-liable devices are facing new caps on their previously-unlimited data plans and they&#8217;d like you to help.  While I remain firm that you haven&#8217;t done enough in your BYOD baseline to trust devices on CorpNet, you can throw your employees a lifeline by giving their devices access to a &#8216;Guest&#8217; Wi-Fi network that only allows them to go out to the Internet.  Many companies have a segmented &#8217;Guest&#8217; Wi-Fi network for visitors.  If you already have something like this in place, consider allowing your BYOD legions to ride on this network using Wi-Fi Protected Access (WPA2) for security.  Think of this as a &#8216;Give-Get&#8217; since you&#8217;re publishing corporate HTML5 apps out to the public Internet without accommodating the data usage fees for employees to use them.  Now employees can use your mobile web apps from the office without eating into their mobile operator&#8217;s monthly data allotment.</p>
<p>Is this everything you need to know?  No.  But it quickly gets you out of the paralysis of not knowing what to do about this tidal wave of devices flowing into your enterprise.  Once you have this BYOD baseline in place, you begin to thoughtfully look at topics like encryption, containerization, wireless security, enforcing a larger list of policies, software distribution, inventory, corporate network access, enterprise apps, data, MEAP, and many more.</p>
<p>Right now, I want you to feel a sense of accomplishment by taking the first Baby Steps towards creating a mobile strategy for your organization.</p>
<p>-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/bring-your-own-device-byod-baby-steps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MEAP Mistakes</title>
		<link>http://robtiffany.com/meap-mistakes/</link>
		<comments>http://robtiffany.com/meap-mistakes/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 18:41:51 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[MEAP]]></category>
		<category><![CDATA[Consumerization]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1470</guid>
		<description><![CDATA[I continue to see people refer to buying a &#8221;MEAP&#8221; as if it&#8217;s a noun, a thing, or a shrinkwrapped 4GL product. It&#8217;s important to remember that Mobile Enterprise Application Platform (MEAP) is a Gartner Magic Quadrant where a stack of &#8230; <a href="http://robtiffany.com/meap-mistakes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>I continue to see people refer to buying a &#8221;MEAP&#8221; as if it&#8217;s a noun, a thing, or a shrinkwrapped 4GL product.</h3>
<p>It&#8217;s important to remember that Mobile Enterprise Application Platform (MEAP) is a Gartner Magic Quadrant where a stack of products from a given vendor do their best to align to 8 critical capabilities to provide the best possible ROI for customers:</p>
<ol>
<li>Integrated Development Environment (IDE for device &amp; server coding)  &gt; Does you vendor deliver a well-known IDE used by tens of millions of developers around the world?</li>
<li>Application Client Runtime (Thick/Thin cross-platform runtime)  &gt; Does your vendor provide a proven runtime used by millions of apps?</li>
<li>Enterprise Application Integration Tools (Adapters to backend packages/data sources)  &gt; Does your vendor provide a consistent adapter framework?</li>
<li>Packaged Mobile Apps or Components (Cross-platform apps &amp; libraries)  &gt; Does you vendor actually make widely-used apps that run on multiple platforms?</li>
<li>Multichannel Tools or Servers (Similar to IDE + servers supporting open protocols)  &gt; Does your vendor sell widely-used &amp; supported servers and wire protocols?</li>
<li>Management Tools (Tools to support mobile app lifecycle)  &gt; Does your vendor provide secure app provisioning to devices and policy enforcement?</li>
<li>Security (Data in transit + data at rest + data going through adapters)  &gt; Does your vendor provide encryption and digital signing?</li>
<li>Hosting (Cloud capabilities) &gt; Does your vendor have a massive cloud infrastructure?  I can count the major players on one hand.</li>
</ol>
<p>Rather than going out on the marketplace trying to buy a &#8220;MEAP,&#8221; comprised of little-known, proprietary tools and servers, you might find that the existing tools, servers, and management packages in your enterprise already align with Gartner&#8217;s critical capabilities and can be used to build and support multiple, mobile applications.<br />
-Rob</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/meap-mistakes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 and CSS3 on Windows Phone: Simple Geolocation</title>
		<link>http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/</link>
		<comments>http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 00:55:55 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows phone]]></category>
		<category><![CDATA[Geolocation]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1430</guid>
		<description><![CDATA[Now that I&#8217;ve spent the last two articles helping you to get your Metro user experience foundation created with CSS3 and Media Queries, it&#8217;s time to jump into one of the features of HTML5.  Geolocation is perfectly suited for smartphones &#8230; <a href="http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Now that I&#8217;ve spent the last two articles helping you to get your <strong>Metro</strong> user experience foundation created with <strong>CSS3</strong> and <strong>Media Queries</strong>, it&#8217;s time to jump into one of the features of <strong>HTML5</strong>.  <strong>Geolocation</strong> is perfectly suited for smartphones because location awareness is something they all have in common.  Most people are under the impression that only native mobile apps have the power to reach into the platform APIs and retrieve a device&#8217;s current location.  Luckily, with modern HTML5 browsers like <strong>Internet Explorer 9</strong>, web pages can use <strong>JavaScript</strong> to gather this same information.  This API finds your location via the following methods:</p>
<ul>
<li><strong>GPS</strong>:  This is the most accurate method but it requires you to be outdoors and has a reputation for draining batteries.</li>
<li><strong>IP Address</strong>:  There&#8217;s a location database that maps IP addresses to locations which may or may not be accurate depending on how far away your DHCP server is from your current location.</li>
<li><strong>Wi-Fi</strong>:  This also maps IP addresses to locations but also triangulates between Access Points.  It works indoors and may be relatively accurate.</li>
<li><strong>Cell Tower Triangulation</strong>: This also works indoors and can be fairly accurate depending on how far apart the closest cellular towers are.</li>
</ul>
<p>Let&#8217;s take a look at a simple page containing <strong>HTML</strong> and <strong>JavaScript</strong>:</p>
<h5>&lt;!DOCTYPE html&gt;</h5>
<h5>&lt;html lang=&#8221;en&#8221;&gt;</h5>
<h5>&lt;head&gt;</h5>
<h5 style="padding-left: 30px;">    &lt;meta charset=&#8221;utf-8&#8243; /&gt;</h5>
<h5 style="padding-left: 30px;">    &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0, user-scalable=yes&#8221; /&gt;</h5>
<h5 style="padding-left: 30px;">    &lt;meta name=&#8221;MobileOptimized&#8221; content=&#8221;width&#8221; /&gt;</h5>
<h5 style="padding-left: 30px;">    &lt;meta name=&#8221;HandheldFriendly&#8221; content=&#8221;true&#8221; /&gt;</h5>
<h5 style="padding-left: 30px;">    &lt;link rel=&#8221;stylesheet&#8221; href=&#8221;MetroLight.css&#8221;&gt;</h5>
<h5 style="padding-left: 30px;">    &lt;title&gt;Geolocation&lt;/title&gt;</h5>
<h5>    &lt;/head&gt;</h5>
<h5>&lt;body&gt;</h5>
<h5>&lt;p&gt;CONTOSO TRACKER&lt;/p&gt;</h5>
<h5 style="padding-left: 30px;">&lt;h4&gt;Simple Geolocation&lt;/h4&gt;</h5>
<h5 style="padding-left: 30px;">&lt;form&gt;</h5>
<h5 style="padding-left: 60px;">&lt;fieldset&gt;</h5>
<h5 style="padding-left: 90px;">&lt;legend&gt;Track&lt;/legend&gt;</h5>
<h5 style="padding-left: 90px;">&lt;button type=&#8221;button&#8221; id=&#8221;locationButton&#8221; onclick=&#8221;getPosition()&#8221;&gt;Get Location&lt;/button&gt;</h5>
<h5 style="padding-left: 60px;">&lt;/fieldset&gt;</h5>
<h5 style="padding-left: 30px;">&lt;/form&gt;</h5>
<h5 style="padding-left: 30px;">&lt;script&gt;</h5>
<h5 style="padding-left: 60px;">function getPosition() {</h5>
<h5 style="padding-left: 90px;">if (navigator.geolocation) {</h5>
<h5 style="padding-left: 120px;">navigator.geolocation.getCurrentPosition(displayLocation);</h5>
<h5 style="padding-left: 90px;">}</h5>
<h5 style="padding-left: 90px;">else {</h5>
<h5 style="padding-left: 120px;">alert(&#8220;No Geolocation Support&#8221;);</h5>
<h5 style="padding-left: 90px;">}</h5>
<h5 style="padding-left: 60px;">}</h5>
<h5 style="padding-left: 60px;">function displayLocation(position) {</h5>
<h5 style="padding-left: 90px;">var latitude = position.coords.latitude;</h5>
<h5 style="padding-left: 90px;">var longitude = position.coords.longitude;</h5>
<h5 style="padding-left: 90px;">alert(&#8220;You&#8217;re at Latitude: &#8221; + latitude + &#8220;, Longitude: &#8221; + longitude);</h5>
<h5 style="padding-left: 60px;">}</h5>
<h5 style="padding-left: 30px;">&lt;/script&gt;</h5>
<h5>&lt;/body&gt;</h5>
<h5>&lt;/html&gt;</h5>
<p>As you can see, I&#8217;ve taken our <strong>HTML5</strong> +<strong> Mobile Web boilerplate</strong> and included the <strong>Light Metro</strong> stylesheet to get started.  Beyond that, it&#8217;s just a simple button designed to call a JavaScript function via the <strong>onclick event</strong>.  For the sake of this example, I&#8217;ve done the unthinkable and have included the JavaScript inside the web page.  Please never to this in production.</p>
<p>The onclick event calls the <strong>getPosition()</strong> function.  The first thing you should notice is a bit of <strong>defensive coding</strong> where I test to see if the <strong>navigator.geolocation </strong>capability exists.  If the target browser allows me to pass that test, I then call the <strong>getCurrentPosition() </strong>method and pass in a single arguement for the <strong>successCallback</strong> parameter.  Don&#8217;t worry, I&#8217;ll dive into the other two parameters in the next article.</p>
<p>The <strong>displayLocation </strong>callback function is called once the device passes the coordinates back to the web page.  After that, it&#8217;s a simple matter of retrieving the <strong>latitude</strong> and <strong>longitude</strong> values.</p>
<p>This first image below shows you what the mobile web page should look like when you run it on <strong>Windows Phone 7.5</strong>:</p>
<p><a href="http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/simplegeo1/" rel="attachment wp-att-1432"><img class="aligncenter size-full wp-image-1432" title="GeolocationPage" src="http://robtiffany.com/wp-content/uploads/2012/02/SimpleGeo1.png" alt="Geolocation Page" width="496" height="921" /></a></p>
<p>You should see the now-familair <strong>Light Metro UX</strong>.  When you click the <strong>Get Location</strong> button, <strong>IE9</strong> will popup a dialog asking your <strong>permission</strong> to allow the web page to access your location from <strong>Windows Phone</strong> as shown below:</p>
<p><a href="http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/simplegeo2/" rel="attachment wp-att-1437"><img class="aligncenter size-full wp-image-1437" title="GeolocationAllow" src="http://robtiffany.com/wp-content/uploads/2012/02/SimpleGeo2.png" alt="Geolocation Allow" width="497" height="922" /></a></p>
<p>This should give you comfort in knowing the Big Brother cannot anonymously track you.  You can say <strong>Yes</strong> or <strong>No</strong> for each Geolocation request and you can check the checkbox to remember your choice for this particular web page.  Once you&#8217;ve said Yes, the device will give you a lat/long as shown in the image below on the left:</p>
<p><a href="http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/simplegeo3/" rel="attachment wp-att-1438"><img class="aligncenter size-large wp-image-1438" title="GeolocationCoord" src="http://robtiffany.com/wp-content/uploads/2012/02/SimpleGeo3-1024x801.png" alt="Geolocation Coordinates" width="627" height="490" /></a></p>
<p>In order to more easily test this on my <strong>PC</strong> with <strong>Visual Studio 2010</strong> running, I used the Windows Phone <strong>emulator</strong>, plus the additional tools you get with the <strong>Windows Phone 7.1 SDK</strong>.  By clicking on the <strong>Location</strong> tab, you can then click on the <strong>Bing</strong> map to get a <strong>Pushpin</strong> in a particular location.  The coordinates for the pushpin are displayed in the <strong>Current Location</strong> section which should match what you see in the emulator.  That&#8217;s all there is to it!</p>
<p>Congratulations!  You can now get lat/long coordinates without building an app.</p>
<p>Keep coding,</p>
<p>-Rob</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/html5-and-css3-on-windows-phone-simple-geolocation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5 and CSS3 on Windows Phone: Dark and Light Styles</title>
		<link>http://robtiffany.com/html5-and-css3-on-windows-phone-dark-and-light-styles/</link>
		<comments>http://robtiffany.com/html5-and-css3-on-windows-phone-dark-and-light-styles/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 06:44:54 +0000</pubDate>
		<dc:creator>Rob Tiffany</dc:creator>
				<category><![CDATA[Windows phone]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://robtiffany.com/?p=1397</guid>
		<description><![CDATA[In my last article covering HTML5 and CSS3 on Windows Phone, I got you started with a simple boilerplate.  It just so happened that the style I presented you with was Dark.  Since we know that Windows Phone also has a &#8230; <a href="http://robtiffany.com/html5-and-css3-on-windows-phone-dark-and-light-styles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last article covering HTML5 and CSS3 on Windows Phone, I got you started with a simple boilerplate.  It just so happened that the style I presented you with was Dark.  Since we know that Windows Phone also has a light theme, I think it&#8217;s important that your mobile web site have one as well.  Below is an enhanced version of the boilerplate HTML5 file that displays many commonly used Form elements:</p>
<h5>&lt;!DOCTYPE html&gt;</h5>
<h5>&lt;html lang=&#8221;en&#8221;&gt;</h5>
<h5>    &lt;head&gt;</h5>
<h5>        &lt;meta charset=&#8221;utf-8&#8243; /&gt;</h5>
<h5>        &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0, user-scalable=yes&#8221; /&gt;</h5>
<h5>        &lt;meta name=&#8221;MobileOptimized&#8221; content=&#8221;width&#8221; /&gt;</h5>
<h5>        &lt;meta name=&#8221;HandheldFriendly&#8221; content=&#8221;true&#8221; /&gt;</h5>
<h5>        &lt;link rel=&#8221;stylesheet&#8221; href=&#8221;MetroDark.css&#8221;&gt;</h5>
<h5>        &lt;title&gt;Web Storage&lt;/title&gt;</h5>
<h5>    &lt;/head&gt;</h5>
<h5>    &lt;body&gt;</h5>
<h5>        &lt;p&gt;CONTOSO FRUIT COMPANY&lt;/p&gt;</h5>
<h5>        &lt;h4&gt;Enter Products&lt;/h4&gt;</h5>
<h5>        &lt;form&gt;</h5>
<h5>            &lt;fieldset&gt;</h5>
<h5>                &lt;legend&gt;Add&lt;/legend&gt;</h5>
<h5>                &lt;label id=&#8221;ValueLabel&#8221;&gt;Product Name:&lt;/label&gt;</h5>
<h5>                &lt;br /&gt;</h5>
<h5>                &lt;input id=&#8217;ValueInput&#8217; type=&#8217;text&#8217; /&gt;</h5>
<h5>                &lt;br /&gt;&lt;br /&gt;</h5>
<h5>                &lt;label id=&#8221;StateLabel&#8221;&gt;States:&lt;/label&gt;</h5>
<h5>                &lt;br /&gt;</h5>
<h5>                &lt;select name=&#8221;states&#8221;&gt;</h5>
<h5>                   &lt;option value=&#8221;Washington&#8221;&gt;Washington&lt;/option&gt;</h5>
<h5>                   &lt;option value=&#8221;Florida&#8221;&gt;Florida&lt;/option&gt;</h5>
<h5>                   &lt;option value=&#8221;California&#8221;&gt;California&lt;/option&gt;</h5>
<h5>                &lt;/select&gt;</h5>
<h5>                &lt;br /&gt;&lt;br /&gt;</h5>
<h5>                &lt;label id=&#8221;RefLabel&#8221;&gt;Refrigerate:&lt;/label&gt;</h5>
<h5>                &lt;br /&gt;</h5>
<h5>                &lt;input type=&#8221;radio&#8221; name=&#8221;refrigerate&#8221; value=&#8221;yes&#8221; /&gt; Yes</h5>
<h5>                &lt;input type=&#8221;radio&#8221; name=&#8221;refrigerate&#8221; value=&#8221;no&#8221; /&gt; No</h5>
<h5>                &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</h5>
<h5>                &lt;button id=&#8217;insertButton&#8217;&gt;  Add Product  &lt;/button&gt;</h5>
<h5>            &lt;/fieldset&gt;</h5>
<h5>        &lt;/form&gt;</h5>
<h5>    &lt;/body&gt;</h5>
<h5>&lt;/html&gt;</h5>
<p>Here is the Dark CSS file that accompanies the above HTML5 file:</p>
<h5>@media screen and (max-width:480px) {</h5>
<h5>    body {</h5>
<h5>        font-family: &#8220;Segoe WP&#8221;, Tahoma, Geneva, Verdana;</h5>
<h5>        background-color: #000000;</h5>
<h5>        color: #ffffff;</h5>
<h5>        padding: 5px;</h5>
<h5>    }</h5>
<h5>    h1, h2, h3, h4, h5, h6 {</h5>
<h5>    font-family:&#8221;Segoe WP Semibold&#8221;;</h5>
<h5>    margin-bottom:5px;</h5>
<h5>    }</h5>
<h5>    h1 {</h5>
<h5>    font-size: 48pt;</h5>
<h5>    }</h5>
<h5>    h2 {</h5>
<h5>    font-size: 40pt;</h5>
<h5>    }</h5>
<h5>    h3 {</h5>
<h5>    font-size:32pt;</h5>
<h5>    }</h5>
<h5>    h4{</h5>
<h5>    font-size:24pt;</h5>
<h5>    }</h5>
<h5>    h5 {</h5>
<h5>    font-size:20pt;</h5>
<h5>    }</h5>
<h5>    h6 {</h5>
<h5>    font-size:18pt;</h5>
<h5>    }</h5>
<h5>    p {</h5>
<h5>    font-size: 14pt;</h5>
<h5>    }</h5>
<h5>    input, select, button {</h5>
<h5>        color: #ffffff;</h5>
<h5>        background-color: #000000;</h5>
<h5>        border: 2px solid white;</h5>
<h5>        vertical-align: baseline;</h5>
<h5>        font-size: 17pt;</h5>
<h5>        min-width: 40px;</h5>
<h5>        min-height: 40px;</h5>
<h5>    }</h5>
<h5>    label {</h5>
<h5>    vertical-align:baseline;</h5>
<h5>    font-size:17pt;</h5>
<h5>    }</h5>
<h5>    input.hasfocus {</h5>
<h5>    background-color:white;</h5>
<h5>    color:black</h5>
<h5>    }</h5>
<h5>    fieldset, legend {</h5>
<h5>    font-family:&#8221;Segoe UI Semibold&#8221;;</h5>
<h5>    font-size:12pt;</h5>
<h5>    }</h5>
<h5>    fieldset {</h5>
<h5>    padding:12pt;</h5>
<h5>    border: 1px solid white;</h5>
<h5>    }</h5>
<h5>    legend {</h5>
<h5>        color: #ffffff;</h5>
<h5>    }</h5>
<h5>}</h5>
<p>The combination of a mobile-optimized HTML5 page and a Dark Metro CSS3 stylesheet results in a familiar UX designed for AMOLED displays:</p>
<p><a href="http://robtiffany.com/windows-phone/html5-and-css3-on-windows-phone-dark-and-light-styles/attachment/darkcss-2" rel="attachment wp-att-1410"><img class="aligncenter size-full wp-image-1410" title="DarkCSS" src="http://robtiffany.com/wp-content/uploads/2012/02/DarkCSS1.png" alt="" width="585" height="1088" /></a></p>
<p>But what if you want to display a light mobile website?  Luckily, you get to use the same HTML5 page and just point to a new, Light Metro CSS stylesheet as shown below:</p>
<h5>&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;MetroLight.css&#8221;&gt;</h5>
<p>So what does this new CSS file look like?  A lot like the dark one with some subtle changes:</p>
<h5>@media screen and (max-width:480px) {</h5>
<h5>    body {</h5>
<h5>        font-family: &#8220;Segoe WP&#8221;, Tahoma, Geneva, Verdana;</h5>
<h5>        background-color: #ffffff;</h5>
<h5>        color: #000000;</h5>
<h5>        padding: 5px;</h5>
<h5>    }</h5>
<h5>    h1, h2, h3, h4, h5, h6 {</h5>
<h5>    font-family:&#8221;Segoe WP Semibold&#8221;;</h5>
<h5>    margin-bottom:5px;</h5>
<h5>    }</h5>
<h5>    h1 {</h5>
<h5>    font-size: 48pt;</h5>
<h5>    }</h5>
<h5>    h2 {</h5>
<h5>    font-size: 40pt;</h5>
<h5>    }</h5>
<h5>    h3 {</h5>
<h5>    font-size:32pt;</h5>
<h5>    }</h5>
<h5>    h4{</h5>
<h5>    font-size:24pt;</h5>
<h5>    }</h5>
<h5>    h5 {</h5>
<h5>    font-size:20pt;</h5>
<h5>    }</h5>
<h5>    h6 {</h5>
<h5>    font-size:18pt;</h5>
<h5>    }</h5>
<h5>    p {</h5>
<h5>    font-size: 14pt;</h5>
<h5>    }</h5>
<h5>    input, select, button {</h5>
<h5>        color: #000000;</h5>
<h5>        background-color: #ffffff;</h5>
<h5>        border: 2px solid black;</h5>
<h5>        vertical-align: baseline;</h5>
<h5>        font-size: 17pt;</h5>
<h5>        min-width: 40px;</h5>
<h5>        min-height: 40px;</h5>
<h5>    }</h5>
<h5>    label {</h5>
<h5>    vertical-align:baseline;</h5>
<h5>    font-size:17pt;</h5>
<h5>    }</h5>
<h5>    input.hasfocus {</h5>
<h5>    background-color:white;</h5>
<h5>    color:black</h5>
<h5>    }</h5>
<h5>    fieldset, legend {</h5>
<h5>    font-family:&#8221;Segoe UI Semibold&#8221;;</h5>
<h5>    font-size:12pt;</h5>
<h5>    }</h5>
<h5>    fieldset {</h5>
<h5>    padding:12pt;</h5>
<h5>    border: 1px solid black;</h5>
<h5>    }</h5>
<h5>    legend {</h5>
<h5>        color: #000000;</h5>
<h5>    }</h5>
<h5>}</h5>
<p>With the Light Metro stylesheet, you now have a look and feel that&#8217;s reminiscent of the Outlook experience on Windows Phone.  With the black and white colors reversed, you get the following:</p>
<p><a href="http://robtiffany.com/windows-phone/html5-and-css3-on-windows-phone-dark-and-light-styles/attachment/lightcss" rel="attachment wp-att-1419"><img class="aligncenter size-full wp-image-1419" title="LightCSS" src="http://robtiffany.com/wp-content/uploads/2012/02/LightCSS.png" alt="" width="587" height="1091" /></a></p>
<p>So there you have it!  You started with a simple HTML5/CSS3 boilerplate and now you&#8217;re building mobile web apps with both a Dark and Light Metro UI.  All the touchable elements are large enough for big fingers and the separation between controls ensures that users won&#8217;t hit two at the same time.  Consider this your foundation for a new HTML5 journey that you&#8217;ll be taking with Me, Internet Explorer, and Windows Phone.</p>
<p>Keep coding!</p>
<p>Rob</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://robtiffany.com/html5-and-css3-on-windows-phone-dark-and-light-styles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.799 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-15 18:23:37 -->

