<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>StructureTooBig</title>
    <description>developing on the microsoft stack</description>
    <link>http://blog.structuretoobig.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.5.0.6</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://blog.structuretoobig.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://blog.structuretoobig.com/syndication.axd</blogChannel:blink>
    <dc:creator>bhitney</dc:creator>
    <dc:title>StructureTooBig</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/structuretoobig" /><feedburner:info uri="structuretoobig" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Microsoft DevRadio: (Part 6) Using Windows Azure to Build Back-End Services for Windows 8 Apps – Adding Authentication</title>
      <description>&lt;p&gt;&lt;iframe style="height: 480px; width: 640px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-6-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--Adding-/player?w=640&amp;amp;h=480" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;    &lt;br /&gt;In Part 6 of of their “Using Windows Azure to Build Back-End Services for Windows 8 apps” series &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney&lt;/a&gt; and &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie&lt;/a&gt;&amp;#160; explore the world of built-in support for authentication in Windows Azure Mobile Services. Tune in as they quickly demo for us the process of adding authentication for your mobile and Windows Store apps.&amp;#160; &lt;b&gt;&lt;a href="http://bit.ly/YdjEFv"&gt;Check out the full article here.&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Watch&lt;/b&gt; &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 1&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-2-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 2&lt;/b&gt;&lt;/a&gt; | &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-3-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--ASPNET-"&gt;&lt;b&gt;Part 3&lt;/b&gt;&lt;/a&gt; | &lt;b&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-4-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--Azure-M"&gt;Part 4&lt;/a&gt; | &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-5-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--Adding-"&gt;Part 5&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;a href="http://bit.ly/MXrDmh"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200113720"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;a href="http://aka.ms/MyGreatIdea"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002_6.gif" width="15" height="15" /&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;Subscribe to our podcast via &lt;a href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;iTunes&lt;/a&gt; or &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;RSS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/jj618399"&gt;Windows Azure Hands-on Labs Online&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Blogs &amp;amp; Articles &lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie’s Blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/jj554226.aspx"&gt;Mobile Services Server Script Reference&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/jj554220.aspx"&gt;Mobile Services user object&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="https://dev.twitter.com/"&gt;Twitter Developer site&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Videos:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure"&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Virtual Labs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;MSDN Virtual Labs: Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/c139/7ff09dfe-a041-4377-a8f9-ea02c0e3c139/DevRadioAzureWin8Prt6.mp3"&gt;MP3&lt;/a&gt; (Audio only) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/c139/7ff09dfe-a041-4377-a8f9-ea02c0e3c139/DevRadioAzureWin8Prt6.mp4"&gt;MP4&lt;/a&gt; (iPod, Zune HD) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/c139/7ff09dfe-a041-4377-a8f9-ea02c0e3c139/DevRadioAzureWin8Prt6_high.mp4"&gt;High Quality MP4&lt;/a&gt; (iPad, PC) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/c139/7ff09dfe-a041-4377-a8f9-ea02c0e3c139/DevRadioAzureWin8Prt6_mid.mp4"&gt;Mid Quality MP4&lt;/a&gt; (WP7, HTML5) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/c139/7ff09dfe-a041-4377-a8f9-ea02c0e3c139/DevRadioAzureWin8Prt6_Source.wmv"&gt;High Quality WMV&lt;/a&gt; (PC, Xbox, MCE) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/cf39zc15gao" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/cf39zc15gao/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/05/08/Microsoft-DevRadio-(Part-6)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-Adding-Authentication.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=a4237e3d-35ba-4619-9533-6de9cee6bf4e</guid>
      <pubDate>Wed, 08 May 2013 19:03:30 -0400</pubDate>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=a4237e3d-35ba-4619-9533-6de9cee6bf4e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=a4237e3d-35ba-4619-9533-6de9cee6bf4e</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/05/08/Microsoft-DevRadio-(Part-6)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-Adding-Authentication.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=a4237e3d-35ba-4619-9533-6de9cee6bf4e</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=a4237e3d-35ba-4619-9533-6de9cee6bf4e</feedburner:origLink></item>
    <item>
      <title>Windows 8 “Elev8” App Challenge</title>
      <description>&lt;p&gt;We’re coming up on the annual &lt;a href="http://developersguild.org/"&gt;Carolina Code Camp&lt;/a&gt; here in Charlotte and this year we thought it would fun to hold a hackathon &lt;strong&gt;leading up to&lt;/strong&gt; the code camp, rather than simply run an all-day event at the code camp.&amp;#160; Here’s your chance to develop a great app for Windows 8, &lt;em&gt;elev8&lt;/em&gt; your skillset, and potentially win some cool stuff&amp;#160; Here are the details:&lt;/p&gt;  &lt;p&gt;The short version: develop a Windows 8 app, optionally attend some of our workshops, and submit it to the challenge.&amp;#160; At some point you need to be in person -- either at one of the workshops, or at the code camp -- as we need to prepare the demos and verify you are human.&amp;#160; Winners will be determined at the Carolina Code Camp.&amp;#160; &lt;/p&gt;  &lt;p&gt;The details:&lt;/p&gt;  &lt;p&gt;This app challenge is open to all Developers Guild members and members from the local community.&amp;#160; Download the free &lt;a href="http://bit.ly/Q6xyrW"&gt;Visual Studio 2012 Express tools and other related SDKs here&lt;/a&gt; to begin developing your app.&amp;#160; Apps entered will be voted upon at the &lt;a href="http://codecamp.developersguild.org/2013/"&gt;Carolina Code Camp&lt;/a&gt; on Saturday, May 4, 2013 by the attendees and organizers.&lt;/p&gt;  &lt;p&gt;While it is strongly encouraged you attend the Carolina Code Camp to demo your application, you do not need to be present to win (you will need to arrange to pick up your prize, if you win).&amp;#160; However, you must attend one of the &lt;a href="http://www.meetup.com/Charlotte-Windows-App-Developers/"&gt;Charlotte Windows App Developers&lt;/a&gt; workshops to demo and showcase your app prior to the code camp so we can have it loaded and ready for review. &lt;/p&gt;  &lt;p&gt;All apps must be original and new (published after 3/26) and must be submitted to the Windows store.&amp;#160; In the event it’s not approved yet and publically available, send some screenshots to show the app’s current progress.&amp;#160; The package files can be copied over to a demo machine, or you can bring your own machine the code camp to demo the application.&lt;/p&gt;  &lt;p&gt;Want some help developing your app?&amp;#160; Attend one of the &lt;a href="http://www.meetup.com/Charlotte-Windows-App-Developers/"&gt;Charlotte Windows App Developers meetups&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Prizes:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://phillydotnet.org/wp-content/uploads/2013/03/LenovaYogi.png"&gt;&lt;img style="float: left; margin: 0px 10px 0px 0px; display: inline" alt="LenovaYogi" align="left" src="http://phillydotnet.org/wp-content/uploads/2013/03/LenovaYogi-300x216.png" width="300" height="216" /&gt;&lt;/a&gt;1&lt;sup&gt;st&lt;/sup&gt; Place:&amp;#160; &lt;a href="http://www.lenovo.com/products/us/laptop/ideapad/yoga/yoga-11/"&gt;Lenovo IdeaPad Yoga 11&lt;/a&gt; and &lt;a href="http://www.nokia.com/us-en/phones/phone/lumia820/"&gt;Nokia Lumia 820 Windows Phone&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;2&lt;sup&gt;nd&lt;/sup&gt; Place:&amp;#160; $250 Visa Gift Card, &lt;a href="http://www.microsoft.com/hardware/en-us/p/wedge-mobile-keyboard"&gt;Wedge Mobile Keyboard&lt;/a&gt; and &lt;a href="http://www.microsoft.com/hardware/en-us/p/wedge-touch-mouse"&gt;Wedge Touch Mouse&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;3&lt;sup&gt;rd&lt;/sup&gt; Place:&amp;#160; $250 Visa Gift Card&lt;/p&gt;  &lt;p&gt;As an additional incentive, the first 10 entries will receive a 4,000 XBOX Live Points card valued at $50!&lt;/p&gt;  &lt;p&gt;Also, don’t forget about the &lt;a href="https://build.windowsstore.com/keepthecash"&gt;Keep The Cash&lt;/a&gt; offer from Microsoft.&amp;#160; Earn $100 for every qualified app you enter.&amp;#160; See site for more details.&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/RBQ07QCizz4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/RBQ07QCizz4/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/04/17/Windows-8-“Elev8”-App-Challenge.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=d1b1e4a1-fbb7-4493-8d7e-1eac0ebe2ec3</guid>
      <pubDate>Wed, 17 Apr 2013 16:47:54 -0400</pubDate>
      <category>Windows 8</category>
      <category>Development</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=d1b1e4a1-fbb7-4493-8d7e-1eac0ebe2ec3</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=d1b1e4a1-fbb7-4493-8d7e-1eac0ebe2ec3</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/04/17/Windows-8-“Elev8”-App-Challenge.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=d1b1e4a1-fbb7-4493-8d7e-1eac0ebe2ec3</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=d1b1e4a1-fbb7-4493-8d7e-1eac0ebe2ec3</feedburner:origLink></item>
    <item>
      <title>Microsoft DevRadio: (Part 5) Using Windows Azure to Build Back-End Services for Windows 8 Apps – Adding Push Notifications</title>
      <description>&lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-5-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--Adding-/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;    &lt;br /&gt;In Part 5 of of their “Using Windows Azure to Build Back-End Services for Windows 8 apps” series &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati&lt;/a&gt;, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney&lt;/a&gt; and &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie&lt;/a&gt;&amp;#160; show us how to quickly add the ability to implement push notifications for his GameLeader Service using Azure Mobile Services. &lt;a href="http://aka.ms/AddingPushNotifications"&gt;&lt;b&gt;Check out the full article here.&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Watch&lt;/b&gt; &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 1&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-2-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 2&lt;/b&gt;&lt;/a&gt; | &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-3-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--ASPNET-"&gt;&lt;b&gt;Part 3&lt;/b&gt;&lt;/a&gt; | &lt;b&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-4-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--Azure-M"&gt;Part 4&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;a href="http://bit.ly/MXrDmh"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200113720"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;a href="http://aka.ms/MyGreatIdea"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002_5.gif" width="15" height="15" /&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;Subscribe to our podcast via &lt;a href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;iTunes&lt;/a&gt; or &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;RSS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/jj618399"&gt;Windows Azure Hands-on Labs Online&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Blogs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie’s Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Videos:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure"&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Virtual Labs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;MSDN Virtual Labs: Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/21e3/590fa067-b6cf-4ff9-b998-da59ede421e3/DevRadioAzureWin8Prt5.mp3"&gt;MP3&lt;/a&gt; (Audio only) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/21e3/590fa067-b6cf-4ff9-b998-da59ede421e3/DevRadioAzureWin8Prt5.mp4"&gt;MP4&lt;/a&gt; (iPod, Zune HD) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/21e3/590fa067-b6cf-4ff9-b998-da59ede421e3/DevRadioAzureWin8Prt5_high.mp4"&gt;High Quality MP4&lt;/a&gt; (iPad, PC) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/21e3/590fa067-b6cf-4ff9-b998-da59ede421e3/DevRadioAzureWin8Prt5_mid.mp4"&gt;Mid Quality MP4&lt;/a&gt; (WP7, HTML5) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/21e3/590fa067-b6cf-4ff9-b998-da59ede421e3/DevRadioAzureWin8Prt5_Source.wmv"&gt;High Quality WMV&lt;/a&gt; (PC, Xbox, MCE) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/WOYhViqctbg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/WOYhViqctbg/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/04/15/Microsoft-DevRadio-(Part-5)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-Adding-Push-Notifications.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=092e952a-0db3-4b75-bb99-d3c271332d10</guid>
      <pubDate>Mon, 15 Apr 2013 09:49:29 -0400</pubDate>
      <category>Development</category>
      <category>Microsoft</category>
      <category>Windows 8</category>
      <category>Azure</category>
      <category>USCloud</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=092e952a-0db3-4b75-bb99-d3c271332d10</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=092e952a-0db3-4b75-bb99-d3c271332d10</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/04/15/Microsoft-DevRadio-(Part-5)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-Adding-Push-Notifications.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=092e952a-0db3-4b75-bb99-d3c271332d10</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=092e952a-0db3-4b75-bb99-d3c271332d10</feedburner:origLink></item>
    <item>
      <title>Microsoft DevRadio: (Part 4) Using Windows Azure to Build Back-End Services for Windows 8 Apps – Azure Mobile Services</title>
      <description>&lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-4-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--Azure-M/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;    &lt;br /&gt;In Part 4 of of their “Using Windows Azure to Build Back-End Services for Windows 8 apps” series&amp;#160; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati&lt;/a&gt;, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney&lt;/a&gt; and &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie&lt;/a&gt; show us how to build the same game leaderboard service on top of Windows Azure Mobile Services. Tune in as Andrew demos for us how to get started as well as lays out what some of the +/- are for using Azure Mobile Services for this kind of service.&amp;#160; &lt;a href="http://devhammer.net/blog/building-back-end-data-and-services-for-windows-8-apps-windows-azure-mobile-services#.UVSs9Uzn-Uk"&gt;&lt;b&gt;Check out the full article here.&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Watch&lt;/b&gt; &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 1&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-2-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 2&lt;/b&gt;&lt;/a&gt; | &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-3-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--ASPNET-"&gt;&lt;b&gt;Part 3&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;a href="http://bit.ly/MXrDmh"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200113720"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;a href="http://aka.ms/MyGreatIdea"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002_4.gif" width="15" height="15" /&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;Subscribe to our podcast via &lt;a href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;iTunes&lt;/a&gt; or &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;RSS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/jj618399"&gt;Windows Azure Hands-on Labs Online&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Blogs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie’s Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Videos:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure"&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Virtual Labs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;MSDN Virtual Labs: Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/e023/c4549306-594b-4ca3-8877-33a1d4a7e023/DevRadioAzureWin8Prt4MobileServices.mp3"&gt;MP3&lt;/a&gt; (Audio only) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/e023/c4549306-594b-4ca3-8877-33a1d4a7e023/DevRadioAzureWin8Prt4MobileServices.mp4"&gt;MP4&lt;/a&gt; (iPod, Zune HD) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/e023/c4549306-594b-4ca3-8877-33a1d4a7e023/DevRadioAzureWin8Prt4MobileServices_high.mp4"&gt;High Quality MP4&lt;/a&gt; (iPad, PC) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/e023/c4549306-594b-4ca3-8877-33a1d4a7e023/DevRadioAzureWin8Prt4MobileServices_mid.mp4"&gt;Mid Quality MP4&lt;/a&gt; (WP7, HTML5) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/e023/c4549306-594b-4ca3-8877-33a1d4a7e023/DevRadioAzureWin8Prt4MobileServices_Source.wmv"&gt;High Quality WMV&lt;/a&gt; (PC, Xbox, MCE) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/Q4KRZoMJkuQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/Q4KRZoMJkuQ/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/04/08/Microsoft-DevRadio-(Part-4)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-Azure-Mobile-Services.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=645d5ecb-4d4b-462f-a26c-ef22b5ca3ae3</guid>
      <pubDate>Mon, 08 Apr 2013 11:25:53 -0400</pubDate>
      <category>Azure</category>
      <category>Windows 8</category>
      <category>USCloud</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=645d5ecb-4d4b-462f-a26c-ef22b5ca3ae3</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=645d5ecb-4d4b-462f-a26c-ef22b5ca3ae3</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/04/08/Microsoft-DevRadio-(Part-4)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-Azure-Mobile-Services.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=645d5ecb-4d4b-462f-a26c-ef22b5ca3ae3</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=645d5ecb-4d4b-462f-a26c-ef22b5ca3ae3</feedburner:origLink></item>
    <item>
      <title>Microsoft DevRadio: (Part 3) Using Windows Azure to Build Back-End Services for Windows 8 Apps – ASP.NET Web API</title>
      <description>&lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-3-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps--ASPNET-/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;    &lt;br /&gt;Back for part 3 in their series for “Using Windows Azure to Build Back-End Services for Windows 8 apps”, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati&lt;/a&gt;, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney&lt;/a&gt; and &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie&lt;/a&gt; show us how easy it is to host services built with the ASP.NET Web API using the new &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200154482"&gt;Windows Azure Web Sites&lt;/a&gt; feature. &lt;b&gt;&lt;a href="http://bit.ly/TEBoHA"&gt;Check out the full article here.&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 1&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-2-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps"&gt;&lt;b&gt;Part 2&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;a href="http://bit.ly/MXrDmh"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200113720"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;a href="http://aka.ms/MyGreatIdea"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002_3.gif" width="15" height="15" /&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;Subscribe to our podcast via &lt;a href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;iTunes&lt;/a&gt; or &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;RSS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/jj618399"&gt;Windows Azure Hands-on Labs Online&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Blogs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie’s Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Videos:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure"&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Virtual Labs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;MSDN Virtual Labs: Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/760f/011f55fc-2bf0-4640-9faa-fb8e0f4e760f/DevRadioAzureWin8WebAPI.mp3"&gt;MP3&lt;/a&gt; (Audio only) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/760f/011f55fc-2bf0-4640-9faa-fb8e0f4e760f/DevRadioAzureWin8WebAPI.mp4"&gt;MP4&lt;/a&gt; (iPod, Zune HD) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/760f/011f55fc-2bf0-4640-9faa-fb8e0f4e760f/DevRadioAzureWin8WebAPI_high.mp4"&gt;High Quality MP4&lt;/a&gt; (iPad, PC) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/760f/011f55fc-2bf0-4640-9faa-fb8e0f4e760f/DevRadioAzureWin8WebAPI_mid.mp4"&gt;Mid Quality MP4&lt;/a&gt; (WP7, HTML5) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/760f/011f55fc-2bf0-4640-9faa-fb8e0f4e760f/DevRadioAzureWin8WebAPI_Source.wmv"&gt;High Quality WMV&lt;/a&gt; (PC, Xbox, MCE) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/LLIYrIvOlJo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/LLIYrIvOlJo/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/03/29/Microsoft-DevRadio-(Part-3)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-ASPNET-Web-API.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=38e60140-9bde-4f6c-84c6-c9789274c0a5</guid>
      <pubDate>Fri, 29 Mar 2013 12:10:19 -0400</pubDate>
      <category>ASP.NET</category>
      <category>Azure</category>
      <category>Windows 8</category>
      <category>USCloud</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=38e60140-9bde-4f6c-84c6-c9789274c0a5</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=38e60140-9bde-4f6c-84c6-c9789274c0a5</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/03/29/Microsoft-DevRadio-(Part-3)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps-–-ASPNET-Web-API.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=38e60140-9bde-4f6c-84c6-c9789274c0a5</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=38e60140-9bde-4f6c-84c6-c9789274c0a5</feedburner:origLink></item>
    <item>
      <title>Bing Maps Mashup in Dark Skies</title>
      <description>&lt;p&gt;I&amp;rsquo;ve gotten a few requests about how to do a mashup in &lt;a href="http://apps.microsoft.com/windows/app/dark-skies/4176bcef-efc1-49db-b515-7c8b428d8af7"&gt;Dark Skies&lt;/a&gt; &amp;hellip; so, thought I&amp;rsquo;d do a blog post on how it was put together.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First, what&amp;rsquo;s a mashup?&amp;nbsp;&amp;nbsp; A mashup is an application that combines data from multiple sources into what is, hopefully, a more useful or interesting way to view the data.&amp;nbsp; They are often done as web applications because the data is often pulled from online sources.&amp;nbsp; But, mashups are ideal for Windows 8 and Windows Phone apps, too.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dark Skies is simply a mashup that combines 3 main sources of data.&amp;nbsp; maps (from Bing), light pollution data (from sources like these: &lt;a href="http://www.savethenight.eu/Map.html"&gt;Save The Night,&lt;/a&gt; &lt;a href="http://laps.noaa.gov/albers/slides/ast/places.html"&gt;NOAA&lt;/a&gt;, and &lt;a href="http://www.lightpollution.it/cinzano/en/index.html"&gt;P. Cinzano&lt;/a&gt;), and favorite astronomy viewing locations and looks like so:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_195.png"&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_85.png" alt="image" width="644" height="492" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What makes this interesting is the level of zooming, so you get really specific:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_196.png"&gt;&lt;img style="background-image: none; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_86.png" alt="image" width="244" height="154" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Specific is good, but add in data sharing and you, hopefully, have an ideal mashup experience.&lt;/p&gt;
&lt;p&gt;Overlaying pins is easy as the map.&amp;nbsp; In fact, there&amp;rsquo;s a small sample on putting pins on a map &lt;a href="http://code.msdn.microsoft.com/windowsapps/Bing-Maps-Pushpin-Sample-a10f582b"&gt;here&lt;/a&gt;.&amp;nbsp;&amp;nbsp; The harder part is storing the data, and for this, Windows Azure Mobile Services works really well.&amp;nbsp; I&amp;rsquo;ve talked about that in previous posts.&lt;/p&gt;
&lt;p&gt;The light pollution data is available from a variety of sources but in this case, a &lt;a href="http://www.lightpollution.it/worldatlas/pages/fig1.htm"&gt;high res version with a color that can be made transparent (black) is ideal&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lightpollution.it/worldatlas/pages/fig1.htm" target="_blank"&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_197.png" alt="image" width="244" height="114" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Credit: P. Cinzano, F. Falchi (University of Padova), C. D. Elvidge (NOAA National Geophysical Data Center, Boulder). Copyright Royal Astronomical Society. Reproduced from the Monthly Notices of the RAS by permission of Blackwell Science.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;There are two fundamental problems in overlaying the two: first, the image should be sliced into small tiles to make it bandwidth sensitive (the uncompressed TIF file is 200MB).&amp;nbsp;&amp;nbsp; The second is that the image doesn&amp;rsquo;t exactly line up.&amp;nbsp; It&amp;rsquo;s close, but there are subtle errors that get introduced despite both maps appearing to be &lt;a href="http://en.wikipedia.org/wiki/Mercator_projection" target="_blank"&gt;Mercator projections&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;There are a number of tools that can help you solve this problem, but in this case, I used &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=22420" target="_blank"&gt;MapCruncher&lt;/a&gt;.&amp;nbsp; It&amp;rsquo;s from Microsoft, and it hasn&amp;rsquo;t been updated since 2007, but &amp;hellip; it works.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The idea is that MapCruncher can both transform/skew an image to fit the projection of the map, and carve it up into nice, little tiles.&amp;nbsp; Let&amp;rsquo;s take the following image:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_198.png"&gt;&lt;img style="background-image: none; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_87.png" alt="image" width="244" height="165" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If I want to overlay this image at a specific point on the map. Let&amp;rsquo;s say that the two eyes should be where Lake Superior and Lake Huron are.&amp;nbsp; In MapCruncher, we&amp;rsquo;d bring in the image as an asset, and start defining matching points in the image, like so:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_199.png"&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_88.png" alt="image" width="719" height="353" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not until we hit the lock button near the bottom left that the image is scaled/skewed/transformed to fit.&amp;nbsp; The closer an image is to being the same scale, the better/few points are required to get it look right.&amp;nbsp; Once you hit the Render button in the bottom left, it will go to town and slice and dice the image up, based on the zoom depth requested.&amp;nbsp; More on that in a second.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_200.png"&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_89.png" alt="image" width="719" height="347" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this case, it generated some 92 tiles.&amp;nbsp; When we preview the results, we can see the data is overlaid nicely:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_201.png"&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_90.png" alt="image" width="719" height="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The tiles produced are laid out and named format known as quadkeys.&amp;nbsp;&amp;nbsp; You can read a lot more about it &lt;a href="http://msdn.microsoft.com/en-us/library/bb259689.aspx" target="_blank"&gt;here&lt;/a&gt;, but in short, each tile is scaled to fit the appropriate dimensions based on the current zoom level:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px;" title="Bb259689.5cff54de-5133-4369-8680-52d2723eb756(en-us,MSDN.10).jpg" src="http://i.msdn.microsoft.com/dynimg/IC96238.jpg" alt="Bb259689.5cff54de-5133-4369-8680-52d2723eb756(en-us,MSDN.10).jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The pattern to this approach makes it very easy to know exactly what tile you need, and at what zoom level (detail).&amp;nbsp; Additionally, all of these files can be stored in a flat data structure (like a folder) which makes storage quite simple.&amp;nbsp; The best part is, Bing maps already knows how to build a quad key, so all you have to do is create a tile layer, and specify the quadkey as a parameter by putting it in curly braces, like so:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;MapTileLayer pollutionTileLayer = &lt;span class="kwrd"&gt;new&lt;/span&gt; MapTileLayer();
pollutionTileLayer.TileSource = &lt;span class="str"&gt;"myurl.com/{quadley}.png"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;But, this isn&amp;rsquo;t quite ideal.&amp;nbsp; One problem that I ran into is that if there are a large number of quad keys you don&amp;rsquo;t have (which is the case even in my app), there are a HUGE number of 404&amp;rsquo;s because the app has no way of knowing there isn&amp;rsquo;t a tile available for a specific quad key.&amp;nbsp; While the user doesn&amp;rsquo;t directly see this, it&amp;rsquo;s a lot of wasted traffic and just not clean.&amp;nbsp; The way to solve that is to roll your own GetTileUri handler.&lt;/p&gt;
&lt;p&gt;In my next post, I&amp;rsquo;ll detail the steps involved in setting that up!&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/gf-2JQ474jg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/gf-2JQ474jg/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/03/15/Bing-Maps-Mashup-in-Dark-Skies.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=d826f892-9f5a-4209-b155-1c28f60f0e46</guid>
      <pubDate>Fri, 15 Mar 2013 15:46:00 -0400</pubDate>
      <category>Development</category>
      <category>Microsoft</category>
      <category>Technology</category>
      <category>Windows 8</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=d826f892-9f5a-4209-b155-1c28f60f0e46</pingback:target>
      <slash:comments>15</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=d826f892-9f5a-4209-b155-1c28f60f0e46</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/03/15/Bing-Maps-Mashup-in-Dark-Skies.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=d826f892-9f5a-4209-b155-1c28f60f0e46</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=d826f892-9f5a-4209-b155-1c28f60f0e46</feedburner:origLink></item>
    <item>
      <title>Compressing as Individual Files in Folder</title>
      <description>&lt;p&gt;Let&amp;rsquo;s see how long it takes &lt;a href="http://www.beefycode.com/"&gt;Jim Christopher&lt;/a&gt; to jump in with a better PowerShell solution.&amp;nbsp; :)&lt;/p&gt;
&lt;p&gt;I had a directory full of .avi files that contains RAW, uncompressed data at 60fps from a camera (for astroimaging).&amp;nbsp;&amp;nbsp; Even capturing just a few minutes of data amasses&amp;nbsp; over 10GB of data:&lt;/p&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_191.png" alt="image" width="568" height="116" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;No wonder my drive filled up so quickly.&amp;nbsp; For archiving the data, I wanted to zip each file into its own file, not into a folder.&amp;nbsp; Because I had about 50GB of videos to do, I wanted a simple cmd to do it for each folder.&amp;nbsp; This is pretty easy to do with 7-Zip.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bring up a command prompt in the folder you&amp;rsquo;d want each file to be individually zipped:&lt;/p&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_192.png" alt="image" width="533" height="343" border="0" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Assuming you have 7-Zip installed in its default location, use a command like:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; %I &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;"*.avi"&lt;/span&gt;) do &lt;span class="str"&gt;"c:\Program Files\7-Zip\7z.exe"&lt;/span&gt; a &lt;span class="str"&gt;"%I.zip"&lt;/span&gt; &lt;span class="str"&gt;"%I"&lt;/span&gt; -mx=5 -mmt=4 &amp;ndash;tzip&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;You&amp;rsquo;ll see the progress in the command prompt:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_193.png"&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 25px 0px 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_84.png" alt="image" width="679" height="227" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can, of course, tweak that as necessary.&amp;nbsp;&amp;nbsp; This compresses each file nicely, now consuming about 1.6GB.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.structuretoobig.com/image.axd?picture=image_194.png" alt="image" width="516" height="111" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is a handy way to zip up large number of files into individual archives!&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/qu6-Bz1oXtI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/qu6-Bz1oXtI/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/03/06/Compressing-as-Individual-Files-in-Folder.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=67242243-1584-44fb-ba76-15d09877d018</guid>
      <pubDate>Wed, 06 Mar 2013 11:24:00 -0400</pubDate>
      <category>Tech Tips</category>
      <category>Technology</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=67242243-1584-44fb-ba76-15d09877d018</pingback:target>
      <slash:comments>21</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=67242243-1584-44fb-ba76-15d09877d018</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/03/06/Compressing-as-Individual-Files-in-Folder.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=67242243-1584-44fb-ba76-15d09877d018</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=67242243-1584-44fb-ba76-15d09877d018</feedburner:origLink></item>
    <item>
      <title>Microsoft DevRadio: (Part 2) Using Windows Azure to Build Back-End Services for Windows 8 Apps</title>
      <description>&lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-2-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;    &lt;br /&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati&lt;/a&gt;, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney&lt;/a&gt; and &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie&lt;/a&gt; are back for part 2 of their series and in today’s episode Andrew shows us how to deploy the OData Service for his Windows 8 app to Windows Azure as well as outlines the advantages and disadvantages to building back-end services via this approach.     &lt;br /&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;a href="http://bit.ly/MXrDmh"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://bit.ly/Q6xyrW"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;a href="http://bit.ly/Ng0ysb"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002_2.gif" width="15" height="15" /&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;Subscribe to our podcast via &lt;a href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;iTunes&lt;/a&gt; or &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;RSS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/jj618399"&gt;Windows Azure Hands-on Labs Online&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Blogs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie’s Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Videos:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure"&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Virtual Labs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;MSDN Virtual Labs: Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/7db9/dca47a93-6a5f-4172-afb7-3a78a6fb7db9/DevRadioWinAzureWin8Prt2.mp3"&gt;MP3&lt;/a&gt; (Audio only) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/7db9/dca47a93-6a5f-4172-afb7-3a78a6fb7db9/DevRadioWinAzureWin8Prt2.mp4"&gt;MP4&lt;/a&gt; (iPod, Zune HD) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/7db9/dca47a93-6a5f-4172-afb7-3a78a6fb7db9/DevRadioWinAzureWin8Prt2_high.mp4"&gt;High Quality MP4&lt;/a&gt; (iPad, PC) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/7db9/dca47a93-6a5f-4172-afb7-3a78a6fb7db9/DevRadioWinAzureWin8Prt2_mid.mp4"&gt;Mid Quality MP4&lt;/a&gt; (WP7, HTML5) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/7db9/dca47a93-6a5f-4172-afb7-3a78a6fb7db9/DevRadioWinAzureWin8Prt2_Source.wmv"&gt;High Quality WMV&lt;/a&gt; (PC, Xbox, MCE) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/t_ZH27a4avE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/t_ZH27a4avE/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/02/20/Microsoft-DevRadio-(Part-2)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=5d373875-9a00-41a3-89d5-9b4b2c69a322</guid>
      <pubDate>Wed, 20 Feb 2013 08:03:21 -0400</pubDate>
      <category>Azure</category>
      <category>Apps</category>
      <category>Microsoft</category>
      <category>USCloud</category>
      <category>Windows 8</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=5d373875-9a00-41a3-89d5-9b4b2c69a322</pingback:target>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=5d373875-9a00-41a3-89d5-9b4b2c69a322</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/02/20/Microsoft-DevRadio-(Part-2)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=5d373875-9a00-41a3-89d5-9b4b2c69a322</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=5d373875-9a00-41a3-89d5-9b4b2c69a322</feedburner:origLink></item>
    <item>
      <title>Skipping SSL Connections Locally</title>
      <description>&lt;p&gt;When developing locally, often times you don’t want to use SSL for a variety of reasons.&amp;#160; There’s no real point, since the request isn’t going over the wire.&amp;#160; Most of the time, connections are done via the loopback 127.0.0.1 address (although localhost can be used) which throws certificate errors.&amp;#160; &lt;/p&gt;  &lt;p&gt;This one problem is often easy to solve, but it relates to a bigger issue: dictating when (and when not) to use SSL on your site.&amp;#160; In the ol’ days, you wouldn’t want an entire site to be SSL for performance reasons.&amp;#160; Ideally, you want to gracefully redirect users to/from SSL based on the requirements of the page.&amp;#160; If a user navigates to a secure section like their account page, you’d like to use SSL.&amp;#160; If they navigate away to a page not needing SSL, you’d want to use http and not https.&amp;#160; &lt;/p&gt;  &lt;p&gt;There are a LOT of ways to do this, such as using MVC filters for MVC based applications.&amp;#160; One way I’ve solved this before was simply calling a method like so with each request:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupSslIfNeeded()
{           
    &lt;span class="rem"&gt;//bail out on local connections – never need ssl&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Request.IsLocal)
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt;;
    }

    &lt;span class="kwrd"&gt;bool&lt;/span&gt; requiresSsl = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    &lt;span class="kwrd"&gt;string&lt;/span&gt; curPath = Request.Path;

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (curPath.StartsWith(&lt;span class="str"&gt;&amp;quot;/account&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase) ||
        curPath.StartsWith(&lt;span class="str"&gt;&amp;quot;/user&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase) ||
        curPath.StartsWith(&lt;span class="str"&gt;&amp;quot;/admin&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase))
    {
        requiresSsl = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    }

    &lt;span class="rem"&gt;//redirect to secure page&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (requiresSsl &amp;amp;&amp;amp; !Page.Request.IsSecureConnection)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; currentUrl = HttpContext.Current.Request.Url.ToString();
        &lt;span class="kwrd"&gt;string&lt;/span&gt; newUrl = currentUrl.Replace(&lt;span class="str"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;https://&amp;quot;&lt;/span&gt;);
        Response.Redirect(newUrl);
    }

    &lt;span class="rem"&gt;//redirect to non-secure page&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!requiresSsl &amp;amp;&amp;amp; Page.Request.IsSecureConnection)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; currentUrl = HttpContext.Current.Request.Url.ToString();
        &lt;span class="kwrd"&gt;string&lt;/span&gt; newUrl = currentUrl.Replace(&lt;span class="str"&gt;&amp;quot;https://&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;);

        Response.Redirect(newUrl);
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;It’s a little more verbose than it needs to be, but it’s done to because there were a few port handling lines I left out for simplicity.&amp;#160; &lt;/p&gt;

&lt;p&gt;What this will do is avoid using SSL for local connections, and any page on the site except for those in the account, user, or admin folders.&amp;#160;&amp;#160; The main downside of this approach is that it requires a redirect, which is a round trip to the server.&amp;#160; Ideally, you’d want your links to always be smart enough to know if they should go http:// or https://, but realistically, context switching between SSL and non-SSL pages is pretty rare so the client needing to endure the few extra milliseconds is an acceptable situation.&amp;#160; This is the way we currently handle SSL on &lt;a href="http://www.rockpaperazure.com"&gt;http://www.rockpaperazure.com&lt;/a&gt;.&amp;#160; &lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/-FLZPBBBV0U" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/-FLZPBBBV0U/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/02/19/Skipping-SSL-Connections-Locally.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=6bb6ca86-6336-4468-af50-996f993319ba</guid>
      <pubDate>Tue, 19 Feb 2013 15:16:31 -0400</pubDate>
      <category>USCloud</category>
      <category>Technology</category>
      <category>ASP.NET</category>
      <category>Azure</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=6bb6ca86-6336-4468-af50-996f993319ba</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=6bb6ca86-6336-4468-af50-996f993319ba</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/02/19/Skipping-SSL-Connections-Locally.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=6bb6ca86-6336-4468-af50-996f993319ba</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=6bb6ca86-6336-4468-af50-996f993319ba</feedburner:origLink></item>
    <item>
      <title>WinRT RoamingSettings and Serialization</title>
      <description>&lt;p&gt;Recently, a colleague of mine, Adam Hoffman, &lt;a href="http://blogs.msdn.com/b/uscloud/archive/2013/02/13/serializing-unsupported-data-types-to-applicationdata-current-roamingsettings.aspx"&gt;posted a great tip on serializing a generic List&amp;lt;t&amp;gt;&lt;/a&gt; to a Windows 8 App&amp;rsquo;s RoamingSettings.&amp;nbsp;&amp;nbsp; As Adam points out, taking advantage of roaming storage is so easy to do, it&amp;rsquo;s criminal not to take advantage of it.&amp;nbsp; There are three basic types of data:&amp;nbsp; local, roaming, and temporary.&amp;nbsp; The APIs are all used similarly, and more info on them can be found &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are a few things to keep in mind when using roaming data.&amp;nbsp; One is:&amp;nbsp; the data might change after the app is running &amp;ndash; perhaps the data hadn&amp;rsquo;t been synchronized from another machine yet, or the app is concurrently being used elsewhere.&amp;nbsp; You can plug into the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.datachanged.aspx"&gt;DataChanged&lt;/a&gt; event handler to be notified when the roaming data for your app changes &amp;ndash; and if it does change, decide what you want to do.&amp;nbsp; You might choose to refresh the settings, or allow the user to decide if they&amp;rsquo;d like to use these new settings.&lt;/p&gt;
&lt;p&gt;The biggest thing to be keep in mind, however, is the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.roamingstoragequota.aspx"&gt;RoamingStorageQuota&lt;/a&gt;.&amp;nbsp; By design, roaming storage was intended to be for preferences or small amounts of data.&amp;nbsp; At present, the quota is set to a paltry 100KB &amp;ndash; although that seems unnecessarily small, if you have hundreds of apps taking advantage of this feature, I can see where bandwidth conversation might come into play.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Accessing the RoamingStorageQuota returns a ulong of the current quota in KB:&lt;/p&gt;
&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; quota = ApplicationData.Current.RoamingStorageQuota;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;Perhaps at some point the 100KB number will be increased.&amp;nbsp; If your app exceeds that number, the data will be persisted locally, however will not roam.&amp;nbsp; This can be a difficult bug to track down, particularly if you&amp;rsquo;re roaming important data.&amp;nbsp; Also, when running on a developer machine, the RoamingStorageQuota returns 0 &amp;ndash; presumably, because the data can&amp;rsquo;t roam as it&amp;rsquo;s not a store-based app (yet).&amp;nbsp; I&amp;rsquo;ve asked some people internally to confirm this, but in short, means you&amp;rsquo;ll have to anticipate the value coming back &amp;ndash; I&amp;rsquo;m assuming that return value is 100.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Building off of Adam&amp;rsquo;s example, we could do something like:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; SerializeToString(&lt;span class="kwrd"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(obj.GetType());&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (StringWriter writer = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter())&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        serializer.Serialize(writer, obj);&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; writer.ToString();&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Save()&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    ApplicationDataContainer settingsRoaming =&lt;/pre&gt;
&lt;pre&gt;        ApplicationData.Current.RoamingSettings;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.LastModified = DateTime.Now;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; serializedData = SerializeToString(&lt;span class="kwrd"&gt;this&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; ((&lt;span class="kwrd"&gt;ulong&lt;/span&gt;)UnicodeEncoding.Unicode.GetByteCount(serializedData) &amp;lt;=&lt;/pre&gt;
&lt;pre class="alt"&gt;        ApplicationData.Current.RoamingStorageQuota*1024)&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        settingsRoaming.Values[&lt;span class="str"&gt;"appSettings"&lt;/span&gt;] = serializedData;&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;//handle the situation&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I realized after writing this (and using this logic myself) that it wouldn&amp;rsquo;t be a good idea:&amp;nbsp; a single setting can be at most 8KB, while a composite value can be up to 64KB in size.&amp;nbsp;&amp;nbsp; A composite setting represents an atomic unit, and can store much more information obviously.&amp;nbsp; They can be used as follows:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Composite setting&lt;/span&gt;

Windows.Storage.ApplicationDataCompositeValue composite = 
   &lt;span class="kwrd"&gt;new&lt;/span&gt; Windows.Storage.ApplicationDataCompositeValue();
composite[&lt;span class="str"&gt;"intVal"&lt;/span&gt;] = 1;
composite[&lt;span class="str"&gt;"strVal"&lt;/span&gt;] = &lt;span class="str"&gt;"string"&lt;/span&gt;;

roamingSettings.Values[&lt;span class="str"&gt;"exampleCompositeSetting"&lt;/span&gt;] = composite;&lt;/pre&gt;
&lt;p&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, I&amp;rsquo;m making an assumption that the data is stored in Unicode, 2 bytes per character.&amp;nbsp; I could be wrong.&amp;nbsp; Also, I&amp;rsquo;m uncertain of the actual size of each element in the settings &amp;ndash; a DateTime is typically 8 bytes but I&amp;rsquo;m uncertain if it gets serialized and consumes only 8 bytes of roaming storage.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In addition to all this, roaming data also can &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.roamingfolder.aspx"&gt;contain folders and files&lt;/a&gt;.&amp;nbsp; While obviously limited in size, this may be preferred depending on the type of data your app is using.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The bottom line is:&amp;nbsp; be cautious if trying to roam user-generated data instead of predictable application settings, and consider serializing them as a JSON object graph to a file, to conserve space (XML-based serialization is verbose).&amp;nbsp; For other thoughts on this, see another one of my colleague&amp;rsquo;s posts on the subject:&amp;nbsp; &lt;a href="http://chriskoenig.net/2012/09/07/windows-8-games-and-roaming-data/"&gt;Windows 8 Games and Roaming Data&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/A_nEAHFEyLA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/A_nEAHFEyLA/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/02/18/WinRT-RoamingSettings-and-Serialization.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=dd5ad80e-a018-4f5e-9617-2caca97c8523</guid>
      <pubDate>Mon, 18 Feb 2013 15:36:00 -0400</pubDate>
      <category>Microsoft</category>
      <category>Windows 8</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=dd5ad80e-a018-4f5e-9617-2caca97c8523</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=dd5ad80e-a018-4f5e-9617-2caca97c8523</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/02/18/WinRT-RoamingSettings-and-Serialization.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=dd5ad80e-a018-4f5e-9617-2caca97c8523</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=dd5ad80e-a018-4f5e-9617-2caca97c8523</feedburner:origLink></item>
    <item>
      <title>Microsoft DevRadio: (Part 1) Using Windows Azure to Build Back-End Services for Windows 8 Apps</title>
      <description>&lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;    &lt;br /&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati&lt;/a&gt; and &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney&lt;/a&gt; welcome fellow Developer Evangelist, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie&lt;/a&gt; to the show as they kick off their series on how to &lt;a href="http://devhammer.net/blog/building-data-and-services-for-windows-8-apps"&gt;build back-end services for their Windows 8 apps&lt;/a&gt; using Windows Azure. Tune in for part 1 as Andrew gives an overview of the series and introduces some potential techniques you could incorporate as you build your back-end services.     &lt;br /&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;a href="http://bit.ly/MXrDmh"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://bit.ly/Q6xyrW"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;     &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;a href="http://bit.ly/Ng0ysb"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002_1.gif" width="15" height="15" /&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;Subscribe to our podcast via &lt;a href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;iTunes&lt;/a&gt; or &lt;a href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;RSS&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/jj618399"&gt;Windows Azure Hands-on Labs Online&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Blogs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;Brian Hitney’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;Peter Laudati’s blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117399"&gt;Andrew Duthie’s Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Videos:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure"&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites"&gt;Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Virtual Labs:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;MSDN Virtual Labs: Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/1787/da982444-9381-43d2-84af-9a9882211787/DevRadioAzureServicesWin8AppsPrt1.mp3"&gt;MP3&lt;/a&gt; (Audio only) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/1787/da982444-9381-43d2-84af-9a9882211787/DevRadioAzureServicesWin8AppsPrt1.mp4"&gt;MP4&lt;/a&gt; (iPod, Zune HD) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/1787/da982444-9381-43d2-84af-9a9882211787/DevRadioAzureServicesWin8AppsPrt1_high.mp4"&gt;High Quality MP4&lt;/a&gt; (iPad, PC) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/1787/da982444-9381-43d2-84af-9a9882211787/DevRadioAzureServicesWin8AppsPrt1_mid.mp4"&gt;Mid Quality MP4&lt;/a&gt; (WP7, HTML5) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://media.ch9.ms/ch9/1787/da982444-9381-43d2-84af-9a9882211787/DevRadioAzureServicesWin8AppsPrt1_Source.wmv"&gt;High Quality WMV&lt;/a&gt; (PC, Xbox, MCE) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/LE6FuIH1ABQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/LE6FuIH1ABQ/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/02/07/Microsoft-DevRadio-(Part-1)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=5a681fc4-1fee-42a2-80dd-048f2dc818ff</guid>
      <pubDate>Thu, 07 Feb 2013 11:12:49 -0400</pubDate>
      <category>Azure</category>
      <category>Windows 8</category>
      <category>USCloud</category>
      <category>Development</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=5a681fc4-1fee-42a2-80dd-048f2dc818ff</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=5a681fc4-1fee-42a2-80dd-048f2dc818ff</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/02/07/Microsoft-DevRadio-(Part-1)-Using-Windows-Azure-to-Build-Back-End-Services-for-Windows-8-Apps.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=5a681fc4-1fee-42a2-80dd-048f2dc818ff</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=5a681fc4-1fee-42a2-80dd-048f2dc818ff</feedburner:origLink></item>
    <item>
      <title>Win8 Apps: Check for Network Connectivity</title>
      <description>&lt;p&gt;A lot of apps require internet connectivity to function – like my app, &lt;a href="http://apps.microsoft.com/windows/app/dark-skies/4176bcef-efc1-49db-b515-7c8b428d8af7"&gt;Dark Skies&lt;/a&gt;.&amp;#160;&amp;#160; One thing I overlooked when first releasing Dark Skies was a graceful check for network connectivity.&amp;#160; If the app launches and there is no connectivity, it should fail gracefully and notify the user.&amp;#160; Ideally, we should also plug into the Network Status Changed event handler, so our app is notified when the internet goes up or down during the app’s session.&lt;/p&gt;  &lt;p&gt;There are a couple of ways to accomplish this.&amp;#160; If you’re checking for internet connectivity occasionally, you can do something like this:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsNetworkAvailable()
{
    &lt;span class="kwrd"&gt;try&lt;/span&gt;
    {
        ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
                
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (profile == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;                 
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;
        {                                     
            var networkAdapterInfo = profile.NetworkAdapter;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (networkAdapterInfo == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;                       
            }
        }
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception e)
    {
&lt;span class="preproc"&gt;#if&lt;/span&gt; DEBUG
        &lt;span class="kwrd"&gt;throw&lt;/span&gt;;
&lt;span class="preproc"&gt;#endif&lt;/span&gt;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;If you’re checking for connectivity frequently, you’ll likely want to cache that result in a variable, and simply change the cached status when the network status changes.&amp;#160; Wiring up the event is pretty simple:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged;&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;And then the event handler can do whatever you’d like:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; async &lt;span class="kwrd"&gt;void&lt;/span&gt; NetworkInformation_NetworkStatusChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender)
{
   &lt;span class="rem"&gt;// ...&lt;/span&gt;
}&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;When the app loads, we’ll display a notification of some kind that internet connectivity is required:&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin: 0px auto; border-left: 0px; display: block; padding-right: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_190.png" width="581" height="436" /&gt;&lt;/p&gt;

&lt;p&gt;Because the nature of tablets and internet connectivity, the state of the connection may change frequently.&amp;#160; Having a simple way to check for network connectivity and handling changes to the network status is a great way to ensure a smooth user experience!&lt;/p&gt;

&lt;p&gt;Oh – it’s also a good idea to check before doing anything that might throw a network-based exception.&amp;#160; For example, on app load, I made the mistake of always acquiring a push notification channel:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;If the network is unavailable, this will throw an exception.&amp;#160; So, be sure to check for network connectivity and/or handle exceptions when setting up push notifications:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; async &lt;span class="kwrd"&gt;void&lt;/span&gt; AcquirePushChannel()
{          
    &lt;span class="kwrd"&gt;try&lt;/span&gt;
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNetworkAvailable())
        {
            CurrentChannel =
                await PushNotificationChannelManager.
                          CreatePushNotificationChannelForApplicationAsync();
        }
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
    {
&lt;span class="preproc"&gt;#if&lt;/span&gt; DEBUG
        &lt;span class="kwrd"&gt;throw&lt;/span&gt;;
&lt;span class="preproc"&gt;#endif&lt;/span&gt;
    }
}&lt;/pre&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/sHOZF_LOlnI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/sHOZF_LOlnI/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/02/05/Win8-Apps-Check-for-Network-Connectivity.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=f25c45b6-0546-4361-990a-22b9379fa805</guid>
      <pubDate>Tue, 05 Feb 2013 08:24:00 -0400</pubDate>
      <category>Windows 8</category>
      <category>Technology</category>
      <category>Microsoft</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=f25c45b6-0546-4361-990a-22b9379fa805</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=f25c45b6-0546-4361-990a-22b9379fa805</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/02/05/Win8-Apps-Check-for-Network-Connectivity.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=f25c45b6-0546-4361-990a-22b9379fa805</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=f25c45b6-0546-4361-990a-22b9379fa805</feedburner:origLink></item>
    <item>
      <title>Short Post:  #AmusingCode</title>
      <description>&lt;p&gt;This put a smile on my face today:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; App_UnhandledException(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, 
          UnhandledExceptionEventArgs e)
{
    &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotImplementedException();
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/2oXi_l67LIU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/2oXi_l67LIU/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/02/04/Short-Post-AmusingCode.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=7829aa7a-886d-4615-ae7b-5ac44bd62003</guid>
      <pubDate>Mon, 04 Feb 2013 08:19:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=7829aa7a-886d-4615-ae7b-5ac44bd62003</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=7829aa7a-886d-4615-ae7b-5ac44bd62003</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/02/04/Short-Post-AmusingCode.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=7829aa7a-886d-4615-ae7b-5ac44bd62003</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=7829aa7a-886d-4615-ae7b-5ac44bd62003</feedburner:origLink></item>
    <item>
      <title>Side Loading Windows 8 Apps</title>
      <description>&lt;p&gt;At the Columbia Windows 8 DevCamp this weekend, the topic of side-loading apps came up in a few different scenarios, but it was particularly appropriate during the app showcase.&amp;#160; We had a number of developers working in the lab room, all competing to come up with the coolest app at the end of the day.&amp;#160; During the showcase where developers pitch their apps to the audience, it works best to have all the apps on the same machine.&amp;#160; Here’s the best way to do it without having to copy source code/solution files:&lt;/p&gt;  &lt;p&gt;From within Visual Studio, select Project &amp;gt; Store &amp;gt; Create App Packages:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_182.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_76.png" width="640" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In one situation, where there happened to be multiple projects in the solution, these options were disabled.&amp;#160; Why I’m not exactly sure, but you can also create the app packages by right clicking on the project in solution explorer, and selecting Create App Packages in a similar way:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_183.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_77.png" width="640" height="718" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the dialog windows that pops up, select No to build packages to upload to the store, as we’re not doing that:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_184.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_78.png" width="640" height="519" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the next screen, configure any path/build options (defaults are usually ok) and click Create:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_185.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_79.png" width="640" height="517" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the packages are created, you’ll see the following folders:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_186.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_80.png" width="644" height="117" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We can ignore the .appxupload files for now.&amp;#160; For loading on another machine, we’ll need to copy either the x86 or ARM (or both) to the target machine (for the devcamps, we just pass around a USB key and have everyone copy the files there).&amp;#160; &lt;/p&gt;  &lt;p&gt;On the machine you’d like to install the apps, run the PowerShell script (right click file, select Run with PowerShell).&amp;#160; Of course, if you’re on a Surface or other ARM device, you’d need to run the PowerShell script from the ARM folder, otherwise use the x86:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_187.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin: 0px auto; display: block; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_81.png" width="605" height="432" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once running, you may be prompted to install a certificate and need to accept a UAC prompt.&amp;#160; You’ll then see the app install:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_188.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_82.png" width="640" height="86" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Viola!&amp;#160;&amp;#160; The app should be installed on the Windows 8 Start Screen.&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/nOhR55xdfb0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/nOhR55xdfb0/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/24/Side-Loading-Windows-8-Apps.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=cf664faf-98db-4674-b832-59812b5895a2</guid>
      <pubDate>Thu, 24 Jan 2013 08:34:00 -0400</pubDate>
      <category>Apps</category>
      <category>Development</category>
      <category>Windows Phone 7</category>
      <category>Windows 8</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=cf664faf-98db-4674-b832-59812b5895a2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=cf664faf-98db-4674-b832-59812b5895a2</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/24/Side-Loading-Windows-8-Apps.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=cf664faf-98db-4674-b832-59812b5895a2</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=cf664faf-98db-4674-b832-59812b5895a2</feedburner:origLink></item>
    <item>
      <title>Dark Skies for Windows 8 Updated</title>
      <description>&lt;p&gt;I’m happy to finally have the next update to &lt;a href="http://apps.microsoft.com/windows/app/dark-skies/4176bcef-efc1-49db-b515-7c8b428d8af7"&gt;Dark Skies in the Windows 8 store&lt;/a&gt;!&amp;#160; In the initial release, I used Bing Maps to display light pollution data.&amp;#160; In this version, I allow users to display and share favorite viewing spots, and spruced up the live tile with some cool info.&lt;/p&gt;  &lt;p&gt;The main page can display information about a pin on the map:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.structuretoobig.com/image.axd?picture=image_179.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_thumb_75.png" width="623" height="368" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Admittedly, there aren’t too many pins just yet, but it will grow over time.&amp;#160;&amp;#160; It’s not just favorite viewing locations – astronomy shops, user groups and clubs, and events can all be added.&amp;#160; Also, the live tile now displays some useful moon info:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_180.png" width="309" height="152" /&gt;&lt;/p&gt;  &lt;p&gt;The tile displays the current phase of the moon, as well as the rise and set times (if location services is enabled).&amp;#160; The little + (or –) signs indicates the set or rise occurs on the next or previous day, so for me, the moon rises at 1:14 p.m. and sets tomorrow at 3:45 a.m.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Technical Info&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is a developer blog, after all.&amp;#160;&amp;#160; Everything in this release relies on &lt;a href="http://www.windowsazure.com/en-us/"&gt;Windows Azure Mobile Services&lt;/a&gt; (WAMS).&amp;#160;&amp;#160; The service for the live tiles is hosted in Windows Azure Web Sites, and Windows Azure Mobile Services does the authentication and single-sign on, and also serves notifications when new sites are added.&amp;#160; For example, if there’s a new site added near any of the user’s home locations, a new tile with a Bing map is sent down as a notification, while the badge displays the total number of new nearby points since last run:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_181.png" width="312" height="151" /&gt;&lt;/p&gt;  &lt;p&gt;It’s been a lot of fun to develop, and really, it would’ve been too much work without having WAMS to power everything.&amp;#160;&amp;#160; The bulk of the work was getting things to look just right, rather than fiddling with authentication code and developing a back end system.&amp;#160;&amp;#160; I’ve also been using &lt;a href="http://tfs.visualstudio.com/"&gt;TFS in the cloud&lt;/a&gt; to store source code, and do continuous integration with the Windows Azure Web Site (an ASP.NET MVC 4 controller that serves XML as tiles.)&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/9tMvwFuhGGc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/9tMvwFuhGGc/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/21/Dark-Skies-for-Windows-8-Updated.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=0a0d514a-7a30-4b69-810c-2f4a2020a62c</guid>
      <pubDate>Mon, 21 Jan 2013 21:33:08 -0400</pubDate>
      <category>Windows 8</category>
      <category>Apps</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=0a0d514a-7a30-4b69-810c-2f4a2020a62c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=0a0d514a-7a30-4b69-810c-2f4a2020a62c</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/21/Dark-Skies-for-Windows-8-Updated.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=0a0d514a-7a30-4b69-810c-2f4a2020a62c</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=0a0d514a-7a30-4b69-810c-2f4a2020a62c</feedburner:origLink></item>
    <item>
      <title>Microsoft DevRadio: How to Integrate TFS Projects with Windows Azure Web Sites</title>
      <description>&lt;p&gt;Never too late to post!&amp;#160; Here’s an episode of DevRadio &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942" target="_blank"&gt;Peter&lt;/a&gt; and I did on TFS Projects in Azure!&lt;/p&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;Abstract: &lt;/font&gt;&lt;/b&gt;    &lt;br /&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Peter Laudati&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; and &lt;/font&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Brian Hitney&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; are back for today’s show as they show us how we can integrate TFS (Team Foundation Server) projects with Windows Azure Web Sites. They also discuss Windows Azure’s latest price reduction for Storage as well as tee up new features in Windows Azure Mobile Services.      &lt;br /&gt;      &lt;br /&gt;&lt;b&gt;After watching this video, follow these next steps: &lt;/b&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;font color="#000000"&gt;&lt;b&gt;Step #1 –&lt;/b&gt; &lt;/font&gt;&lt;a href="http://bit.ly/MXrDmh" target="_blank"&gt;Try Windows Azure: No cost. No obligation. 90-Day FREE trial.&lt;/a&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;b&gt;Step #2 –&lt;/b&gt; &lt;a href="http://bit.ly/Q6xyrW"&gt;Download the Tools for Windows 8 App Development&lt;/a&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;b&gt;Step #3 –&lt;/b&gt; &lt;/font&gt;&lt;a href="http://bit.ly/Ng0ysb"&gt;Start building your own Apps for Windows 8&lt;/a&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp3"&gt;&lt;b&gt;&lt;span style="color: ; text-decoration: ; text-underline: none"&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://www.structuretoobig.com/image.axd?picture=clip_image002.gif" width="15" height="15" /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;font color="#000000"&gt;Subscribe to our podcast via &lt;/font&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://itunes.apple.com/us/podcast/devradio-mp4-channel-9/id544163838"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;iTunes&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; or &lt;/font&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://channel9.msdn.com/Blogs/DevRadio/feed/mp4"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;RSS&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;If you're interested in learning more about the products or solutions discussed in this episode, click on any of the below links for free, in-depth information:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;Register for our Windows Azure Hands-on Lab Online (HOLO) events today!&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul style="margin-bottom: 0in; margin-top: 0in; line-height: normal" type="disc"&gt;   &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l2 level1 lfo1; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://msdn.microsoft.com/en-us/jj618399"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Windows Azure Hands-on Labs Online&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;Blogs:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul style="margin-bottom: 0in; margin-top: 0in; line-height: normal" type="disc"&gt;   &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117402"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Brian Hitney’s blog&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200117942"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Peter Laudati’s blog&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;Videos:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul style="margin-bottom: 0in; margin-top: 0in; line-height: normal" type="disc"&gt;   &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-How-to-Get-Started-with-Windows-Azure" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Microsoft DevRadio: How to Get Started with Windows Azure&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-What-is-Windows-Azure-Web-Sites" target="_blank"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Microsoft DevRadio: (Part 1) What is Windows Azure Web Sites?&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l0 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://channel9.msdn.com/Blogs/DevRadio/Microsoft-DevRadio-Part-1-Practical-Azure-with-Jim-ONeil--Azure-Basics"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Microsoft DevRadio: (Part 2) Windows Azure Web Sites Explained&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;Virtual Labs:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul style="margin-bottom: 0in; margin-top: 0in; line-height: normal" type="disc"&gt;   &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l4 level1 lfo4; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://msdn.microsoft.com/en-us/dd540819.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;MSDN Virtual Labs: Windows Azure&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;b&gt;&lt;font color="#000000"&gt;Download&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul style="margin-bottom: 0in; margin-top: 0in; line-height: normal" type="disc"&gt;   &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l3 level1 lfo5; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://media.ch9.ms/ch9/0ef2/2f68c240-6019-478e-b621-5c6458e70ef2/DevRadioAzureTFS.mp3"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;MP3&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; (Audio only)&lt;/font&gt;&lt;/span&gt; &lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l3 level1 lfo5; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://media.ch9.ms/ch9/0ef2/2f68c240-6019-478e-b621-5c6458e70ef2/DevRadioAzureTFS.mp4"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;MP4&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; (iPod, Zune HD)&lt;/font&gt;&lt;/span&gt; &lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l3 level1 lfo5; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://media.ch9.ms/ch9/0ef2/2f68c240-6019-478e-b621-5c6458e70ef2/DevRadioAzureTFS_high.mp4"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;High Quality MP4&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; (iPad, PC)&lt;/font&gt;&lt;/span&gt; &lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l3 level1 lfo5; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://media.ch9.ms/ch9/0ef2/2f68c240-6019-478e-b621-5c6458e70ef2/DevRadioAzureTFS_mid.mp4"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;Mid Quality MP4&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; (WP7, HTML5)&lt;/font&gt;&lt;/span&gt; &lt;/li&gt;    &lt;li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l3 level1 lfo5; tab-stops: list .5in"&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://media.ch9.ms/ch9/0ef2/2f68c240-6019-478e-b621-5c6458e70ef2/DevRadioAzureTFS_Source.wmv"&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;High Quality WMV&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; (PC, Xbox, MCE)&lt;/font&gt;&lt;/span&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/xg0_yIeZq2w" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/xg0_yIeZq2w/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/21/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=bb15d107-cb73-48ba-9842-2c33b54e830c</guid>
      <pubDate>Mon, 21 Jan 2013 10:35:49 -0400</pubDate>
      <category>Azure</category>
      <category>Microsoft</category>
      <category>Development</category>
      <category>USCloud</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=bb15d107-cb73-48ba-9842-2c33b54e830c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=bb15d107-cb73-48ba-9842-2c33b54e830c</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/21/Microsoft-DevRadio-How-to-Integrate-TFS-Projects-with-Windows-Azure-Web-Sites.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=bb15d107-cb73-48ba-9842-2c33b54e830c</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=bb15d107-cb73-48ba-9842-2c33b54e830c</feedburner:origLink></item>
    <item>
      <title>Dealing with Expired Channels in Windows Azure Mobile Services</title>
      <description>&lt;p&gt;What’s this?&amp;#160; Another Windows Azure Mobile Services (WAMS) post?!&amp;#160; &lt;/p&gt;  &lt;p&gt;In the next version of my app, I keep a record of the user’s Channel in order to send down notifications.&amp;#160; The built in todo list example does this or something very similar.&amp;#160; My table in WAMS looks like:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_178.png" width="658" height="151" /&gt;&lt;/p&gt;  &lt;p&gt;Not shown are a couple of fields, but of particular interest is the device Id.&amp;#160; I realized that one user might have multiple devices, so the channel then is tied to the device Id.&amp;#160; I still haven’t found a perfect way to do this yet – right now, I’m using a random GUID on first run.&amp;#160; &lt;/p&gt;  &lt;p&gt;In my WAMS script, if the point that is submitted is “within range” of another user, we’ll send a notification down to update the tile.&amp;#160; I go into this part in my blog post:&amp;#160; &lt;a href="http://www.structuretoobig.com/post/2013/01/07/Best-Practice-for-Sending-Windows-8-Tiles-from-Mobile-Services.aspx" target="_blank"&gt;Best Practices on Sending Live Tiles&lt;/a&gt;.&amp;#160;&amp;#160;&amp;#160; But what do you do if the channel is expired?&amp;#160; This comes up a lot in testing, because the app is removed/reinstalled many times.&amp;#160; &lt;/p&gt;  &lt;p&gt;I stumbled on this page, &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/hh465435.aspx" target="_blank"&gt;Push Notification Service Request and Response Headers&lt;/a&gt;,&amp;#160; on MSDN.&amp;#160;&amp;#160; There is a lot of great info on that page.&amp;#160;&amp;#160; While I should have more robust solution for handling all these conditions, the one in particular I’m interested in is the Channel Expired response, highlighted below:&lt;/p&gt;  &lt;table class="clsStd" style="word-wrap: break-word; margin-bottom: 14px; cursor: default; border-collapse: collapse; padding-bottom: 20px; padding-top: 20px; line-height: normal" width="100%"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th style="border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px; background-color: #ededed" align="left"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#707070"&gt;HTTP response code&lt;/font&gt;&lt;/font&gt;&lt;/th&gt;        &lt;th style="border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px; background-color: #ededed" align="left"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#707070"&gt;Description&lt;/font&gt;&lt;/font&gt;&lt;/th&gt;        &lt;th style="border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px; background-color: #ededed" align="left"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#707070"&gt;Recommended action&lt;/font&gt;&lt;/font&gt;&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;200 OK&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The notification was accepted by WNS.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;None required.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;400 Bad Request&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;One or more headers were specified incorrectly or conflict with another header.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Log the details of your request. Inspect your request and compare against this documentation.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;401 Unauthorized&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The cloud service did not present a valid authentication ticket. The OAuth ticket may be invalid.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Request a valid access token by authenticating your cloud service using the access token request.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;403 Forbidden&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The cloud service is not authorized to send a notification to this URI even though they are authenticated.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The access token provided in the request does not match the credentials of the app that requested the channel URI. Ensure that your package name in your app's manifest matches the cloud service credentials given to your app in the Dashboard.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;404 Not Found&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The channel URI is not valid or is not recognized by WNS.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Log the details of your request. Do not send further notifications to this channel; notifications to this address will fail.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;405 Method Not Allowed&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Invalid method (GET, DELETE, CREATE); only POST is allowed.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Log the details of your request. Switch to using HTTP POST.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;406 Not Acceptable&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The cloud service exceeded its throttle limit.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Log the details of your request. Reduce the rate at which you are sending notifications.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt; background-color: #ffff00" color="#2a2a2a"&gt;410 Gone&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt; background-color: #ffff00" color="#2a2a2a"&gt;The channel expired.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;font color="#2a2a2a" face="Segoe UI"&gt;&lt;font style="font-size: 12pt"&gt;Log the details of your request. Do not send further notifications to this channel. Have your app &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 12pt"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://msdn.microsoft.com/en-us/library/windowsazure/hh465412.aspx"&gt;&lt;font color="#00709f" face="Segoe UI"&gt;request a new channel URI&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;413 Request Entity Too Large&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The notification payload exceeds the 5000 byte size limit.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;Log the details of your request. Inspect the payload to ensure it is within the size limitations.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;500 Internal Server Error&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;An internal failure caused notification delivery to fail.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font color="#2a2a2a" face="Segoe UI"&gt;&lt;font style="font-size: 12pt"&gt;Log the details of your request. Report this issue through the &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 12pt"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://go.microsoft.com/fwlink/p/?linkid=241434"&gt;&lt;font color="#00709f" face="Segoe UI"&gt;developer forums&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;503 Service Unavailable&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;The server is currently unavailable.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td style="vertical-align: top; border-bottom: #dbdbdb 1px solid; padding-bottom: 10px; padding-top: 10px; padding-left: 8px; padding-right: 8px"&gt;&lt;font color="#2a2a2a" face="Segoe UI"&gt;&lt;font style="font-size: 12pt"&gt;Log the details of your request. Report this issue through the &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 12pt"&gt;&lt;a style="background-image: none; white-space: normal; background-repeat: repeat; background-position: 0% 0%; padding-right: 0px" href="http://go.microsoft.com/fwlink/p/?linkid=241434"&gt;&lt;font color="#00709f" face="Segoe UI"&gt;developer forums&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;font face="Segoe UI"&gt;&lt;font style="font-size: 12pt" color="#2a2a2a"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Obviously getting a new channel URI is ideal, but the app has to do that on the client (and will) next time the user runs the app.&amp;#160; In the mean time, I want to delete this channel because it’s useless.&amp;#160;&amp;#160; In my script which sends the notifications, we’ll examine the result on the callback and either delete the channel if expired, or, if success, send a badge update because that’s needed, too.&amp;#160; (Future todo task: try to combine Live Tile and badges in one update.)&lt;/p&gt;  &lt;pre class="csharpcode"&gt;push.wns.send(channelUri, payload, &lt;span class="str"&gt;'wns/tile'&lt;/span&gt;, 
 {
        client_id: &lt;span class="str"&gt;'ms-app://&amp;lt;my app id&amp;gt;'&lt;/span&gt;,
        client_secret: &lt;span class="str"&gt;'my client secret'&lt;/span&gt;,
        headers: { &lt;span class="str"&gt;'X-WNS-Tag'&lt;/span&gt; : &lt;span class="str"&gt;'SomeTag'&lt;/span&gt; }   
 }, 
      &lt;span class="kwrd"&gt;function&lt;/span&gt; (error, result) {
      &lt;span class="kwrd"&gt;if&lt;/span&gt; (error)
      {
          &lt;span class="rem"&gt;//if the channel has expired, delete from channel table&lt;/span&gt;
          &lt;span class="kwrd"&gt;if&lt;/span&gt; (error.statusCode == 410){
              removeExpiredChannel(channelUri)               
          }
      }
      &lt;span class="kwrd"&gt;else&lt;/span&gt;
      {
            &lt;span class="rem"&gt;//notification sent&lt;/span&gt;
            updateBadge(channelUri);
      }
    }
);&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Removing expired channels can be done with something like:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; removeExpiredChannel(channelUri) 
{                  
       &lt;span class="kwrd"&gt;var&lt;/span&gt; sql = &lt;span class="str"&gt;&amp;quot;delete from myapp.Channel where ChannelUri = ?&amp;quot;&lt;/span&gt;;
       &lt;span class="kwrd"&gt;var&lt;/span&gt; &lt;span class="kwrd"&gt;params&lt;/span&gt; = [channelUri];       
       mssql.query(sql, &lt;span class="kwrd"&gt;params&lt;/span&gt;,
       {
            success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(results) {
                console.log(&lt;span class="str"&gt;'Removed Expired Channel: '&lt;/span&gt; + channelUri)
        }
    });
} &lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;On my todo list is to add more robust support for different response codes – for example, in addition to a 410 response, a 404 would also want to delete the channel record in the table.&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/2--sZQ3iAZM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/2--sZQ3iAZM/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/18/Dealing-with-Expired-Channels-in-Windows-Azure-Mobile-Services.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=b42f9b03-1aac-448e-9965-f629c41a82c4</guid>
      <pubDate>Fri, 18 Jan 2013 08:35:00 -0400</pubDate>
      <category>Azure</category>
      <category>Windows 8</category>
      <category>USCloud</category>
      <category>javascript</category>
      <category>node</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=b42f9b03-1aac-448e-9965-f629c41a82c4</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=b42f9b03-1aac-448e-9965-f629c41a82c4</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/18/Dealing-with-Expired-Channels-in-Windows-Azure-Mobile-Services.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=b42f9b03-1aac-448e-9965-f629c41a82c4</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=b42f9b03-1aac-448e-9965-f629c41a82c4</feedburner:origLink></item>
    <item>
      <title>Upcoming Events</title>
      <description>&lt;p&gt;Lots of great events coming up in the Carolinas:&lt;/p&gt;  &lt;p&gt;1/18/2013&amp;#160; Charlotte, NC:&amp;#160; We’re hosting a Windows 8 “Office Hours” at the Microsoft Office.&amp;#160; More info &lt;a href="http://www.developersguild.org/" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; Essentially, if you’re looking for time to hack on a Windows 8 solution, work on ideas, test some stuff out, enlist some testers – we’re there for you.&amp;#160; &lt;/p&gt;  &lt;p&gt;1/19/2013&amp;#160; Columbia, SC:&amp;#160; &lt;a href="http://columbiacodecamp.com/" target="_blank"&gt;Windows 8 DevCamp&lt;/a&gt;.&amp;#160;&amp;#160; This event is really shaping up to be great!&amp;#160;&amp;#160; Interesting sessions, and hands-on time in the labs.&amp;#160;&amp;#160; If you’re in the area and want to get up to speed on Windows 8, or finally get around to starting or finishing that idea, be sure to come out.&lt;/p&gt;  &lt;p&gt;1/22/2013 Charlotte, NC:&amp;#160; The &lt;a href="http://www.developersguild.org/" target="_blank"&gt;developers guild&lt;/a&gt; is hosting &lt;a href="http://www.skimedic.com/blog" target="_blank"&gt;Phil Japikse&lt;/a&gt;, in town for the Columbia Win8 DevCamp.&amp;#160; Phil will talking about ASP.NET MVC4 – from mobile features, the Web API, templates, and more.&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/tGGstG2Izx4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/tGGstG2Izx4/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/17/Upcoming-Events.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=c4ebe59c-eba9-4d9f-ac60-f1874b89c5d2</guid>
      <pubDate>Thu, 17 Jan 2013 17:34:28 -0400</pubDate>
      <category>Events</category>
      <category>Development</category>
      <category>Microsoft</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=c4ebe59c-eba9-4d9f-ac60-f1874b89c5d2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=c4ebe59c-eba9-4d9f-ac60-f1874b89c5d2</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/17/Upcoming-Events.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=c4ebe59c-eba9-4d9f-ac60-f1874b89c5d2</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=c4ebe59c-eba9-4d9f-ac60-f1874b89c5d2</feedburner:origLink></item>
    <item>
      <title>Scrubbing UserId in Windows Azure Mobile Services</title>
      <description>&lt;p&gt;First, many thanks to &lt;a href="http://chrisrisner.com/" target="_blank"&gt;Chris Risner&lt;/a&gt; for the assistance on this solution!&amp;#160;&amp;#160; Chris is part of the corp DPE team and has does an extensive amount of work with Windows Azure Mobile Services (WAMS) – including &lt;a href="http://channel9.msdn.com/Events/Build/2012/3-039" target="_blank"&gt;this session at //build&lt;/a&gt;, which was a great resource for getting started.&lt;/p&gt;  &lt;p&gt;If you go through the demo of &lt;a href="http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started/" target="_blank"&gt;getting started with WAMS building a TodoList&lt;/a&gt;, the idea is that the data in the todo list is locked down to each user.&amp;#160;&amp;#160; One of the nice things about WAMS is that it’s easy to enforce this via server side javascript … &lt;a href="http://www.windowsazure.com/en-us/develop/mobile/tutorials/authorize-users-in-scripts-dotnet/" target="_blank"&gt;for example&lt;/a&gt;, to ensure only the current user’s rows are returned, the following read script can be used that enforces the rows returned only belong to the current user:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; read(query, user, request) {
   query.where({ userId: user.userId });    
   request.execute();
}&lt;/pre&gt;

&lt;p&gt;If we crack open the database, we’ll see that the userId is an identifier, like the below for a Microsoft Account:&lt;/p&gt;

&lt;p&gt;MicrosoftAccount:0123456789abcd&lt;/p&gt;

&lt;p&gt;When the app connects to WAMS, the data returned includes the userId … for example, if we look at the JSON in fiddler:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_174.png" width="368" height="263" /&gt;&lt;/p&gt;

&lt;p&gt;The app never displays this information, and it is requested over SSL, but it’s an important consideration and here’s why.&amp;#160;&amp;#160; What if we have semi-public data?&amp;#160;&amp;#160; In the next version of &lt;a href="http://apps.microsoft.com/windows/en-US/app/dark-skies/4176bcef-efc1-49db-b515-7c8b428d8af7" target="_blank"&gt;Dark Skies&lt;/a&gt;, I allow users to pin favorite spots on the map.&amp;#160; The user has the option to make those points public or keep them private … for example, maybe they pin a great location for stargazing and want to share it with the world:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_175.png" width="236" height="215" /&gt;&lt;/p&gt;

&lt;p&gt;… Or, maybe the user pins their home locations or a private farm they have permission to use, where it might be inappropriate to show publically.&lt;/p&gt;

&lt;p&gt;Now here comes the issue:&amp;#160; if a location is shared publically, that userId is included in the JSON results.&amp;#160; Let’s say I launch the app and see 10 public pins.&amp;#160; If I view the JSON in fiddler, I’ll see the userId for each one of those public pins – for example:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_176.png" width="478" height="567" /&gt;&lt;/p&gt;

&lt;p&gt;Now, the userId contains no personally identifiable information.&amp;#160;&amp;#160; Is this a big deal, then?&amp;#160;&amp;#160; It’s not like it is the user’s name or address, and it would only be included in spots the user is sharing publically anyway.&lt;/p&gt;

&lt;p&gt;But, if a hacker ever finds a way to map a userId back to a specific person, this is a security issue.&amp;#160; Even my app doesn’t know who the users really are, it just knows the identifier.&amp;#160; Still, I think from a best practice/threat modeling perspective, if we can scrub that data, we should.&amp;#160; Note: this issue doesn’t exist with the todo list example, because the user only, and ever, sees their own data. &lt;/p&gt;

&lt;p&gt;Ideally, what we’d like to do is return the userId if it’s the current user’s userId.&amp;#160; If the point belongs to another user, we should scrub that from the result set.&amp;#160;&amp;#160; To do this via a read script in WAMS, we could do something like:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; read(query, user, request) {
   
   request.execute( {
    success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(results) {
        
         &lt;span class="rem"&gt;//scrub user token      &lt;/span&gt;
         &lt;span class="kwrd"&gt;if&lt;/span&gt; (results.length &amp;gt; 0) 
         {
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i=0; i&amp;lt; results.length; i++)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (results[i].UserId != user.userId)
                {
                    results[i].UserId = &lt;span class="str"&gt;'scrubbeduser'&lt;/span&gt;;                                                                                                                                      
                }                           
            }              
          }       
           
        request.respond();
    }
  });
}&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;If we look at the results in fiddler, we’ll see that I’ll get my userId for any of my points, but the userId is scrubbed if it’s another user’s points that are shared publically:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_177.png" width="382" height="623" /&gt;&lt;/p&gt;

&lt;p&gt;[Note: these locations are random spots on the map for testing.]&lt;/p&gt;

&lt;p&gt;Doing this is a good practice.&amp;#160; The database of course has the correct info, but the data for public points is guaranteed to be anonymous should a vulnerability ever present itself.&amp;#160;&amp;#160; The downside of this approach is the extra overhead as we’re iterating the results – but, this is fairly minor given the relatively small amounts of data.&lt;/p&gt;

&lt;p&gt;Technical point:&amp;#160; In my database and classes, I use Pascal case (as a matter of preference), as you can see in the above fiddler captures, such as UserId.&amp;#160;&amp;#160; In the todo example and in the javascript variables, objects are conventionally camel case.&amp;#160;&amp;#160; So, if you’re using any code here, just be aware that case does matter in situations like this:&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (results[i].UserId != user.userId) // watch casing!&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Be sure they match your convention.&amp;#160;&amp;#160; Since Pascal case is the standard for properties in C#, and camel case is the standard in javascript, properties in .NET can be decorated with the datamember attribute to make them consistent in both locations – something I, just as a matter of preference, prefer not to do:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;[DataMember(Name = &lt;span class="str"&gt;&amp;quot;userId&amp;quot;&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; UserId { get; set; }&lt;/pre&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/l4tKkqwgu4w" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/l4tKkqwgu4w/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/11/Scrubbing-UserId-in-Windows-Azure-Mobile-Services.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=8f3cf439-418d-407f-8a49-e8ccf2e7facd</guid>
      <pubDate>Fri, 11 Jan 2013 02:44:22 -0400</pubDate>
      <category>Azure</category>
      <category>Development</category>
      <category>Security</category>
      <category>USCloud</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=8f3cf439-418d-407f-8a49-e8ccf2e7facd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=8f3cf439-418d-407f-8a49-e8ccf2e7facd</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/11/Scrubbing-UserId-in-Windows-Azure-Mobile-Services.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=8f3cf439-418d-407f-8a49-e8ccf2e7facd</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=8f3cf439-418d-407f-8a49-e8ccf2e7facd</feedburner:origLink></item>
    <item>
      <title>Calling Stored Procedures from Windows Azure Mobile Services</title>
      <description>&lt;p&gt;I was surprised, yet delighted, that Windows Azure Mobile Services uses a SQL database.&amp;#160;&amp;#160; Schema-less table storage has its place and is the right solution at times, but for most data driven applications, I’d argue otherwise.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://structuretoobig.com/post/2013/01/07/Best-Practice-for-Sending-Windows-8-Tiles-from-Mobile-Services.aspx" target="_blank"&gt;In my last post&lt;/a&gt;, I wrote about sending notifications by writing the payload explicitly from a Windows Azure Mobile Service.&amp;#160;&amp;#160; In short, this allows us to include multiple tiles in the payload, accommodating users of both wide and square tiles.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;In my application, I want to execute a query to find push notification channels that match some criteria.&amp;#160; If we look at the &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/jj554212.aspx" target="_blank"&gt;Windows Azure Mobile Services script reference&lt;/a&gt;, the mssql object allows us to query the database using T-SQL and parameters, such as:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;mssql.query(&lt;span class="str"&gt;'select top 1 * from statusupdates'&lt;/span&gt;, {
    success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(results) {
        console.log(results);
    }
});&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;In my case, the query is a bit more complicated.&amp;#160; I want to join another table and use a function to do some geospatial calculations – while I could do this with inline SQL like in the above example, it’s not very maintainable or testable.&amp;#160; Fortunately, calling a stored procedure is quite easy.&lt;/p&gt;

&lt;p&gt;Consider the following example:&amp;#160; every time the user logs in, the Channel URI is updated.&amp;#160; What I’d like to do is find out how many new locations (called PointsOfInterest) have been modified since the last time the user has logged in.&amp;#160; To do that, I have a stored procedure like so:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;procedure&lt;/span&gt; [darkskies].[NewLocationsForChannel] 
(
    @channelUri &lt;span class="kwrd"&gt;as&lt;/span&gt; nvarchar(512) = &lt;span class="kwrd"&gt;null&lt;/span&gt;
)
&lt;span class="kwrd"&gt;as&lt;/span&gt;

&lt;span class="kwrd"&gt;select&lt;/span&gt; c.ChannelUri, &lt;span class="kwrd"&gt;count&lt;/span&gt;(1) &lt;span class="kwrd"&gt;as&lt;/span&gt; NumNewLocations
&lt;span class="kwrd"&gt;from&lt;/span&gt; darkskies.Channel c
&lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt; darkskies.PointOfInterest p 
&lt;span class="kwrd"&gt;on&lt;/span&gt; c.UserId = p.UserId 
&lt;span class="kwrd"&gt;where&lt;/span&gt; p.LastUpdated &amp;gt; c.LastUpdated
&lt;span class="kwrd"&gt;and&lt;/span&gt; c.ChannelUri = @channelUri
&lt;span class="kwrd"&gt;group&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; c.ChannelUri&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Writing something like that inline to the mssql object would be painful.&amp;#160;&amp;#160; As a stored procedure, it’s much easier to test and encapsulate.&amp;#160; In my WAMS script, I’ll call that procedure and send down a badge update:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; updateBadge(channelUri) 
{                  
       &lt;span class="kwrd"&gt;var&lt;/span&gt; &lt;span class="kwrd"&gt;params&lt;/span&gt; = [channelUri];
       &lt;span class="kwrd"&gt;var&lt;/span&gt; sql = &lt;span class="str"&gt;&amp;quot;exec darkskies.NewLocationsForChannel ?&amp;quot;&lt;/span&gt;;
       mssql.query(sql, &lt;span class="kwrd"&gt;params&lt;/span&gt;,
       {
            success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(results) {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (results.length &amp;gt; 0) {
                    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i=0; i&amp;lt; results.length; i++)
                    {
                           &lt;span class="kwrd"&gt;if&lt;/span&gt; (results[i].ChannelUri !== &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; 
                                results[i].ChannelUri.length &amp;gt; 0)
                           {                                                      
                                push.wns.sendBadge(results[i].ChannelUri, 
                                    results[i].NumNewLocations);
                           }             
                    }               
              }
        }
    });
} &lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;This section of code only updates the badge of the Windows 8 Live Tile, but it works out nicely with tile queuing:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.structuretoobig.com/image.axd?picture=image_173.png" width="314" height="154" /&gt;&lt;/p&gt;

&lt;p&gt;Note: this app is live in the Windows 8 Store, however, at the time of this writing, these features have not yet been released.&amp;#160; In the next few posts, we’ll look at the notifications a bit more, including how to pull off some geospatial stuff in WAMS.&lt;/p&gt;&lt;img src="http://www.myworldmaps.net/map.ashx/fecb0aff-083e-4f42-9b08-9a01e3cb714a/ping" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/structuretoobig/~4/dPsApgL6We4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/structuretoobig/~3/dPsApgL6We4/post.aspx</link>
      <comments>http://blog.structuretoobig.com/post/2013/01/07/Calling-Stored-Procedures-from-Windows-Azure-Mobile-Services.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.structuretoobig.com/post.aspx?id=0d4722f1-c75d-4b72-ac92-4ca9524bc828</guid>
      <pubDate>Mon, 07 Jan 2013 23:27:41 -0400</pubDate>
      <category>Azure</category>
      <category>Windows 8</category>
      <category>Development</category>
      <category>USCloud</category>
      <dc:publisher>bhitney</dc:publisher>
      <pingback:server>http://blog.structuretoobig.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.structuretoobig.com/post.aspx?id=0d4722f1-c75d-4b72-ac92-4ca9524bc828</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.structuretoobig.com/trackback.axd?id=0d4722f1-c75d-4b72-ac92-4ca9524bc828</trackback:ping>
      <wfw:comment>http://blog.structuretoobig.com/post/2013/01/07/Calling-Stored-Procedures-from-Windows-Azure-Mobile-Services.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.structuretoobig.com/syndication.axd?post=0d4722f1-c75d-4b72-ac92-4ca9524bc828</wfw:commentRss>
    <feedburner:origLink>http://blog.structuretoobig.com/post.aspx?id=0d4722f1-c75d-4b72-ac92-4ca9524bc828</feedburner:origLink></item>
  </channel>
</rss>
