<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Matt Harrington</title><link>http://blogs.msdn.com/b/matt-harrington/</link><description>Blogging from San Francisco</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Office hours: in-person help for US developers working on Windows 8 and Windows Phone apps</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2013/01/14/office-hours-in-person-help-for-us-developers-working-on-windows-8-and-windows-phone-apps.aspx</link><pubDate>Mon, 14 Jan 2013 19:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10384874</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2013/01/14/office-hours-in-person-help-for-us-developers-working-on-windows-8-and-windows-phone-apps.aspx#comments</comments><description>&lt;p&gt;You&amp;rsquo;re working on a Windows 8 or Windows Phone app, and you&amp;rsquo;re stuck.&amp;nbsp; You could turn to the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/windowsapps"&gt;MSDN forums&lt;/a&gt; or &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;, but if you prefer meeting in person or over Skype, we&amp;rsquo;re here to help.&amp;nbsp; Here&amp;rsquo;s a list of US-based evangelists, their office hours, and where they&amp;rsquo;ll meet.&amp;nbsp; I&amp;rsquo;ll update this page as I receive new information.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;San Francisco.&amp;nbsp; Matt Harrington.&amp;nbsp; &lt;a title="http://ohours.org/mattharrington" href="http://ohours.org/mattharrington"&gt;http://ohours.org/mattharrington&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Silicon Valley, Doris Chen.&amp;nbsp; &lt;a title="http://ohours.org/dorischen" href="http://ohours.org/dorischen"&gt;http://ohours.org/dorischen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Silicon Valley, Alice Pang.&amp;nbsp; &lt;a title="http://ohours.org/alicerp" href="http://ohours.org/alicerp"&gt;http://ohours.org/alicerp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Marin County, California.&amp;nbsp; Bruno Terkaly.&amp;nbsp; &lt;a title="http://ohours.org/brunoterkaly" href="http://ohours.org/brunoterkaly"&gt;http://ohours.org/brunoterkaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Arizona. Michael Palermo.&amp;nbsp; &lt;a title="http://ohours.org/palermo4" href="http://ohours.org/palermo4"&gt;http://ohours.org/palermo4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Arizona.&amp;nbsp; Harold Wong (IT pro).&amp;nbsp; &lt;a title="http://ohours.org/haroldwong" href="http://ohours.org/haroldwong"&gt;http://ohours.org/haroldwong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Seattle.&amp;nbsp; Jeremy Foster.&amp;nbsp; &lt;a title="http://ohours.org/codefoster" href="http://ohours.org/codefoster"&gt;http://ohours.org/codefoster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;San Diego.&amp;nbsp; Bret Stateham.&amp;nbsp; &lt;a title="http://ohours.org/BretStateham" href="http://ohours.org/BretStateham"&gt;http://ohours.org/BretStateham&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Orange County.&amp;nbsp; Daniel Egan.&amp;nbsp; &lt;a title="http://ohours.org/DanielEgan" href="http://ohours.org/DanielEgan"&gt;http://ohours.org/DanielEgan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ll definitely want to &lt;a href="http://aka.ms/genappsignup"&gt;sign up for Generation App&lt;/a&gt; too, as this gives you free design and architecture consultations.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10384874" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_phone/">windows-phone</category></item><item><title>Students: build a Windows 8 app over winter break and get $100</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/12/13/students-build-a-windows-8-app-over-winter-break-and-get-100.aspx</link><pubDate>Fri, 14 Dec 2012 02:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10378007</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/12/13/students-build-a-windows-8-app-over-winter-break-and-get-100.aspx#comments</comments><description>&lt;p&gt;If you&amp;rsquo;re a student, you&amp;rsquo;re probably finishing up final exams right about now, and making plans to go home for winter break.&amp;nbsp; Why not put your downtime to good use and build a Windows 8 app?&amp;nbsp; As an incentive, we&amp;rsquo;re offering $100 to students who get their app published between now and January 20, 2013.&amp;nbsp; Be sure to check out &lt;a href="http://sdrv.ms/YE5PoQ"&gt;the official terms and conditions&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Get started&lt;/strong&gt;: Download all the software and resources you need, completely free.&amp;nbsp; &lt;a href="http://aka.ms/w8holidayapp"&gt;http://aka.ms/w8holidayapp&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build your app&lt;/strong&gt;: find videos, sample code, tips, and get free consultations with Microsoft engineers and designers&amp;nbsp;through Generation App:&amp;nbsp; &lt;a href="http://aka.ms/genappsignup"&gt;http://aka.ms/genappsignup&lt;/a&gt;.&amp;nbsp; Definitely sign up for this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publish your app&lt;/strong&gt;: Your app will be available to millions in the Windows Store.&amp;nbsp; Submit the details of your published app to claim your $100 AmEx gift card: &lt;a href="http://bit.ly/XAoYqp"&gt;http://bit.ly/XAoYqp&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the first month of its release, &lt;a href="http://blogs.windows.com/windows/b/bloggingwindows/archive/2012/11/27/windows-8-40-million-licenses-sold.aspx"&gt;Windows 8 sold 40 million licenses&lt;/a&gt;.&amp;nbsp; That&amp;rsquo;s a big number.&amp;nbsp; There are millions of people out there waiting to download your app.&amp;nbsp; Go make it happen.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10378007" width="1" height="1"&gt;</description></item><item><title>Microsoft to offer free design and architecture consultations for Windows 8 apps</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/10/03/microsoft-to-offer-free-design-and-architecture-consultations-for-windows-8-apps.aspx</link><pubDate>Wed, 03 Oct 2012 14:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10355549</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/10/03/microsoft-to-offer-free-design-and-architecture-consultations-for-windows-8-apps.aspx#comments</comments><description>&lt;p&gt;Developers who&amp;rsquo;ve been working on Windows 8 applications can now get a little extra help from Microsoft.&amp;nbsp; We&amp;rsquo;re launching a new online initiative called &lt;a href="http://aka.ms/genappsignup"&gt;Generation App&lt;/a&gt; to guide developers through the process of building for Windows 8.&amp;nbsp; Here&amp;rsquo;s how the self-guided 4 week program breaks down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Week 1: Planning and design&lt;/li&gt;
&lt;li&gt;Week 2: Coding&lt;/li&gt;
&lt;li&gt;Week 3: Adding Windows 8 features such as Live Tiles and Notifications&lt;/li&gt;
&lt;li&gt;Week 4: Getting your app into the Windows Store and making money&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;As a bonus, Generation App also offers two free phone consultations with both a designer and an architect.&lt;/strong&gt;&amp;nbsp; Perhaps you have an app idea but aren&amp;rsquo;t sure how to apply Windows 8 design principles to&amp;nbsp;typography, layout, and navigation.&amp;nbsp; A call with a designer should clear that up.&amp;nbsp; Perhaps you have an app all planned out and just want confirmation that you&amp;rsquo;re on the right track.&amp;nbsp; A call with an architect will clear that up too.&amp;nbsp; It&amp;rsquo;s totally free, so there&amp;rsquo;s no reason to not take advantage of this.&lt;/p&gt;
&lt;p&gt;Register here today: &lt;a href="http://aka.ms/genappsignup"&gt;http://aka.ms/genappsignup&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10355549" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>Silicon Valley Code Camp, October 6 &amp; 7, 2012</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/09/24/silicon-valley-code-camp-october-6-amp-7-2012.aspx</link><pubDate>Mon, 24 Sep 2012 14:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10352691</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/09/24/silicon-valley-code-camp-october-6-amp-7-2012.aspx#comments</comments><description>&lt;p&gt;Each year, thousands of developers descend upon Los Altos Hills for the &lt;a href="http://www.siliconvalley-codecamp.com/"&gt;Silicon Valley Code Camp&lt;/a&gt;.&amp;nbsp; This year there are 223 sessions scheduled on topics ranging from client development, to mobile development, to web development.&lt;/p&gt;
&lt;p&gt;As a special treat, &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; will give 2 cloud computing sessions on Sunday, October 7:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=953"&gt;Windows Cloud Walkthrough with Microsoft&amp;rsquo;s Scott Guthrie, VP Server &amp;amp; Tools (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=954"&gt;Windows Cloud Walkthrough with Microsoft&amp;rsquo;s Scott Guthrie, VP Server &amp;amp; Tools (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Be sure to click the &amp;ldquo;Will Attend&amp;rdquo; button at the bottom of each of the above links.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In addition, many other other Microsoft employees will be giving sessions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=1002"&gt;Windows 8 Development with C++: The Return of the Native&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=913"&gt;Matt Harrington &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=1023"&gt;Windows 8 Development for HTML/JavaScript Developers (Part 1)&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=4087"&gt;Doris Chen &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=1030"&gt;Practical HTML5: Using It Today&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=4087"&gt;Doris Chen &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=850"&gt;Build a WordPress Blog and Photo Gallery Site in 60 Minutes!&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=4442"&gt;Alice Pang &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=920"&gt;Windows 8 Development for HTML/JavaScript Developers&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=4442"&gt;Alice Pang &lt;/a&gt;, &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=1006"&gt;William Leong &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=973"&gt;Ready to make some money, Windows 8 is coming!&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=8480"&gt;Kevin Ashley &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=995"&gt;Windows 8 Design&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=8345"&gt;Jeremy Foster &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=996"&gt;Advanced Windows 8 App Development with JavaScript&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=8345"&gt;Jeremy Foster &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=994"&gt;One Sweet Stack: OData to Windows 8&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=8345"&gt;Jeremy Foster &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=1004"&gt;Why the Microsoft Cloud is a great choice for iOS, Android, Windows Phone, Windows 8, and HTML5&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=565"&gt;Bruno Terkaly &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=1064"&gt;Developing for Windows Phone and Windows 8&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=203"&gt;Kenny Spade &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=919"&gt;Building Open Data (OData) Services and Applications using LightSwitch&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=1995"&gt;Beth Massi &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.siliconvalley-codecamp.com/Sessions.aspx?OnlyOne=true&amp;amp;id=923"&gt;Building Business Applications for Tablet Devices&lt;/a&gt; -- &lt;a href="http://www.siliconvalley-codecamp.com/Speakers.aspx?AttendeeId=1995"&gt;Beth Massi &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be sure to &lt;a href="http://www.siliconvalley-codecamp.com/Register.aspx"&gt;register&lt;/a&gt; today.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10352691" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Event/">Event</category></item><item><title>Using the Microsoft Ad SDK in Windows 8</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/08/28/using-the-microsoft-ad-sdk-in-windows-8.aspx</link><pubDate>Wed, 29 Aug 2012 05:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10344493</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/08/28/using-the-microsoft-ad-sdk-in-windows-8.aspx#comments</comments><description>&lt;p&gt;One of the best ways to make money with Windows 8 is to display ads in your Windows Store app using the Microsoft Advertising SDK.&amp;nbsp; Here&amp;rsquo;s how you can get started.&lt;/p&gt;
&lt;p&gt;Prerequisites: You&amp;rsquo;ll need Windows 8 RTM and Visual Studio 2012.&amp;nbsp; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;A free 90 day evaluation edition of Windows 8 Enterprise is available, and VS2012 Express Edition is completely free&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=9815330"&gt;Start by downloading and installing the Microsoft Advertising SDK&lt;/a&gt;.&amp;nbsp; At the time this post is being written, Windows 8 RTM has been released, but the Microsoft Ad SDK is still in beta at version 6.1.0813.1.&amp;nbsp; It works with Windows 8 RTM, but not all features are supported yet.&amp;nbsp; The RTM version of the Microsoft Ad SDK is expected in mid-September.&amp;nbsp; I&amp;rsquo;ll update this blog post as necessary then.&lt;/p&gt;
&lt;p&gt;The SDK which you just installed supports both JavaScript and .NET.&amp;nbsp; This post focuses on using the Ad SDK in a JavaScript app.&lt;/p&gt;
&lt;p&gt;Open Visual Studio and create a JavaScript Windows Store Blank App:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/4745.SNAGHTML3c3f61_5F00_766D7B38.png"&gt;&lt;img width="729" height="412" title="SNAGHTML3c3f61" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="SNAGHTML3c3f61" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/0624.SNAGHTML3c3f61_5F00_thumb_5F00_27F8E8CE.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the Solution Explorer, right-click on References and select &amp;ldquo;Add Reference&amp;rdquo;.&amp;nbsp; Then select the Microsoft Advertising SDK and click OK:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/7484.SNAGHTML45512c_5F00_473B8FA1.png"&gt;&lt;img width="725" height="346" title="SNAGHTML45512c" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="SNAGHTML45512c" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/6076.SNAGHTML45512c_5F00_thumb_5F00_18E209F4.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Back in the Solution Explorer, expand References and drill down into the SDK to find ad.js:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/1602.image_5F00_466329B7.png"&gt;&lt;img width="339" height="406" title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/6866.image_5F00_thumb_5F00_7F0DD3C4.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the SDK.&amp;nbsp; Open it if you like.&amp;nbsp; It&amp;rsquo;s just a big JavaScript file.&lt;/p&gt;
&lt;p&gt;Open default.html, and insert a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; element to include the SDK.&amp;nbsp; Do this in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; of your document, and make sure you add it after your &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag which calls default.js.&amp;nbsp; You can easily add this &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; by dragging ad.js from the Solution Explorer to a point at the bottom of your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section.&amp;nbsp; Or, just type it by hand:&lt;/p&gt;
&lt;p&gt;&amp;lt;script src="http://blogs.msdn.com/MSAdvertisingJS/ads/ad.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;In the &amp;lt;body&amp;gt; of default.html, insert the ad control:&lt;/p&gt;
&lt;p&gt;&amp;lt;div id="myAd" style='position: absolute; top: 53px; left: 0px; width: 728px; height: 90px; z-index: 1' &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data-win-control="MicrosoftNSJS.Advertising.AdControl" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data-win-options="{applicationId: 'test_client', adUnitId: 'Image_728x90'}"&amp;gt; &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s just a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; with a &amp;ldquo;data-win-control&amp;rdquo; attribute, just like other Windows 8 controls.&amp;nbsp; In &amp;ldquo;data-win-options&amp;rdquo; you can enter your applicationId from &lt;a href="http://pubcenter.microsoft.com"&gt;pubCenter&lt;/a&gt; (sign up there to get one), and you can also change the type of ad displayed by altering adUnitId.&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/hh506361(v=msads.10)"&gt;Lots of choices for adUnitId are listed in the Ad SDK documentation&lt;/a&gt;.&amp;nbsp; Ad units vary by size, type (either text or image), and by the action that clicking on it produces.&amp;nbsp; Match the &amp;lt;div&amp;gt;&amp;rsquo;s width and height to the size of the ad unit.&amp;nbsp; In the above example, both the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; and the ad returned are 728 pixels wide by 90 pixels high.&amp;nbsp; Hit F5 to run your app:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/1106.image_5F00_458AC3CD.png"&gt;&lt;img width="700" height="392" title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/5074.image_5F00_thumb_5F00_730BE390.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you tinker with the CSS a bit, which I like to do in Blend, you&amp;rsquo;ll end up with something passable such as this ad shown with the &lt;a href="http://createjs.com/#!/EaselJS"&gt;EaselJS&lt;/a&gt; game Space Rocks:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/0513.image_5F00_729FB09B.png"&gt;&lt;img width="858" height="481" title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/8623.image_5F00_thumb_5F00_31FD642C.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now that we have the basics out of the way, let&amp;rsquo;s dig a little deeper.&amp;nbsp; Here are all the options available for the AdControl:&lt;/p&gt;
&lt;p&gt;data-win-control="MicrosoftNSJS.Advertising.AdControl" &lt;br /&gt;data-win-options="{applicationId: 'test_client', &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adUnitId: 'Image_300x250', &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; countryOrRegion: 'us', &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isAutoRefreshEnabled: false, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keywords: 'windows8,awesome',&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latitude: 40.47, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; longitude: 73.58, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; postalCode: '10021', &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onAdRefreshed: myAdRefreshed, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onErrorOccurred: myAdError, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onEngagedChanged: myAdEngagedChanged, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onPointerDown: myPointerDown, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onPointerUp: myPointerUp }"&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;applicationId: your key from pubCenter&lt;/li&gt;
&lt;li&gt;adUnitId: the type of ad&lt;/li&gt;
&lt;li&gt;countryOrRegion: where you are&lt;/li&gt;
&lt;li&gt;isAutoRefreshEnabled: set to false if you want to control how often a new ad is shown.&amp;nbsp; Make your own call to &lt;a href="http://msdn.microsoft.com/en-us/library/hh506383(v=msads.10)"&gt;&lt;code&gt;refresh()&lt;/code&gt;&lt;/a&gt; to show a new ad.&amp;nbsp; This doesn&amp;rsquo;t appear to work in the beta of the SDK though.&lt;/li&gt;
&lt;li&gt;keywords, latitude, longitude, and postalCode can be used to request relevant ads based on keywords and location.&amp;nbsp; If you get too specific, there might not be any ads available and nothing will be shown.&lt;/li&gt;
&lt;li&gt;onAdRefreshed points to a function which will be called when an ad is refreshed.&lt;/li&gt;
&lt;li&gt;onErrorOccurred points to a callback for errors.&lt;/li&gt;
&lt;li&gt;onEngagedChanged points to a function which will be called when a user clicks on an ad.&amp;nbsp; Depending on the adUnitId, this may show a fullscreen ad or even open a browser.&amp;nbsp; Use this callback to pause the game.&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-US/library/hh506384(v=msads.10).aspx"&gt;See the SDK documentation for an example&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;onPointerDown and onPointerUp point to functions which are called when a user clicks, points, or touches inside an ad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The above options are shown in HTML5, but they can also be set in JavaScript.&amp;nbsp; For example:&lt;/p&gt;
&lt;p&gt;var adDiv = document.getElementById("myAd"); &lt;br /&gt;var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationId: 'test_client', &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adUnitId: 'Image_250x250' &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt;myAdControl.isAutoRefreshEnabled = false; &lt;br /&gt;myAdControl.countryOrRegion = "us"; &lt;br /&gt;myAdControl.keywords = "windows8, rocks"; &lt;br /&gt;myAdControl.latitude = 40.47; &lt;br /&gt;myAdControl.longitude = 73.58; &lt;br /&gt;myAdControl.postalCode = "10021"; &lt;br /&gt;myAdControl.onErrorOccurred = myAdError; &lt;br /&gt;myAdControl.onAdRefreshed = myAdRefreshed; &lt;br /&gt;myAdControl.onEngagedChanged = myAdEngagedChanged;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href="http://msdn.microsoft.com/en-us/library/hh506367(v=msads.10)"&gt;Additional Help&lt;/a&gt; page in the SDK documentation for more resources including a link to the online support forum.&lt;/p&gt;
&lt;p&gt;Screenshots made with &lt;a href="http://www.techsmith.com/snagit.html"&gt;SnagIt from TechSmith&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10344493" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>Windows 8 virtual hackathon, August 2012</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/08/08/windows-8-virtual-hackathon-august-2012.aspx</link><pubDate>Wed, 08 Aug 2012 16:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10337930</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/08/08/windows-8-virtual-hackathon-august-2012.aspx#comments</comments><description>&lt;p&gt;Hackathons are quite popular here in Silicon Valley, but not everyone can make it to one.&amp;nbsp; Maybe you live too far away, or maybe you have family obligations on the weekend.&amp;nbsp; You&amp;rsquo;re in luck!&amp;nbsp; We&amp;rsquo;re running a virtual hackathon where everything takes place online.&amp;nbsp; Here are the details in a nutshell, and more details will be added as questions arise:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration is open now.&amp;nbsp; Here&amp;rsquo;s the registration page: &lt;a title="http://codercharts.com/hackathon/windows-8-online-app-a-thon/registration" href="http://codercharts.com/hackathon/windows-8-online-app-a-thon/registration"&gt;http://codercharts.com/hackathon/windows-8-online-app-a-thon/registration&lt;/a&gt;.&amp;nbsp; &lt;strong&gt;Register now to secure your spot&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;There are 3 categories, with a &lt;strong&gt;prize of $1000 in each category&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Apps can be submitted from August 17 through August 26, 2012.&lt;/li&gt;
&lt;li&gt;You'll put your app on Skydrive and submit a URL to CoderCharts.com.&amp;nbsp; Also consider making a 3-5 minute screencast to demo your app.&amp;nbsp; &lt;a href="http://www.techsmith.com/snagit.html"&gt;SnagIt from TechSmith&lt;/a&gt; is simple to use, supports uploading to YouTube, and has a free 30 day trial.&amp;nbsp; Simply run your app in the simulator and capture only that portion of the screen.&amp;nbsp; Export to YouTube and submit the link on CoderCharts.&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;ll submit your app on CoderCharts.com.&amp;nbsp; Also consider making a brief &lt;a href="http://www.techsmith.com/jing.html"&gt;screencast using Jing&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;You can enter as an individual or as a team.&amp;nbsp; Find teammates on &lt;a href="https://www.facebook.com/Windows8OnlineAppAThon"&gt;the hackathon&amp;rsquo;s Facebook page&lt;/a&gt;.&amp;nbsp; If you have an idea for an app, post a note there asking for people to join you.&amp;nbsp; Maybe you&amp;rsquo;re an entrepreneur with a great idea, and need to find developers to bring it to life.&amp;nbsp; Maybe you&amp;rsquo;re a designer and want to share your skills with a developer.&amp;nbsp; The Facebook page is the place to make this happen.&lt;/li&gt;
&lt;li&gt;If you join a team, keep in touch with your teammates using tools like &lt;a href="http://www.skype.com/"&gt;Skype&lt;/a&gt; or &lt;a href="https://trello.com/"&gt;Trello&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Prizes can only be awarded to US residents, but residents of other countries can still participate.&amp;nbsp; Winning a hackathon, even if you're not eligible for a prize, is still an honor.&lt;/li&gt;
&lt;li&gt;Categories:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Utility apps&lt;/b&gt; &amp;ndash; Productivity, Tools, Government, Business, Security, Finance&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Lifestyle apps&lt;/b&gt; &amp;ndash; Social, Photo, Music &amp;amp; Video, News &amp;amp; Weather, Health &amp;amp; Fitness, Food &amp;amp; Dining, Shopping, Travel&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Edutainment apps&lt;/b&gt; &amp;ndash; Games, Education, Entertainment, Sports, Books &amp;amp; Reference&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;Get started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Download Windows 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re on a PC, it&amp;rsquo;s best to install Windows 8 directly on your machine.&amp;nbsp; Or, follow &lt;a href="http://www.hanselman.com/blog/GuideToInstallingAndBootingWindows8DeveloperPreviewOffAVHDVirtualHardDisk.aspx"&gt;Scott Hanselman&amp;rsquo;s guide to installing on a Virtual Hard Disk (VHD)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re on a Mac, &lt;a href="http://www.bing.com/search?q=windows+8+boot+camp"&gt;install Windows 8 using Boot Camp&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you insist, you can install into a virtual machine using 3rd party products, but the best Windows 8 experience comes from running directly on the hardware so you can take advantage of GPU hardware acceleration.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Download Visual Studio 2012 Express Edition&lt;/a&gt;.&amp;nbsp; It&amp;rsquo;s free.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Download the Sample App Pack&lt;/a&gt; to get over 300 MB of code samples.&lt;/li&gt;
&lt;li&gt;You can also view &lt;a href="http://code.msdn.microsoft.com/windowsapps/"&gt;individual code samples on MSDN&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29854"&gt;Download the Windows 8 Camp in a Box&lt;/a&gt;.&amp;nbsp; Choose either JavaScript/HTML5 or C#/XAML.&amp;nbsp; This includes an 8 part hands-on lab which builds an app called Contoso Cookbook.&amp;nbsp; &lt;strong&gt;This is really the best way to learn Windows 8 development&lt;/strong&gt;.&amp;nbsp; Trust me.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questions?:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Questions about Windows 8 development should be posted in the MSDN forums.&amp;nbsp; &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/windowsapps"&gt;There are forums for JavaScript, C#/VB.NET, C++, DirectX, the Windows 8 design language, and more&lt;/a&gt;.&amp;nbsp; Microsoft staff monitor the forums to ensure that all questions are answered.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/tagged/windows-8"&gt;StackOverflow&lt;/a&gt; is also a great place to post your Windows 8 question.&lt;/li&gt;
&lt;li&gt;Questions about the hackathon itself should be posted in the &lt;a href="http://codercharts.com/phpBB3/viewforum.php?f=20&amp;amp;sid=eb818a787e28e6b62f5d83324f6ad69c"&gt;forums on CoderCharts&lt;/a&gt;.&amp;nbsp; You can also use &lt;a href="https://www.facebook.com/Windows8OnlineAppAThon"&gt;the Facebook page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Our Twitter hashtag is &lt;a href="https://twitter.com/#!/search/%23win8apphack"&gt;#win8apphack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=" fb_reset" id="fb-root"&gt;
&lt;div style="top: -10000px; width: 0px; height: 0px; position: absolute;"&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10337930" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Event/">Event</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>How to paginate in Node.js using Azure Table Storage</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/06/30/how-to-paginate-in-node-js-using-azure-table-storage.aspx</link><pubDate>Sun, 01 Jul 2012 06:45:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10325831</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/06/30/how-to-paginate-in-node-js-using-azure-table-storage.aspx#comments</comments><description>&lt;p&gt;Imagine you have millions of entities in an Azure table, and you want to page through them displaying 20 entities at a time. Fetching all entities and then dividing them into groups of 20 is hardly the most efficient way to do this. In addition, at the time this document is being written, Azure limits the number of returned entities to 1000 in any given request. Among other things, this keeps developers from accidentally querying for millions of entities.&lt;/p&gt;  &lt;p&gt;Azure Table Storage supports &lt;em&gt;continuation tokens &lt;/em&gt;to support paging through a large number of entities. You fetch a group entities, and the result contains a continuation token if there are more entities remaining to be fetched. The continuation token is like a bookmark which indicates where the query left off. For example, if you fetched entities 1-20, a continuation token is included to tell you to begin your next query at entity number 21. This is how you can efficiently page through a large number of entities.&lt;/p&gt;  &lt;p&gt;The code at the bottom of this post illustrates how to do pagination in Node with Azure tables. Save it in a file called &lt;code&gt;table-storage-pagination-sample.js&lt;/code&gt;.&amp;#160; It creates a sample database containing &lt;code&gt;totalEntities&lt;/code&gt; number of entities. It then queries the results and displays &lt;code&gt;pageSize&lt;/code&gt; entities per page.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;createTableIfNotExists()&lt;/code&gt; simply creates a table and populates it with sample data using a batch insertion. These can include at most 100 entities at a time, so the code loops through this operation until the number of entities in &lt;code&gt;totalEntities&lt;/code&gt; has been created. Make &lt;code&gt;totalEntities&lt;/code&gt; a multiple of 100 so that &lt;code&gt;totalEntities / 100&lt;/code&gt; is an integer. This indicates how many batches of 100 insertions should be performed.&lt;/p&gt;  &lt;p&gt;In &lt;code&gt;http.createServer()&lt;/code&gt; we ignore requests for &lt;code&gt;/favicon.ico&lt;/code&gt; for the same of simplicity.&lt;/p&gt;  &lt;p&gt;Skip over the &lt;code&gt;if&lt;/code&gt; block which handles requests to &lt;code&gt;/nextPage&lt;/code&gt; for now. We'll come back to it.&lt;/p&gt;  &lt;p&gt;This line defines our initial query:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query = azure.TableQuery.select().from(tableName).top(pageSize);
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You've probably seen &lt;code&gt;select()&lt;/code&gt; and &lt;code&gt;from()&lt;/code&gt; before. &lt;code&gt;top()&lt;/code&gt; limits the query to &lt;code&gt;pageSize&lt;/code&gt; number of entities.&lt;/p&gt;

&lt;p&gt;In the parameter list for &lt;code&gt;entitiesQueriedCallback&lt;/code&gt;, note that we now include &lt;code&gt;pageContinuation&lt;/code&gt;. This object contains the continuation token. If you're curious, set a breakpoint or use &lt;code&gt;console.log()&lt;/code&gt; to inspect &lt;code&gt;pageContinuation&lt;/code&gt;. You'll see that it contains these properties: &lt;code&gt;tableService&lt;/code&gt;, &lt;code&gt;tableQuery&lt;/code&gt;, &lt;code&gt;nextPartitionKey&lt;/code&gt;, and &lt;code&gt;nextRowKey&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;entitiesQueriedCallback&lt;/code&gt; loops through the results and uses &lt;code&gt;counter&lt;/code&gt; to keep track of how many total results have so far been returned. &lt;code&gt;counter&lt;/code&gt; is initialized at the top of &lt;code&gt;http.createServer()&lt;/code&gt; because it's also used by the &lt;code&gt;if&lt;/code&gt; block which handles requests for &lt;code&gt;/nextPage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If there are more entities yet to be retrieved, &lt;code&gt;pageContinuation.hasNextPage()&lt;/code&gt; will return true. If that's the case, then we emit a link to &lt;code&gt;/nextPage&lt;/code&gt; which includes &lt;code&gt;nextPartitionKey&lt;/code&gt; and &lt;code&gt;nextRowKey&lt;/code&gt; as query strings.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;if&lt;/code&gt; block which handles requests for &lt;code&gt;/nextPage&lt;/code&gt;, we use the &lt;code&gt;querystring&lt;/code&gt; module to extract &lt;code&gt;nextPartitionKey&lt;/code&gt; and &lt;code&gt;nextRowKey&lt;/code&gt; from the requested URL. We then create &lt;code&gt;nextPageQuery&lt;/code&gt; which contains these keys and pass it to &lt;code&gt;queryEntities()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When there are no more entities to be retrieved, &lt;code&gt;pageContinuation.hasNextPage()&lt;/code&gt; returns false and we no longer display a link for the next page.&lt;/p&gt;

&lt;p&gt;Here’s the code:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;http = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'http'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;url = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'url'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;querystring = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'querystring'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;azure = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'azure'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;uuid = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'node-uuid'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;port = process.env.PORT || 1337;  &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// for Azure or when running locally.

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;account = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'your account goes here'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;accountKey = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'your account key goes here'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableService = azure.createTableService(account, accountKey);
&lt;/span&gt;&lt;span style="background: white; color: green"&gt;//tableService.logger = new azure.Logger(azure.Logger.LogLevels.DEBUG);  // Uncomment this to enable logging
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;totalEntities = 100; &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Number of entities to create. Make it a multiple of 100.
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;pageSize = 20;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableName = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'largetable'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;; &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Name your table here.

// Create and populate the table.  Note that for batch operations,
// the PartitionKey must be the same for all entities.
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableService.createTableIfNotExists(tableName, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(err, created) {
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(created) {
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;numberOfBatches = parseInt(totalEntities / 100);
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;for &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;i = 0; i &amp;lt; numberOfBatches; i++) {
            tableService.beginBatch();
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;now = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black"&gt;Date().toString();
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;for &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;j = 0; j &amp;lt; 100; j++) { &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Batches can include at most 100 entities.
                &lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableService.insertEntity(tableName, {
                    PartitionKey: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'White'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, RowKey: (i * 100 + j + 1).toString(),
                    Winery: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Azure Vineyards'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, Variety: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Chardonnay'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, Vintage: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'2003'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, Notes: uuid(), TastedOn: now
                });
            }
            tableService.commitBatch(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;() {
                console.log(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Initialized table &amp;quot;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ tableName + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;quot; with 100 sample entities.'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            });
        }
    }
});

http.createServer(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(req, res) {
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;counter = 0;
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(req.url === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'/favicon.ico'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(url.parse(req.url).pathname === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'/nextPage'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) {
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;parsedQuerystring = querystring.parse(url.parse(req.url).query);
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;nextPartitionKey = parsedQuerystring.nextPartitionKey;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;nextRowKey = parsedQuerystring.nextRowKey;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;nextPageQuery = azure.TableQuery.select().from(tableName).top(pageSize).whereNextKeys(nextPartitionKey, nextRowKey);
        tableService.queryEntities(nextPageQuery, entitiesQueriedCallback);
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
    }

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query = azure.TableQuery.select().from(tableName).top(pageSize);
    tableService.queryEntities(query, entitiesQueriedCallback);

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;entitiesQueriedCallback(error, serverEntities, pageContinuation) {
        res.writeHead(200, { &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Content-Type'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'text/html' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;});
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(error === &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) {
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;for &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;index &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;in &lt;/span&gt;&lt;span style="background: white; color: black"&gt;serverEntities) {
                res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'RowKey: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index].RowKey + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;', Winery: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
                            serverEntities[index].Winery + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;', Notes: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index].Notes + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;br /&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
                counter++;
            }
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;br /&amp;gt;Returned ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ counter + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;' entities. &amp;lt;br /&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(pageContinuation.hasNextPage()) {
                res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;a href=&amp;quot;/nextPage?nextPartitionKey=' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ pageContinuation.nextPartitionKey +
                    &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;amp;nextRowKey=' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ pageContinuation.nextRowKey + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;quot;&amp;gt;Next page&amp;lt;/a&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            }
            res.end();
        } &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;else &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
            res.end(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Could not query entities: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ error.code);
            console.log(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Could not query entities: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ error.code);
        }
    }

}).listen(port);

&lt;/span&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10325831" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Node-js/">Node.js</category></item><item><title>Wine Nodebook: A Node.js app which uses Azure Table Storage</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/06/30/how-to-use-azure-table-storage-from-node-js.aspx</link><pubDate>Sun, 01 Jul 2012 05:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10325829</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/06/30/how-to-use-azure-table-storage-from-node-js.aspx#comments</comments><description>&lt;p&gt;Let’s build a Node.js app which uses Azure Table Storage.&amp;#160; It will record notes from wine tastings, and for kicks let’s call it &lt;strong&gt;Wine &lt;em&gt;Node&lt;/em&gt;book&lt;/strong&gt;. When building a website, you'll probably want to use a proper web framework such as Express, but for our purposes we'll keep things deliberately simple. Otherwise, this would be more about Express and less about Azure Table Storage.&amp;#160; We'll start with something based on the Hello World example from &lt;a href="http://nodejs.org/"&gt;http://nodejs.org&lt;/a&gt;. Note that the arguments inside &lt;code&gt;listen()&lt;/code&gt; have changed:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;http = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'http'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
http.createServer(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(req, res) {
    res.writeHead(200, {&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Content-Type'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'text/plain'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;});
    res.end(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Hello World\n'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
}).listen(port);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Let's start by importing some modules we'll be using. Add these lines at the top of the file:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;azure = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'azure'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;formidable = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'formidable'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;), util = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'util'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;uuid = require(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'node-uuid'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;azure&lt;/code&gt; is the Azure SDK, &lt;code&gt;formidable&lt;/code&gt; is an HTTP forms processing module, &lt;code&gt;util&lt;/code&gt; contains various utilities, and &lt;code&gt;node-uuid&lt;/code&gt; will be used to generate UUIDs for the data we'll be putting into Azure Tables.&lt;/p&gt;

&lt;p&gt;Next add this line to set up the application for running either locally, in the Cloud9 IDE, or when deployed on Azure:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;port = process.env.PORT || 1337;  &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// for C9, Azure, or local.
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Cloud9 and Azure use &lt;code&gt;process.env.PORT&lt;/code&gt;. If that exists, &lt;code&gt;port&lt;/code&gt; will be set approriately. Otherwise, port 1337 will be used for running locally.&lt;/p&gt;

&lt;p&gt;Next, add these lines which pertain to Azure:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;account = azure.ServiceClient.DEVSTORE_STORAGE_ACCOUNT;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;accountKey = azure.ServiceClient.DEVSTORE_STORAGE_ACCESS_KEY;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableHost = azure.ServiceClient.DEVSTORE_TABLE_HOST;

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(process.env.C9_PORT) { &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Test if we're running on Cloud9. Change these to your own credentials.
    &lt;/span&gt;&lt;span style="background: white; color: black"&gt;account = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'c9demo'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
    accountKey = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;redacted&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
    tableHost = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'http://table.core.windows.net'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableService = azure.createTableService(account, accountKey, tableHost);
&lt;/span&gt;&lt;span style="background: white; color: green"&gt;//tableService.logger = new azure.Logger(azure.Logger.LogLevels.DEBUG);

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;tableName = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'wines'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;; &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Name your table here.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Make sure everything still runs at this point. Be sure to add the modules we'll be using with &lt;code&gt;npm install&lt;/code&gt;. If you need to debug your connection to Azure, uncomment the &lt;code&gt;tableService.logger&lt;/code&gt; line. This will display lots of information in the console when you run the app.&lt;/p&gt;

&lt;p&gt;If the application runs, let's proceed. Inside &lt;code&gt;http.createServer()&lt;/code&gt;, add this as the first line of the callback:&lt;/p&gt;

&lt;pre&gt;if (req.url === '/favicon.ico') return;&lt;/pre&gt;

&lt;p&gt;Web browsers attempt to fetch favicons, and this line prevents our application from handling these requests.&lt;/p&gt;

&lt;p&gt;Now let's add a form for entering in details about the wine we're drinking. Remember that we're still inside &lt;code&gt;http.createServer()&lt;/code&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;res.writeHead(200, { &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Content-Type'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'text/html' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;});
res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;h1&amp;gt;Wine Notebook&amp;lt;/h1&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;form = &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;form action=&amp;quot;/addWine&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;Category&amp;quot;&amp;gt;Category: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;PartitionKey&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;Category&amp;quot;&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;Winery&amp;quot;&amp;gt;Winery: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;Winery&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;Winery&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;Variety&amp;quot;&amp;gt;Variety: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;Variety&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;Variety&amp;quot;&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;Vintage&amp;quot;&amp;gt;Vintage: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;Vintage&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;Vintage&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;AdditionalKey1&amp;quot;&amp;gt;Additional key 1: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;AdditionalKey1&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;AdditionalKey1&amp;quot;&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;AdditionalValue1&amp;quot;&amp;gt;Additional value 1: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;AdditionalValue1&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;AdditionalValue1&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;AdditionalKey2&amp;quot;&amp;gt;Additional key 2: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;AdditionalKey2&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;AdditionalKey2&amp;quot;&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;AdditionalValue2&amp;quot;&amp;gt;Additional value 2: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;AdditionalValue2&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;AdditionalValue2&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;AdditionalKey3&amp;quot;&amp;gt;Additional key 3: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;AdditionalKey3&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;AdditionalKey3&amp;quot;&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;AdditionalValue3&amp;quot;&amp;gt;Additional value 3: &amp;lt;/label&amp;gt;&amp;lt;input name=&amp;quot;AdditionalValue3&amp;quot; type=&amp;quot;text&amp;quot; id=&amp;quot;AdditionalValue3&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;label for=&amp;quot;Notes&amp;quot;&amp;gt;Notes: &amp;lt;/label&amp;gt;&amp;lt;textarea name=&amp;quot;Notes&amp;quot; rows=&amp;quot;6&amp;quot; cols=&amp;quot;30&amp;quot; id=&amp;quot;Notes&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Add&amp;quot; /&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+
        &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;/form&amp;gt;'
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;res.write(form + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;hr /&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Note that the &lt;code&gt;Content-Type&lt;/code&gt; header is &lt;code&gt;text/html&lt;/code&gt;, not &lt;code&gt;text/plain&lt;/code&gt; as you may have seen in other examples.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;AdditionalKey&lt;/code&gt; and &lt;code&gt;AdditionalValue&lt;/code&gt; fields are included to illustrate a fundamental concept in Azure Table Storage. If you think of Azure Tables as traditional relational database tables, you'll miss the real point that Azure Tables are collections of entities, which have key/value properties. There's no schema to adhere to, and entities can have differing properties in any given table.&lt;/p&gt;

&lt;p&gt;To further illustrate this point, we'll display our data in an unordered list. This emphasizes the schemaless key/value store nature of Azure Table Storage. If we displayed data in a table with columns and rows, you might continue to think of Azure Table Storage as just limited to that paradigm. Start by adding these lines:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: green"&gt;// read &amp;amp; display data from table
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query = azure.TableQuery.select().from(tableName);
tableService.queryEntities(query, entitiesQueriedCallback);&lt;/span&gt;&lt;/pre&gt;
The query will select all entities from our table. You can &lt;a href="https://gist.github.com/1813302"&gt;query for a single entity&lt;/a&gt; using a slightly different syntax. In that case, just pass &lt;code&gt;queryEntity()&lt;/code&gt; a &lt;code&gt;PartitionKey&lt;/code&gt; and &lt;code&gt;RowKey&lt;/code&gt; which uniquely identifies an entity, along with the table name and callback. You can also &lt;a href="https://gist.github.com/1813308"&gt;query for a set of entities&lt;/a&gt; using &lt;code&gt;where()&lt;/code&gt;. 

&lt;p&gt;Now lets add &lt;code&gt;entitiesQueriedCallback&lt;/code&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;entitiesQueriedCallback(error, serverEntities) {
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(error === &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) {
        res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;ul&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;for &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;index &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;in &lt;/span&gt;&lt;span style="background: white; color: black"&gt;serverEntities) {
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;li&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index].Winery);
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;form action=&amp;quot;/deleteWine&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;PartitionKey&amp;quot; value=&amp;quot;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index].PartitionKey + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;quot; /&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;RowKey&amp;quot; value=&amp;quot;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index].RowKey + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;quot; /&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Delete&amp;quot; /&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;/form&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;ul&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;for &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;prop &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;in &lt;/span&gt;&lt;span style="background: white; color: black"&gt;serverEntities[index]) {
                &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'id' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;|| prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Timestamp' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;|| prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'etag' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;||
                        prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'RowKey' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;|| prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'link' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;|| prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'updated'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;continue&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
                &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(prop === &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'PartitionKey'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) { &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// PartitionKey is 'red', 'white', 'rose', etc.
                    &lt;/span&gt;&lt;span style="background: white; color: black"&gt;res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;li&amp;gt;Category: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index][prop]);
                    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;continue&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
                }
                res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;li&amp;gt;' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ prop + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;': ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ serverEntities[index][prop]);
            }
            res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;/ul&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        }
        res.end(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'&amp;lt;ul&amp;gt;'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
    } &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;else &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
        res.end(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Could not query entities: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ error.code);
        console.log(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Could not query entities: ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ error.code);
    }
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This function is called by &lt;code&gt;tableService.queryEntities()&lt;/code&gt;. If the call to the database succeeded without an error, then the results are displayed in an unordered list. Again, this emphasizes the schemaless nature of Azure Table Storage. In a production application, you'll of course want to make this look better.&lt;/p&gt;

&lt;p&gt;First you'll notice an HTML form with two hidden input fields. These store an entity's &lt;code&gt;PartitionKey&lt;/code&gt; and &lt;code&gt;RowKey&lt;/code&gt;, which uniquely identify an entity and will be used by code to delete an entity. We'll visit this again later.&lt;/p&gt;

&lt;p&gt;Take a look at the &lt;code&gt;for&lt;/code&gt; loop. Entities contain a &lt;code&gt;Timestamp&lt;/code&gt; property inserted by Azure. We'll want to ignore this. We'll also want to ignore other system properties such as the etag.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;PartitionKey&lt;/code&gt; is used as the first list item. As covered earlier, entities with the same &lt;code&gt;PartitionKey&lt;/code&gt; will be stored together in Azure. Simply shard your data on various partition keys, and Azure will take care of moving other entities around to avoid database contention. For our wine application, the &lt;code&gt;PartitionKey&lt;/code&gt; is the type of wine, be it red, white, rose, or something else. This means that red wines will be stored separately from white wines, which would help with scaling if this application were to see heavy traffic.&lt;/p&gt;

&lt;p&gt;Make sure that the application still runs at this point. There's no data to display yet, however.&lt;/p&gt;

&lt;p&gt;Let's write code to handle the form submission from adding a wine:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(req.url == &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'/addWine' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;amp;&amp;amp; req.method.toLowerCase() == &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'post'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) {
    &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Read http://nodebeginner.org to learn more about formidable.
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;form = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black"&gt;formidable.IncomingForm();
    form.parse(req, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(err, fields, files) {
        res.writeHead(200, { &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'content-type'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'text/plain' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;});
        res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Received this via HTTP POST:\n\n'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        res.write(util.inspect({ fields: fields }) + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'\n\n'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        res.end(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Check console for status of adding this, and reload &amp;quot;/&amp;quot; to see it.'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine = fields;
        wine[&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'RowKey'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;] = uuid();
        wine[&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'TastedOn'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;] = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black"&gt;Date();
        &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Add additional keys and values to the entity, making sure they're not empty.  Then delete properties which
        // were parsed from the incoming form data.
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(fields.AdditionalKey1 !== &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;''&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) wine[fields.AdditionalKey1] = fields.AdditionalValue1;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(fields.AdditionalKey2 !== &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;''&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) wine[fields.AdditionalKey2] = fields.AdditionalValue2;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(fields.AdditionalKey3 !== &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;''&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) wine[fields.AdditionalKey3] = fields.AdditionalValue3;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;delete &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine.AdditionalKey1; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;delete &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine.AdditionalValue1;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;delete &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine.AdditionalKey2; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;delete &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine.AdditionalValue2;
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;delete &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine.AdditionalKey3; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;delete &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine.AdditionalValue3;
        tableService.insertEntity(tableName, wine, entityInsertedCallback);
    });
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;When you click the &amp;quot;Add&amp;quot; button, the form is posted back to /addWine and the above code is run. It uses a module called Formidable which handles all the tricky business of parsing an HTML form. This code displays the submitted fields with &lt;code&gt;util.inspect()&lt;/code&gt;. In production code, you'll probably want to redirect the user back to &amp;quot;/&amp;quot;.&lt;/p&gt;

&lt;p&gt;To add an entity to Azure Table Storage, simply create a JavaScript object with the properties you want to include. Each entity must be unique, so be certain to use a unique combination of &lt;code&gt;PartitionKey&lt;/code&gt;s and &lt;code&gt;RowKey&lt;/code&gt;s. Don't set the &lt;code&gt;Timestamp&lt;/code&gt; as that's done automatically. The above code uses &lt;code&gt;var wine = fields&lt;/code&gt; as a starting point. The &lt;code&gt;PartitionKey&lt;/code&gt; is actually a form field and is therefore already set. &lt;code&gt;wine['RowKey']&lt;/code&gt; is set to a UUID so that each entity is unique. Remember that the &lt;code&gt;PartitionKey&lt;/code&gt; in our example is just the type of wine, be it red, white, etc. You need a unique &lt;code&gt;RowKey&lt;/code&gt; to make the entity unique. &lt;code&gt;wine['TastedOn']&lt;/code&gt; is automatically set to the current date.&lt;/p&gt;

&lt;p&gt;The next few lines parse the additional keys and values. Remember that these are included to illustrate the schemaless nature of Azure Table Storage. In our app, perhaps a user wants to include a property about which restaurant they were in, or what they were eating at the time, or anything else which comes to mind.&lt;/p&gt;

&lt;p&gt;You can't add empty keys to an Azure table, so we check for that. If a key is not empty, that means a user typed something in. &lt;code&gt;wine[fields.AdditionalKey1] = fields.AdditionalValue1&lt;/code&gt; creates a property on the &lt;code&gt;wine&lt;/code&gt; object with the key and value being what the user typed in. After this, the &lt;code&gt;AdditionalKey&lt;/code&gt; and &lt;code&gt;AdditionalValue&lt;/code&gt; properties must be deleted, or else they'll be added to the entity also. Finally, the entity is inserted with a call to &lt;code&gt;insertEntity()&lt;/code&gt;. Try running the app and adding a wine. Reload '/' to see what's added. Play around with including additional properties. Again, an Azure table is just a collection of entities with various properties. Entities in a given table are not required to all have the same properties.&lt;/p&gt;

&lt;p&gt;Lastly, let's add code to handle deleting an entity.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(req.url == &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'/deleteWine' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;amp;&amp;amp; req.method.toLowerCase() == &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'post'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) {
    &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// delete a wine
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;form = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black"&gt;formidable.IncomingForm();
    form.parse(req, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(err, fields, files) {
        res.writeHead(200, { &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'content-type'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'text/plain' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;});
        res.write(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Received this via HTTP POST:\n\n'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        res.write(util.inspect({ fields: fields }) + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'\n\n'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        res.end(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;'Check console for status of deleting this, and reload &amp;quot;/&amp;quot; to see it.'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;wine = fields;
        tableService.deleteEntity(tableName, wine, entityDeletedCallback);
    });
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This is almost the same code as what we used for adding an entity. You simply create a JavaScript object with a &lt;code&gt;PartitionKey&lt;/code&gt; and &lt;code&gt;RowKey&lt;/code&gt;, and then pass it to &lt;code&gt;deleteEntity()&lt;/code&gt;. Note that instead of creating a new object with&lt;code&gt;var wine = fields&lt;/code&gt;, we could have simply passed in &lt;code&gt;fields&lt;/code&gt; to &lt;code&gt;deleteEntity()&lt;/code&gt; since &lt;code&gt;fields&lt;/code&gt; already contains the &lt;code&gt;PartitionKey&lt;/code&gt; and &lt;code&gt;RowKey&lt;/code&gt; we want to delete.&lt;/p&gt;

&lt;p&gt;If you want to modify an entity instead of deleting it, &lt;a href="https://gist.github.com/1813285"&gt;the code is the same except call &lt;code&gt;updateEntity()&lt;/code&gt; instead&lt;/a&gt;. Naturally, use a different callback. The take-home lesson is that to delete or modify an entity, simply create a JavaScript object with the appropriate &lt;code&gt;PartitionKey&lt;/code&gt; and &lt;code&gt;RowKey&lt;/code&gt; and then call &lt;code&gt;deleteEntity()&lt;/code&gt; or &lt;code&gt;updateEntity()&lt;/code&gt;. When displaying an entity you wish to update in an HTML form, simply use two hidden input fields to store the &lt;code&gt;PartitionKey&lt;/code&gt; and &lt;code&gt;RowKey&lt;/code&gt;. Of course, you'll have to validate that these values have not been tampered with before accepting them before passing your object to &lt;code&gt;deleteEntity()&lt;/code&gt; or &lt;code&gt;updateEntity()&lt;/code&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10325829" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Node-js/">Node.js</category></item><item><title>From UNIX to Windows: Run GNU commands on Windows with Gow</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/06/03/run-gnu-commands-on-windows-with-gow.aspx</link><pubDate>Sun, 03 Jun 2012 21:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10314470</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/06/03/run-gnu-commands-on-windows-with-gow.aspx#comments</comments><description>&lt;p&gt;The bulk of my career so far has been spent in the UNIX world on RISC workstations and Linux PCs.&amp;nbsp; When I switched to developing on the Microsoft stack a few years ago, it took a little time to get used to doing things differently from the command line.&amp;nbsp; I thought I&amp;rsquo;d document some useful tips here in my blog, and this post will be the first in a series.&amp;nbsp; To find related articles, click on the &lt;strong&gt;from-unix-to-windows&lt;/strong&gt; tag at the bottom of this article.&lt;/p&gt;
&lt;p&gt;There have been many flavors of UNIX throughout its history, since it dates all the way back to 1970.&amp;nbsp; Let&amp;rsquo;s just concentrate on Linux for now, strictly speaking a &lt;a href="http://en.wikipedia.org/wiki/Unix-like"&gt;UNIX-like&lt;/a&gt; operating system.&amp;nbsp; When we speak about a Linux distribution such as Fedora, we&amp;rsquo;re actually talking about two things: the Linux kernel and the GNU userland applications.&amp;nbsp; The GNU commands can run on any operating system which has the GNU system libraries, which can be ported as long as POSIX support is available.&amp;nbsp; For example, Nexenta combines the OpenSolaris kernel with GNU userland applications.&lt;/p&gt;
&lt;p&gt;In the Windows world, the &lt;a href="http://cygwin.com/"&gt;Cygwin&lt;/a&gt; project is a rather comprehensive implementation of lots of what we usually call Linux.&amp;nbsp; However, if all you need are common commands such as &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;gzip&lt;/code&gt;, and &lt;code&gt;tar&lt;/code&gt;, then take a look at &lt;a href="https://github.com/bmatzelle/gow/downloads"&gt;Gow: GNU on Windows&lt;/a&gt;.&amp;nbsp; As of version 0.5.0, 133 commands are included:&lt;/p&gt;
&lt;pre&gt;PS C:\Users\Matt&amp;gt; gow --list
Available executables:

 agrep, ansi2knr, basename, bash, bc, bison, bunzip2, bzip2,
 bzip2recover, cat, chgrp, chmod, chown, cksum, cmp, comm,
 compress, cp, csplit, curl, cut, cvs, dc, dd, df, diff,
 diff3, dircolors, dirname, dos2unix, du, egrep, env, expand,
 expr, factor, fgrep, flex, fmt, fold, fsplit, gawk, gclip,
 gfind, gow, gplay, grep, gsar, gunzip, gzip, head, id,
 indent, install, join, jwhois, less, lesskey, ln, logname,
 ls, m4, make, md5sum, mkdir, mkfifo, mknod, mv, mvdir,
 ncftp, nl, od, pageant, paste, patch, pathchk, pclip,
 plink, pr, printenv, printf, pscp, psftp, putty, puttygen,
 pwd, recode, rm, rman, rmdir, rsync, scp, sdiff, sed,
 seq, sftp, sh, sha1sum, shar, sleep, sort, split, stego,
 su, sum, sync, tac, tail, tar, tee, test, touch, tr,
 type, uname, unexpand, uniq, unix2dos, unrar, unshar,
 unzip, uudecode, uuencode, vim, wc, wget, whereis, which,
 whoami, xargs, yes, zcat, zip
&lt;/pre&gt;
&lt;p&gt;Here&amp;rsquo;s what &lt;a href="https://github.com/bmatzelle/gow"&gt;author Brent Matzelle has to say about it&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;Gow (Gnu On Windows) is the lightweight alternative to Cygwin. It uses a convenient Windows installer that installs about 130 extremely useful open source UNIX applications compiled as native win32 binaries. It is designed to be as small as possible, about 10 MB, as opposed to Cygwin which can run well over 100 MB depending upon options.&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/bmatzelle/gow/downloads"&gt;Installing and using Gow is very simple&lt;/a&gt;.&amp;nbsp; A directory containing the above commands will be added to your path, which can then be run from the command line.&amp;nbsp; Uninstalling GOW is also quite simple.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll eventually want to learn Powershell, but if you&amp;rsquo;re coming from UNIX and need to get something done quickly, Gow can be your friend.&amp;nbsp; For a taste of Powershell, try:&lt;/p&gt;
&lt;pre&gt;get-process | where-object {$_.WorkingSet -gt 20000000} | out-gridview&lt;/pre&gt;
&lt;p&gt;This displays a nice table of all processes with a &lt;a href="http://en.wikipedia.org/wiki/Working_set"&gt;working set&lt;/a&gt; greater than 20 MB, without resorting to screen scraping.&amp;nbsp; Cool stuff.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10314470" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/from_2D00_unix_2D00_to_2D00_windows/">from-unix-to-windows</category></item><item><title>How to get your app into the Windows Store</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/05/09/how-to-get-your-app-into-the-windows-store.aspx</link><pubDate>Wed, 09 May 2012 20:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10303449</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/05/09/how-to-get-your-app-into-the-windows-store.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;This post can also be reached via &lt;a href="http://bit.ly/windows8token"&gt;http://bit.ly/windows8token&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Windows 8 is coming in the near future. You can download, use it, and &lt;a href="http://blogs.msdn.com/b/matt-harrington/archive/2012/03/12/windows-8-resources-for-javascript-and-html5-developers.aspx"&gt;develop apps for it today&lt;/a&gt;.&amp;nbsp; As of May 2012, the Windows Store is not open for everyone to deploy.&amp;nbsp; However, we are looking for the first wave of great applications which highlight the power of Metro and Windows 8, especially from developers who want to get to market first and build their brand.&lt;/p&gt;
&lt;p&gt;In order to submit your application today you need a token.&amp;nbsp; This is something I can help you get.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a great application or game.&lt;/li&gt;
&lt;li&gt;Let me know about it by contacting me via &lt;a href="http://blogs.msdn.com/b/matt-harrington/contact.aspx"&gt;my blog&amp;rsquo;s contact form&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ll help you register so you can get your application through our Application Accelerator Labs, where the app will get reviewed to confirm it's complete and conforms to the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465424"&gt;Metro guidelines&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx"&gt;certification requirements&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a great opportunity to not only be first to market with your app, but also to get feedback from a Microsoft Services Engineer to make your app great. If you are serious about creating an application, this is a chance that you probably don&amp;rsquo;t want to pass up.&lt;/p&gt;
&lt;p&gt;In addition, our team is holding a series of events and office hours to help you.&amp;nbsp; We want to make sure you have what you need to be successful. Come learn more about how to build apps for Windows 8, or show up and build your app with one of our evangelists or others in the community.&lt;/p&gt;
&lt;p&gt;Windows Developer Camps (to learn about Windows 8 development):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redmond, WA.&amp;nbsp; May 11, 2012.&amp;nbsp; &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032507675&amp;amp;Culture=en-US"&gt;Register&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Denver, CO.&amp;nbsp; June 1, 2012.&amp;nbsp; &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032507677&amp;amp;Culture=en-US"&gt;Register&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Chandler, AZ.&amp;nbsp; June 8, 2012.&amp;nbsp; &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032507678&amp;amp;Culture=en-US"&gt;Register&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.devcamps.ms/windows"&gt;Other locations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows Application Accelerator Labs (to build your app):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redmond, WA.&amp;nbsp; May 15 - 17, 2012. &lt;a href="https://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032507920&amp;amp;IO=JMxNB5I5wwpdm%2fi5%2f7qf2g%3d%3d"&gt;Register&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mountain View, CA.&amp;nbsp; May 22 - 24, 2012. &lt;a href="https://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032507921&amp;amp;IO=JMxNB5I5wwoSznz3qP9Szg%3d%3d"&gt;Register&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that to get a Windows Store token, you&amp;rsquo;ll still need to &lt;a href="http://blogs.msdn.com/b/matt-harrington/contact.aspx"&gt;contact me&lt;/a&gt; to get your app reviewed.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10303449" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Event/">Event</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>Code samples for Metro interactions from the Windows 8 SDK</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/23/code-samples-for-metro-interactions-from-the-windows-8-sdk.aspx</link><pubDate>Mon, 23 Apr 2012 18:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10296732</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/23/code-samples-for-metro-interactions-from-the-windows-8-sdk.aspx#comments</comments><description>&lt;p&gt;Here are the 5 code samples from the Windows 8 SDK that I&amp;rsquo;ll be showing during my session at the Windows 8 Anchor Camp our team is holding today in Los Angeles.&amp;nbsp; I&amp;rsquo;ll update this post later with more details, but wanted to give people a resource they can turn to right now at today&amp;rsquo;s event.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Essential controls sample (&lt;a href="http://code.msdn.microsoft.com/windowsapps/Common-HTML-controls-and-09a72a24"&gt;HTML&lt;/a&gt;, &lt;a href="http://code.msdn.microsoft.com/windowsapps/Basic-Controls-29318599"&gt;XAML&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/windowsapps/Search-app-contract-sample-118a92f5"&gt;Search sample&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Source-App-d9bffd84"&gt;Sharing content source app sample&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/windowsapps/Toast-notifications-sample-52eeba29"&gt;Toast notifications sample&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/windowsapps/App-tiles-and-badges-sample-5fc49148"&gt;App tiles and badges sample&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10296732" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/javascript/">javascript</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/html5/">html5</category></item><item><title>How to share your Metro style application for Windows 8 with another developer</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/14/how-to-share-your-metro-style-windows-8-app-with-another-developer.aspx</link><pubDate>Sun, 15 Apr 2012 02:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10293834</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/14/how-to-share-your-metro-style-windows-8-app-with-another-developer.aspx#comments</comments><description>&lt;p&gt;If you&amp;rsquo;re writing a Metro style app for Windows 8, here&amp;rsquo;s how you can share it with another developer.&amp;nbsp; Note that both the source and destination machines need a valid development license.&amp;nbsp; Verify this with the PowerShell cmdlet &lt;code&gt;Get-WindowsDeveloperLicense&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In Visual Studio, choose &lt;strong&gt;Create App Package &lt;/strong&gt;under the &lt;strong&gt;Store&lt;/strong&gt; menu:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/3581.VS11_2D00_Create_2D00_App_2D00_Package_5F00_528303F4.png"&gt;&lt;img width="671" height="383" title="VS11 Create App Package" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" alt="VS11 Create App Package" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/3404.VS11_2D00_Create_2D00_App_2D00_Package_5F00_thumb_5F00_07236030.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Select &lt;strong&gt;Create a package to use locally only&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/7612.VS11_2D00_Create_2D00_App_2D00_Package_2D00_Wizard_5F00_0DD669B3.png"&gt;&lt;img width="567" height="387" title="VS11 Create App Package Wizard" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" alt="VS11 Create App Package Wizard" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/2818.VS11_2D00_Create_2D00_App_2D00_Package_2D00_Wizard_5F00_thumb_5F00_4276C5EE.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Make note of where the package will be saved, and then click &lt;strong&gt;Create&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/8322.VS11_2D00_Create_2D00_App_2D00_Package_2D00_location_5F00_578A6305.png"&gt;&lt;img width="648" height="563" title="VS11 Create App Package location" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" alt="VS11 Create App Package location" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/2134.VS11_2D00_Create_2D00_App_2D00_Package_2D00_location_5F00_thumb_5F00_240E540F.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Navigate to the package location, right-click on your package&amp;rsquo;s folder, and select &lt;strong&gt;Send to &amp;ndash;&amp;gt; Compressed (zipped) folder&lt;/strong&gt;.&amp;nbsp; You don&amp;rsquo;t need the &lt;em&gt;.APPXUPLOAD&lt;/em&gt; file.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/3000.Make_2D00_zip_2D00_from_2D00_app_2D00_package_5F00_000B1424.png"&gt;&lt;img width="716" height="497" title="Make zip from app package" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" alt="Make zip from app package" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/8473.Make_2D00_zip_2D00_from_2D00_app_2D00_package_5F00_thumb_5F00_1378282B.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Mail the zipfile to another developer, or otherwise transfer it to a second machine.&amp;nbsp; Remember that the destination machine must have a valid developer&amp;rsquo;s license.&amp;nbsp; Extract the zipfile, and then run &lt;code&gt;Add-AppxDevPackage.bat&lt;/code&gt; as Administrator.&amp;nbsp; The app will then show up in the target machine&amp;rsquo;s Start Screen.&lt;/p&gt;
&lt;p&gt;For more information, watch John Sheehan&amp;rsquo;s presentation &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-905C"&gt;Under the hood: installation and updates for Metro style apps&lt;/a&gt; from the September 2011 Build conference.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Screenshots made with &lt;a href="http://www.techsmith.com/snagit.html"&gt;Snagit by TechSmith&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10293834" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>Imagine Cup 2012: Vote for the People’s Choice</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/12/imagine-cup-2012-vote-for-the-people-s-choice.aspx</link><pubDate>Thu, 12 Apr 2012 18:43:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10293291</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/12/imagine-cup-2012-vote-for-the-people-s-choice.aspx#comments</comments><description>&lt;p&gt;We asked students from all over the world to come up with innovative uses of technology that would make the world a better place. They stepped up to the challenge, and the &lt;a href="https://www.facebook.com/MicrosoftTechStudent/app_170672609717521?app_data=%7B%27mtag%27%3A%27mattharr%27%7D"&gt;Imagine Cup US 2012&lt;/a&gt; competition was on.&lt;/p&gt;  &lt;p&gt;Imagine Cup is a global technology competition, enabling students worldwide to use technology to transform the world we live in. Every year, the Imagine Cup inspires eager students to shine, developing skills that will power their futures, and applying what they have learned to make a positive impact in the world and build a brighter future.&lt;/p&gt;  &lt;p&gt;Last year, over 325,000 students participated in Imagine Cup. Today, 22 teams from across the country have made it to the Imagine Cup US finals, developing solutions and providing awareness to issues that address&amp;#160; environmental stewardship, the worldwide obesity epidemic, and the plight of children in war-torn Africa.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Now it’s up to you: These teams need your votes to win the Imagine Cup People’s Choice award. &lt;/b&gt;The team with the most votes by May 19, 2012 will travel to the Imagine Cup Worldwide Finals in Sydney, Australia this July. &lt;a href="https://www.facebook.com/MicrosoftTechStudent/app_170672609717521?app_data=%7B%27mtag%27%3A%27mattharr%27%7D"&gt;Vote now&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Your vote is powerful. By helping select the Imagine Cup People’s Choice winner, you’ll not only be raising awareness for critical social issues, you’ll also be supporting the future of technology innovation here in the US.&lt;/p&gt;  &lt;p&gt;And of course there’s something in it for you, too.&lt;strong&gt; Every time you vote, you qualify to win prizes like a laptop, an Xbox, or a Windows Phone.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Visit the &lt;a href="https://www.facebook.com/MicrosoftTechStudent/app_170672609717521?app_data=%7B%27mtag%27%3A%27mattharr%27%7D"&gt;Imagine Cup US Facebook page&lt;/a&gt; to check out our US finalists and vote for your favorite—it’s fast and easy. And remember, the more often you vote, the more often you can win, so stop by every day.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10293291" width="1" height="1"&gt;</description></item><item><title>Windows 8 for JavaScript developers video from SFJS</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/02/windows-8-for-javascript-developers-video-from-sfjs.aspx</link><pubDate>Tue, 03 Apr 2012 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10290166</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/02/windows-8-for-javascript-developers-video-from-sfjs.aspx#comments</comments><description>&lt;p&gt;On March 15, 2012, I gave &lt;a href="http://www.meetup.com/jsmeetup/events/46991262/"&gt;a presentation at the San Francisco JavaScript meetup about Windows 8 development&lt;/a&gt;.&amp;nbsp; Thanks to &lt;a href="http://www.linkedin.com/in/daveedelhart"&gt;Dave Edelhart&lt;/a&gt;, here&amp;rsquo;s the video.&amp;nbsp; I wish there had been time to show more code and get into Visual Studio, but that will have to come in a later talk.&amp;nbsp; It&amp;rsquo;s exciting there were so many questions from the audience.&amp;nbsp; I&amp;rsquo;m also excited that this was the first time the majority of the audience had seen anything about Windows 8.&amp;nbsp; The presentation starts at 1 minute, 20 seconds.&lt;/p&gt;
&lt;p&gt;&lt;iframe height="315" src="http://www.youtube.com/embed/2Zokv29OEk4" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If anything I said wasn&amp;rsquo;t clear, please check these authoritative sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/b8/"&gt;Building Windows 8 blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/windowsstore/"&gt;Windows Store for developers blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Videos from the September 2011 &lt;a href="http://www.buildwindows.com/"&gt;Build conference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.windows.com/"&gt;Windows Dev Center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started developing your own Metro style app, check out my post called &lt;a href="http://blogs.msdn.com/b/matt-harrington/archive/2012/03/12/windows-8-resources-for-javascript-and-html5-developers.aspx"&gt;Windows 8 resources for JavaScript and HTML5 developers&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10290166" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/javascript/">javascript</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/html5/">html5</category></item><item><title>Create a Windows 8 image with recimg.exe to preserve your Desktop apps after a refresh</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/01/create-a-windows-8-refresh-image-with-recimg-exe.aspx</link><pubDate>Sun, 01 Apr 2012 20:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10289769</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/04/01/create-a-windows-8-refresh-image-with-recimg-exe.aspx#comments</comments><description>&lt;p&gt;Windows 8 supports two new ways to revert your system to an earlier state.&amp;nbsp; From the &lt;strong&gt;Settings&lt;/strong&gt; charm, access &lt;strong&gt;More PC settings&lt;/strong&gt; and then click &lt;strong&gt;General&lt;/strong&gt;.&amp;nbsp; Towards the bottom, you&amp;rsquo;ll see these two choices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Refresh your PC without affecting your files&lt;/strong&gt;.&amp;nbsp; This choice keeps your personal data, system settings, and Metro style applications.&amp;nbsp; Desktop applications will be removed, unless you create a custom image as I detail below.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reset your PC and start over&lt;/strong&gt;.&amp;nbsp; This choice is like a factory reset.&amp;nbsp; All of your personal files, Metro style apps, and Desktop apps will be removed.&amp;nbsp; You can optionally write random data to your drive for added security.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Use option 2 if you&amp;rsquo;re going to sell or give away your system.&amp;nbsp; All of your personal files will be erased.&amp;nbsp; The rest of this post is about option 1.&lt;/p&gt;
&lt;p&gt;Option 1, refreshing your PC, keeps your personal data and reinstalls Metro style applications.&amp;nbsp; Desktop apps will be removed, and their names will be placed in a file on your desktop called &lt;strong&gt;Removed Apps&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Reinstalling all of your Desktop apps can be time consuming, so Windows 8 offers a command called &lt;code&gt;recimg.exe&lt;/code&gt; to make this easier.&amp;nbsp; &lt;code&gt;recimg&lt;/code&gt; creates an image which is used by the refresh facility when restoring Windows.&amp;nbsp; Not only will your personal data and Metro style apps be saved, but so will Desktop apps you have installed at the time you create the image.&amp;nbsp; This can save you a lot of time.&lt;/p&gt;
&lt;p&gt;After installing Windows 8 on a new system, the first thing I do is install &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Visual Studio&lt;/a&gt; and Office.&amp;nbsp; I then do this as Administrator:&lt;/p&gt;
&lt;pre&gt;mkdir C:\RefreshImage
recimg /CreateImage C:\RefreshImage
recimg /ShowCurrent&lt;/pre&gt;
&lt;p&gt;Refreshing my PC will then preserve my Desktop apps.&amp;nbsp; Any Desktop apps I install after creating the image will not be copied over to the refreshed system.&amp;nbsp; However, the old system is preserved in &lt;em&gt;C:\Windows.old&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For more information, run &lt;code&gt;recimg /help&lt;/code&gt;. Also read the &lt;a href="http://blogs.msdn.com/b/b8/archive/2012/01/04/refresh-and-reset-your-pc.aspx"&gt;Refresh and reset your PC&lt;/a&gt; article by Desmond Lee on the Building Windows 8 blog.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10289769" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>How to create a bootable USB drive from an ISO image for UEFI systems</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/27/how-to-create-a-bootable-usb-drive-from-an-iso-image-for-uefi-systems.aspx</link><pubDate>Wed, 28 Mar 2012 06:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10288337</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/27/how-to-create-a-bootable-usb-drive-from-an-iso-image-for-uefi-systems.aspx#comments</comments><description>&lt;p&gt;At&amp;nbsp;the time this post is being written, March 2012, at least some UEFI systems don't boot to NTFS USB thumb drives.&amp;nbsp; These UEFI systems will only boot to FAT32 USB thumb drives.&amp;nbsp; I have no idea if this will change in the future.&amp;nbsp; The details of UEFI are outside the scope of what I typically deal with.&lt;/p&gt;
&lt;p&gt;There are several utilities for creating a bootable USB drive from an ISO image, but you&amp;rsquo;ll most likely end up with something formatted with NTFS.&amp;nbsp; This won&amp;rsquo;t boot on some UEFI systems.&amp;nbsp; Instead, right-click on your USB drive and select &amp;ldquo;Format&amp;hellip;&amp;rdquo;.&amp;nbsp; Ensure that FAT32 is selected as the file system and click &amp;ldquo;Start&amp;rdquo;.&amp;nbsp; You can also format a drive from the command line using &lt;code&gt;format&lt;/code&gt; or &lt;code&gt;diskpart&lt;/code&gt; if you like.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re on Windows 8, double-click your ISO image to mount it.&amp;nbsp; If you&amp;rsquo;re on earlier versions of Windows, use a 3rd party utility to mount the ISO.&amp;nbsp; Just search the web and you&amp;rsquo;ll find options.&amp;nbsp; Or, burn the ISO to a DVD and then mount it.&amp;nbsp; Once the ISO is mounted, copy all files and directories over to your newly formatted USB drive by dragging and dropping.&amp;nbsp; You can also do this from the command line using &lt;code&gt;robocopy&lt;/code&gt; or &lt;code&gt;xcopy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll then have a USB drive which will boot on UEFI systems.&amp;nbsp; It will also boot on systems which use a BIOS instead.&lt;/p&gt;
&lt;p&gt;I hope this saves people some time.&amp;nbsp; I spent quite a while wondering why I couldn&amp;rsquo;t get a USB drive to boot on one of my newer systems.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10288337" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>Windows 8 Event in Silicon Valley, April 4, 2012</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/22/windows-8-event-in-silicon-valley-april-4-2012.aspx</link><pubDate>Thu, 22 Mar 2012 16:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10286457</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/22/windows-8-event-in-silicon-valley-april-4-2012.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57/6675.apr_2D00_4_2D00_invitation.png"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57/6675.apr_2D00_4_2D00_invitation.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57-metablogapi/2311.apr_2D00_4_2D00_invitation_5F00_62B9ADF7.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Are you interested in experiencing the next great app platform opportunity, Windows 8? Do you want to learn how to get started building apps for this new platform?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;We are inviting the Silicon Valley startup community to a full-day, knockout, deep dive event taking place on our Silicon Valley Campus. Developers and designers alike will take the stage to show you how to take advantage of this new platform opportunity. Several startups will demo their brand new apps and talk about their early experiences developing for Windows 8, while the Microsoft team will provide attendees the opportunity to play with the platform and the tools needed to get started. Sessions will cover designing for the new Metro UI, building for the platform, and monetizing your apps.&lt;/p&gt;
&lt;blockquote&gt;&lt;b&gt;April 4, 2012 &lt;/b&gt; &lt;br /&gt;Registration: 12:00 PM &lt;br /&gt;Event: 1:00 PM-7:00 PM &lt;br /&gt;&lt;a href="http://www.microsoft.com/about/companyinformation/usaoffices/northwest/en/us/svc.aspx"&gt;Microsoft Silicon Valley&lt;/a&gt; &lt;br /&gt;1065 La Avenida, Building 1 &lt;br /&gt;Mountain View, CA 94043 &lt;br /&gt;
&lt;p&gt;(650) 693-4000&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Register here:&lt;/strong&gt; &lt;a href="http://introducingwindows8.eventbrite.com/"&gt;http://introducingwindows8.eventbrite.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agenda:&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;&lt;b&gt;Time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;&lt;b&gt;Topic&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;12:00 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Registration&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;1:00 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Welcome &amp;amp; Kick-Off&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Dan&amp;rsquo;l Lewin, Corporate Vice President, Strategic and Emerging Business Development&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;1:15 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Windows 8 Introduction, Keynote, Demo, &amp;amp; Metro UI App Design&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;2:15 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Break | Windows 8 Hack Stations&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;2:30 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Windows 8 Showcase Panel&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;3:15 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Windows 8 Marketplace Opportunity&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Robert Youngjohns, President, Microsoft North America&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;4:00 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Break | Windows 8 Hack Stations&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;4:15 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Build &amp;amp; Reimagine your App on Windows 8&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;5:00 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;VC &amp;amp; Entrepreneur Panel&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;5:45 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Closing Remarks &amp;amp; Next Steps&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="86"&gt;
&lt;p&gt;6:00 PM&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="543"&gt;
&lt;p&gt;Reception &amp;amp; Windows 8 Hack Stations&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Join us! You won't want to miss this first of its kind event, put on by Microsoft&amp;rsquo;s &lt;a href="http://www.microsoft.com/bizspark/"&gt;BizSpark&lt;/a&gt; program and Microsoft&amp;rsquo;s developer evangelism team.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10286457" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Event/">Event</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category></item><item><title>How to pronounce Segoe, the font or typeface</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/14/how-to-pronounce-segoe.aspx</link><pubDate>Wed, 14 Mar 2012 16:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10283018</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/14/how-to-pronounce-segoe.aspx#comments</comments><description>&lt;p&gt;In Windows 8 and Windows Phone, you&amp;rsquo;ll see widespread use of a typeface called Segoe.&amp;nbsp; I&amp;rsquo;ve always wondered exactly how to pronounce this.&amp;nbsp; It could be SEE-goh, see-GOH, SEG-oh, seg-OH, etc.&amp;nbsp; I took a look at its Wikipedia page, and learned that the International Phonetic Alphabet (IPA) pronunciation is &lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English"&gt;/&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English#Key"&gt;ˈ&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English#Key"&gt;s&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English#Key"&gt;iː&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English#Key"&gt;ɡ&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English#Key"&gt;oʊ&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:IPA_for_English"&gt;/&lt;/a&gt;.&amp;nbsp; According to my understanding of the IPA, I concluded that its pronunciation is SEE-goh, with emphasis on the first syllable.&amp;nbsp; It sounds a little like the English word &lt;em&gt;seagull&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;However, I often hear it pronounced seg-OH, with emphasis on the second syllable.&lt;/p&gt;
&lt;p&gt;Being the curious type that I am, I decided to do some detective work.&amp;nbsp; I poked around Bing and learned that the font is named after Segoe Road in Madison, Wisconsin.&amp;nbsp; On Yelp, I found a yoga studio which was near there and called them up.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Them: &amp;ldquo;Hello, this is Inner Fire Yoga.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Me: &amp;ldquo;Hello, my name is Matt Harrington, calling from California.&amp;nbsp; I have a strange request.&amp;nbsp; I see on Yelp that you&amp;rsquo;re near Segoe Road.&amp;nbsp; How do locals pronounce that name?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Them: &amp;ldquo;SEE-goh.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Me: &amp;ldquo;So it would sound funny if I pronounced it seg-OH?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Them: &amp;ldquo;Yes.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So there you have it.&amp;nbsp; The font, or more correctly the typeface,&amp;nbsp;was named after Segoe Road in Madison, Wisconsin, and locals definitely pronounce it SEE-go.&amp;nbsp; If English is your second language, start by learning to pronounce the English word &lt;em&gt;seagull&lt;/em&gt;, and then change the last part from &lt;em&gt;gull&lt;/em&gt; to &lt;em&gt;go&lt;/em&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10283018" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_phone/">windows-phone</category></item><item><title>Windows 8 resources for JavaScript and HTML5 developers</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/12/windows-8-resources-for-javascript-and-html5-developers.aspx</link><pubDate>Tue, 13 Mar 2012 06:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281822</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/03/12/windows-8-resources-for-javascript-and-html5-developers.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;This post can also be reached via &lt;a href="http://bit.ly/win8nextsteps"&gt;http://bit.ly/win8nextsteps&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re reading this blog post, there&amp;rsquo;s a good chance you just saw me give a presentation on Windows 8 development with JavaScript, and now you&amp;rsquo;re looking for more resources.&amp;nbsp; If instead you arrived here through a search engine, then welcome all the same.&lt;/p&gt;
&lt;p&gt;This post assumes you&amp;rsquo;re brand new to the Windows world.&amp;nbsp; I&amp;rsquo;ll tell you what to install and what to learn.&lt;/p&gt;
&lt;p&gt;First off, visit the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Windows Dev Center&lt;/a&gt; to download Windows 8 Consumer Preview.&amp;nbsp; I use the ISO version myself, and either burn a DVD or follow my colleague &lt;a href="http://blogs.msdn.com/b/danielegan/archive/2012/02/29/install-windows-8-from-usb.aspx"&gt;Daniel Egan&amp;rsquo;s instructions for making a bootable USB thumb drive&lt;/a&gt;.&amp;nbsp; You can install Windows directly on a PC, in a bootable VHD, or in a virtual machine.&amp;nbsp; The choice is yours.&lt;/p&gt;
&lt;p&gt;Once you have Windows 8 running, go back to the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Windows Dev Center&lt;/a&gt; to download the tools and SDK.&amp;nbsp; You&amp;rsquo;ll end up with Visual Studio 11 Express Edition, which is free.&amp;nbsp; Other editions of Visual Studio 11 can run on Windows 7, but the Express Edition only runs on Windows 8.&lt;/p&gt;
&lt;p&gt;Next install the sample app pack, also from the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200091047"&gt;Windows Dev Center&lt;/a&gt;.&amp;nbsp; This gives you several hundred megabytes of sample code.&amp;nbsp; While there, also consider downloading the design assets if you&amp;rsquo;ll be working with a designer who uses Photoshop.&lt;/p&gt;
&lt;p&gt;Now that you have Windows 8 and the developer tools installed, take a look at some online videos from the Build conference, which happened in September 2011 and was where Windows 8 &lt;em&gt;Developer&lt;/em&gt; Preview was unveiled.&amp;nbsp; This was an early version of Windows 8 suitable for developers.&amp;nbsp; Keep in mind that if you see content about Windows 8 development from before 29-Feb-2012, the author is most likely using the &lt;em&gt;Developer&lt;/em&gt; Preview and not the &lt;em&gt;Consumer&lt;/em&gt; Preview.&amp;nbsp; You may encounter differences between these two builds.&lt;/p&gt;
&lt;p&gt;Start with these &amp;ldquo;Big Picture&amp;rdquo; videos.&amp;nbsp; You can pick and choose among other videos I list later, but I wouldn&amp;rsquo;t skip these four:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/events/BUILD/BUILD2011/KEY-0001"&gt;Day 1 Keynote&lt;/a&gt; with Steven Sinofsky, Julie Larson-Green, Antoine Leblonde, Mike Angiulo, and Chris Jones.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/events/BUILD/BUILD2011/BPS-1004"&gt;8 Traits of Great Metro Style Apps&lt;/a&gt; with Jensen Harris&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/events/BUILD/BUILD2011/BPS-1005"&gt;Platform for Metro Style Apps&lt;/a&gt; with Ale&amp;scaron; Holeček and John Sheehan&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/events/BUILD/BUILD2011/BPS-1006"&gt;Tools for Building Metro Style Apps&lt;/a&gt; with Chris Sells and Kieran Mockford&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, take a look at concepts which are common across all development options (JavaScript/HTML5, .NET, and C++):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-874T"&gt;Lap Around the Windows Runtime&lt;/a&gt; with Martyn Lovell&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-203T"&gt;Async Everywhere: Creating Responsive APIs and Apps&lt;/a&gt; with Ben Kuhn&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-405T"&gt;Share: Your App Powers the Windows 8 Share Experience&lt;/a&gt; with Billie Sue Chafins and Steve Seixeiro&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-406T"&gt;Search: Integrating into the Windows 8 Search Experience&lt;/a&gt; with Priya Vaidyanathan&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-408T"&gt;Integrating with the Windows Device Experience&lt;/a&gt; with Marc Pottier&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-396T"&gt;Using Tiles and Notifications&lt;/a&gt; with Kip Olson&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-395T"&gt;Designing Metro Style: Principles and Personality&lt;/a&gt; with Samuel Moreau&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-391T"&gt;Designing Metro Style Apps That Are Touch-Optimized&lt;/a&gt; with Jan-Kristian Markiewicz and Kay Hofmeester&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-211T"&gt;Create Metro Style Apps Quickly with Built-In Controls&lt;/a&gt; with Paul Gusmorino&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-875T"&gt;Windows Runtime Internals: Understanding &amp;ldquo;Hello World&amp;rdquo;&lt;/a&gt; with Matt Merry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ve now got a solid foundation to build on.&amp;nbsp; Next, turn to these videos which dive deeper into JavaScript and HTML5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-740T"&gt;Metro Style Apps Using HTML5 From Start to Finish&lt;/a&gt; with Scott Dickens&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-533T"&gt;Using the Windows Runtime from JavaScript&lt;/a&gt; with Luke Hoban&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-501T"&gt;Introducing the Windows Libraries for JavaScript&lt;/a&gt; with Chris Tavares&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-527C"&gt;Building Metro Style Apps Using JavaScript&lt;/a&gt; with Chris Tavares&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-382T"&gt;What&amp;rsquo;s New With HTML5, JavaScript, and CSS3&lt;/a&gt; with John Hrvatin&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-486T"&gt;A Deep Dive into Expression Blend for Designing Metro Style Apps with HTML&lt;/a&gt; with Christian Schormann&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-209T"&gt;Build Polished Collection and List Apps in HTML5&lt;/a&gt; with Ryan Demopoulos&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-210T"&gt;Build Data-Driven Collection and List Apps using ListView in HTML5&lt;/a&gt; with James Clarke and Sam Spencer&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-206T"&gt;Bring Apps to Life with Metro Style Animations in HTML5&lt;/a&gt; with Dale Rogerson and Jason Beaumont&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-381T"&gt;Building Beautiful and Interactive Apps with HTML5 and CSS3&lt;/a&gt; with Ted Johnson&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-512T"&gt;The Web-to-Windows Journey: Turning your Web Assets into a Windows App&lt;/a&gt; with Rey Bango, Edgar Banguero, and Jerome Holman&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-476T"&gt;Code with Confidence: Dynamic Web Content in Metro Style Apps using HTML5&lt;/a&gt; with John Hazen&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-185T"&gt;Make Great Metro Style Apps That Are Touch-Optimized Using HTML5&lt;/a&gt; with Nick Waggoner and Reed Townsend&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-929T"&gt;Best Practices for Writing Safe and Secure Metro Style Apps using HTML5&lt;/a&gt; with David Weston and Kamen Moutafov&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-580T"&gt;Building Windows Runtime Sockets Apps&lt;/a&gt; with Peter Smith and Dave Thaler&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-373C"&gt;Building Real-time Web Apps with HTML5 WebSockets&lt;/a&gt; with Ravi Rao&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-873T"&gt;Designing Metro Style Apps Using CSS3&lt;/a&gt; with Christian Stockwell&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-514T"&gt;Debugging Your Metro Style Apps Using HTML&lt;/a&gt; with Erik Saltwell and Jeff Fisher&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-843T"&gt;Reaching More Customers with Accessible Metro Style Apps in HTML5&lt;/a&gt; with Guy Barker&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-212T"&gt;Stand Out with Styling in Your HTML App&lt;/a&gt; with Chris Jones and Phil Cupp&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/HW-177T"&gt;Building Great Networked Media Devices for "Play To" Apps&lt;/a&gt; with Edwin Heredia and Zane Salim&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-162T"&gt;Building High Performance Metro Style Apps Using HTML5&lt;/a&gt; with Mathias Jourdain&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-376T"&gt;Building Offline Access in Metro Style Apps and Websites using HTML5&lt;/a&gt; with Israel Hilerio&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-846T"&gt;Create Reusable Custom Metro Style Controls&lt;/a&gt; with Jeff Fisher&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-530T"&gt;Manual Testing of Windows Metro Style Apps Built Using HTML&lt;/a&gt; with Mathew Aniyan&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-386T"&gt;50 Performance Tricks to Make Your Metro Style Apps and Sites Using HTML5 Faster&lt;/a&gt; with Jason Weber&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-411T"&gt;Reach a Worldwide Audience by Building a World-Ready App&lt;/a&gt; with Kipling Knox&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-787C"&gt;Building a Sample Metro Style Canvas Paint App Using HTML&lt;/a&gt; with David Owens&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-379P"&gt;Building Responsive Apps and Sites with HTML5 Web Workers&lt;/a&gt; with Travis Leithead&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-384P"&gt;Anatomy of HTML5 Sites and Metro Style Apps Using HTML5&lt;/a&gt; with Tony Ross&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-551P"&gt;Programming SVG and Canvas Graphics in a Metro Style App Based on HTML5&lt;/a&gt; with Patrick Dengler&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-207T"&gt;Reach Your Customers&amp;rsquo; Devices with One Beautiful HTML5 User Interface&lt;/a&gt; with Markus Mielke and David Washington&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-803T"&gt;Progressively Enable the Mobile Web with ASP.NET MVC4, HTML5, and jQuery Mobile&lt;/a&gt; with Phil Haack&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-800T"&gt;Building Data-Driven HTML5 Apps with WCF RIA Services&lt;/a&gt; with Asad Khan and Dinesh Kulkarni&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are even more videos from Build, and it&amp;rsquo;s worth taking a look at other titles available.&amp;nbsp; Just head over to &lt;a href="http://www.buildwindows.com"&gt;http://www.buildwindows.com&lt;/a&gt;.&amp;nbsp; Also, training companies such as &lt;a href="http://www.pluralsight-training.net/"&gt;Pluralsight&lt;/a&gt; have created Windows 8 content.&lt;/p&gt;
&lt;p&gt;The following sites, updated daily, aren&amp;rsquo;t specific to HTML5 and JavaScript development.&amp;nbsp; However, they contain Windows 8 articles and general news about the Microsoft development world:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.cwa.me.uk/"&gt;Chris Alcock&amp;rsquo;s Morning Brew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.alvinashcraft.com/"&gt;Alvin Ashcraft&amp;rsquo;s Morning Dew&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lastly, and most importantly, add the &lt;a href="http://blogs.msdn.com/b/b8/"&gt;Building Windows 8&lt;/a&gt; blog to your feed reader.&amp;nbsp; Steven Sinofsky and the Windows team post there.&amp;nbsp; Consider it the final word on all things Windows 8.&lt;/p&gt;
&lt;p&gt;If you have any questions, the best place to turn is &lt;a href="http://forums.dev.windows.com"&gt;http://forums.dev.windows.com&lt;/a&gt;.&amp;nbsp; Microsoft employees make sure that all questions are answered there.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281822" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/windows_2D00_8/">windows-8</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/javascript/">javascript</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/html5/">html5</category></item><item><title>How to fix Node.js npm permission problems</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/23/how-to-fix-node-js-npm-permission-problems.aspx</link><pubDate>Thu, 23 Feb 2012 20:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10271744</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/23/how-to-fix-node-js-npm-permission-problems.aspx#comments</comments><description>&lt;p&gt;With &lt;code&gt;node&lt;/code&gt; version 0.6.10 and &lt;code&gt;npm&lt;/code&gt; version 1.1.0-3, you may run into this error when installing a module on Windows, not just the Azure module:&lt;/p&gt;
&lt;pre&gt;PS&amp;gt; &lt;strong&gt;npm install azure&lt;/strong&gt;
npm http GET https://registry.npmjs.org/azure
npm http 200 https://registry.npmjs.org/azure
npm http GET https://registry.npmjs.org/azure/-/azure-0.5.2.tgz
npm http 200 https://registry.npmjs.org/azure/-/azure-0.5.2.tgz
npm ERR! Could not unpack C:\Users\Matt\AppData\
  Roaming\npm-cache\azure\0.5.2\package.tgz 
  to C:\Users\Matt\AppData\Roaming\npm-cache\azure\0.5.2

npm ERR! Error: EPERM, operation not permitted 
  'C:\Users\Matt\AppData\Roaming\npm-cache\
  azure\0.5.2\___package.npm\package'
npm ERR!
npm ERR! &lt;span style="background: #ffff00;"&gt;Please try running this command again as root/Administrator.&lt;/span&gt;
npm ERR!
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files (x86)\\nodejs\\\\node.exe" 
  "C:\\Program Files (x86)\\nodejs\\node_modules\\npm\\bin\\
  npm-cli.js" "install" "azure"
npm ERR! cwd C:\Users\Matt\Documents\src\node
npm ERR! node -v v0.6.10
npm ERR! npm -v 1.1.0-3
npm ERR! path C:\Users\Matt\AppData\Roaming\npm-cache\
  azure\0.5.2\___package.npm\package
npm ERR! code EPERM
npm ERR! message EPERM, operation not permitted 
  'C:\Users\Matt\AppData\Roaming\npm-cache\
  azure\0.5.2\___package.npm\package'
npm ERR! errno {}
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Users\Matt\Documents\src\node\npm-debug.log
npm not ok
&lt;/pre&gt;
&lt;p&gt;It turns out that you don&amp;rsquo;t have to run the command again as Administrator, and doing so won&amp;rsquo;t fix the problem.&amp;nbsp; Try &lt;code&gt;npm cache clean&lt;/code&gt; first.&amp;nbsp; If that doesn&amp;rsquo;t fix things, take a look in &lt;code&gt;%APPDATA%\npm-cache&lt;/code&gt;, or if you&amp;rsquo;re using PowerShell, &lt;code&gt;$env:APPDATA\npm-cache&lt;/code&gt;.&amp;nbsp; After cleaning the cache, you may still be left with remnants.&amp;nbsp; Manually remove everything in that directory, and try again.&amp;nbsp; This has always fixed things for me.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10271744" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Node-js/">Node.js</category></item><item><title>Orchard CMS virtual meetup, Tuesday, March 6, 2012</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/21/orchard-cms-virtual-meetup-tuesday-march-6-2012.aspx</link><pubDate>Wed, 22 Feb 2012 05:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10270885</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/21/orchard-cms-virtual-meetup-tuesday-march-6-2012.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57/7446.orchard_2D00_cms.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-57/7446.orchard_2D00_cms.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Join us for an &lt;a href="http://www.orchardproject.net/"&gt;Orchard CMS&lt;/a&gt; developer&amp;rsquo;s meetup, which will be held online on Tuesday, March 6, 2012.&lt;/p&gt;
&lt;table style="width: 400px;" border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="163"&gt;&lt;strong&gt;Date:&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="237"&gt;Tuesday, March 6, 2012&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="163"&gt;&lt;strong&gt;Time:&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="237"&gt;8 AM Pacific, 4 PM UTC (&lt;a href="http://timeanddate.com/worldclock/fixedtime.html?msg=Orchard+CMS+virtual+meetup&amp;amp;iso=20120306T08&amp;amp;p1=224&amp;amp;ah=1"&gt;other timezones&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="163"&gt;&lt;strong&gt;Location:&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="237"&gt;&lt;a href="http://www.livestream.com/microsoftdevelopers"&gt;http://www.livestream.com/microsoftdevelopers&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="163"&gt;&lt;strong&gt;Register here (free):&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="237"&gt;&lt;a title="http://orchard-mar-2012.eventbrite.com/" href="http://orchard-mar-2012.eventbrite.com/"&gt;http://orchard-mar-2012.eventbrite.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bertrand Le Roy&lt;/strong&gt; will present on what&amp;rsquo;s new in Orchard version 1.4.&amp;nbsp; &lt;strong&gt;Matt Harrington&lt;/strong&gt; will demonstrate how to run Orchard on Azure using a &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200060643"&gt;3 month free trial&lt;/a&gt;.&amp;nbsp; There will be time for questions from the chatroom.&amp;nbsp; No prior experience with Orchard is necessary, but consider downloading &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200060617"&gt;WebMatrix&lt;/a&gt; beforehand to become familiar with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;&lt;span style="text-decoration: underline;"&gt;Important&lt;/span&gt;:&lt;/span&gt;&lt;/strong&gt; this blog page will be updated with any late breaking news.&amp;nbsp; Check here for any last minute details the day of the event.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://orchardproject.net/about"&gt;Bertrand Le Roy&lt;/a&gt;&lt;/strong&gt; started his professional developer career in 1982 when he published his first video game. He then spent a few years studying math and physics, got a Ph.D. and then went back to software development. He released in 2002 what was probably the first CMS to run on ASP.NET. A year later, he was hired by Microsoft&amp;rsquo;s ASP.NET team and moved to the US. He has worked on ASP.NET versions 2.0 to 4.0, ASP.NET Ajax, contributed to making jQuery an official part of the .NET developer&amp;rsquo;s tool chest, and represents Microsoft in the OpenAjax Alliance&amp;rsquo;s steering committee. In his spare time, he&amp;rsquo;s a gamer, a pretty good skier, a very mediocre golfer and he wonders who really reads bios.&amp;nbsp; He blogs at &lt;a href="http://weblogs.asp.net/bleroy/"&gt;http://weblogs.asp.net/bleroy/&lt;/a&gt; and is &lt;a href="http://twitter.com/#!/bleroy/"&gt;@bleroy&lt;/a&gt; on Twitter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matt Harrington&lt;/strong&gt;, yours truly, is a Developer Evangelist for Microsoft, and is based in San Francisco.&amp;nbsp; Coincidentally, like Bertrand I also have a background in physics.&amp;nbsp; An interest in F# brought me to Microsoft, and I&amp;rsquo;m also excited about Windows 8, Windows Phone, and Azure.&amp;nbsp; I blog at &lt;a href="http://blogs.msdn.com/b/matt-harrington/"&gt;http://blogs.msdn.com/b/matt-harrington/&lt;/a&gt; and am &lt;a href="http://twitter.com/#!/mh415"&gt;@mh415&lt;/a&gt; on Twitter.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10270885" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Event/">Event</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Orchard/">Orchard</category></item><item><title>MatterPort brings 3D reconstruction to the masses with Kinect</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/20/matterport-brings-3d-reconstruction-to-the-masses-with-kinect.aspx</link><pubDate>Mon, 20 Feb 2012 20:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10269980</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/20/matterport-brings-3d-reconstruction-to-the-masses-with-kinect.aspx#comments</comments><description>&lt;p&gt;With the recent release of the &lt;a href="http://www.microsoft.com/en-us/kinectforwindows/"&gt;Kinect for Windows&lt;/a&gt; hardware and SDK, I thought I&amp;rsquo;d highlight the cool work my friends Matt Bell and Dave Gausebeck have been doing at &lt;a href="http://matterport.com/"&gt;MatterPort&lt;/a&gt;.&amp;nbsp; In the early days of Kinect programming in late 2010, countless hobbyists came up with very clever hacks using skeletal tracking to do all sorts of things.&amp;nbsp; Some of my favorites are augmented reality applications which show people shooting fireballs or lasers from their hands.&amp;nbsp; Then there&amp;rsquo;s a whole class of hacks which use the Kinect to control robots or anything with a motor.&amp;nbsp; Great stuff.&lt;/p&gt;
&lt;p&gt;There are far fewer examples of using raw 3D data, like what MatterPort is working on:&lt;/p&gt;
&lt;p&gt;&lt;iframe height="315" src="http://www.youtube.com/embed/xKdfv6S7Sqo" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;In the not so distant past, 3D reconstructions required expensive hardware and rare expertise.&amp;nbsp; Now anyone with an inexpensive Kinect and MatterPort&amp;rsquo;s software can capture 3D models in just a few minutes.&amp;nbsp; Think of the opportunities for real estate agents, sculptors, fashion designers, industrial designers, carpenters, mechanical engineers, and hobbyists of all sorts.&amp;nbsp; Yes, they&amp;rsquo;re even working on a &lt;a href="http://matterport.com/hobbyist-edition/"&gt;hobbyist edition&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269980" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Kinect/">Kinect</category></item><item><title>How to use Node.js with the local Azure Storage Emulator</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/19/how-to-use-node-js-with-the-local-azure-storage-emulator.aspx</link><pubDate>Sun, 19 Feb 2012 20:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10269508</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/19/how-to-use-node-js-with-the-local-azure-storage-emulator.aspx#comments</comments><description>&lt;p&gt;As you may know, the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200086844"&gt;Azure SDK for Node.js&lt;/a&gt; includes a Storage Emulator for development purposes.&amp;nbsp; This lets you code against a local storage system using the Azure table, blob, and queue APIs rather than needing something configured in the public cloud.&amp;nbsp; Need to develop on your laptop while midair on a flight?&amp;nbsp; No problem.&lt;/p&gt;
&lt;p&gt;You can switch between using the local Storage Emulator and the public cloud by using environment variables.&amp;nbsp; Take a look at the open source SDK on GitHub, and you&amp;rsquo;ll see in &lt;a href="https://github.com/WindowsAzure/azure-sdk-for-node/blob/master/lib/services/serviceclient.js"&gt;serviceclient.js&lt;/a&gt; that several environment variables are parsed:&lt;/p&gt;
&lt;pre&gt;/*
* Used environment variables.
* @enum {string}
*/
ServiceClient.EnvironmentVariables = {
  AZURE_STORAGE_ACCOUNT: 'AZURE_STORAGE_ACCOUNT',
  AZURE_STORAGE_ACCESS_KEY: 'AZURE_STORAGE_ACCESS_KEY',
  AZURE_SERVICEBUS_NAMESPACE: 'AZURE_SERVICEBUS_NAMESPACE',
  AZURE_SERVICEBUS_ISSUER: 'AZURE_SERVICEBUS_ISSUER',
  AZURE_SERVICEBUS_ACCESS_KEY: 'AZURE_SERVICEBUS_ACCESS_KEY',
  AZURE_WRAP_NAMESPACE: 'AZURE_WRAP_NAMESPACE',
  HTTP_PROXY: 'HTTP_PROXY',
  HTTPS_PROXY: 'HTTPS_PROXY',
  ALL_PROXY: 'ALL_PROXY',
  &lt;span style="background: #ffff00;"&gt;EMULATED: 'EMULATED'&lt;/span&gt;
};
&lt;/pre&gt;
&lt;p&gt;If an environment variable called &lt;code&gt;EMULATED&lt;/code&gt; is set, the Azure module will use the Storage Emulator without you having to explicitly pass credentials to the storage service.&amp;nbsp; Here&amp;rsquo;s how you set it in PowerShell:&lt;/p&gt;
&lt;pre&gt;PS&amp;gt; $env:EMULATED = "&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;"
PS&amp;gt; ls env:EMULATED

Name                           Value
----                           -----
EMULATED                       &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Incidentally, &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;dir&lt;/code&gt; are just aliases to &lt;code&gt;Get-ChildItem&lt;/code&gt;.&amp;nbsp; You could also use &lt;code&gt;Set-Variable&lt;/code&gt; and &lt;code&gt;Get-Variable&lt;/code&gt;.&amp;nbsp; Once set, you can create a handle to the storage service without passing in any credentials.&amp;nbsp; Here&amp;rsquo;s how it looks for table storage:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; azure = require('azure');
&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; tableService = azure.createTableService();
&lt;/pre&gt;
&lt;p&gt;If you like, you can still pass in the credentials for the Storage Emulator without setting an environment variable.&amp;nbsp; The credentials are also defined in serviceclient.js.&amp;nbsp; Aaron Stannard has &lt;a href="http://www.aaronstannard.com/post/2012/02/06/How-to-Use-the-Azure-npm-Package-without-Windows-Azure.aspx"&gt;a blog post which shows you how&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want your Node application to run on your local machine and talk to a live Azure service in the public cloud, keep an eye out for a blog post I&amp;rsquo;ll be making next.&lt;/p&gt;
&lt;p&gt;You can automatically set environment variables by storing the commands in your PowerShell profile, which is simply a script which runs when PowerShell launches:&lt;/p&gt;
&lt;pre&gt;PS&amp;gt; $profile 
C:\Users\Matt\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

PS&amp;gt; test-path $profile
False

PS&amp;gt; mkdir $HOME\Documents\WindowsPowerShell
PS&amp;gt; notepad $profile
&lt;/pre&gt;
&lt;p&gt;Make sure you&amp;rsquo;ve enabled the running of scripts with &lt;code&gt;Set-ExecutionPolicy RemoteSigned&lt;/code&gt; first.&amp;nbsp; Run that as Administrator.&lt;/p&gt;
&lt;p&gt;Node applications on any platform can use the Azure module to talk to the public cloud, but the Storage Emulator is only available on Windows.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269508" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Node-js/">Node.js</category></item><item><title>How to enable logging between Node.js and Azure</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/18/how-to-enable-logging-between-node-js-and-azure.aspx</link><pubDate>Sun, 19 Feb 2012 00:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10269400</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/18/how-to-enable-logging-between-node-js-and-azure.aspx#comments</comments><description>&lt;p&gt;I&amp;rsquo;ve been playing with Node.js on Azure for the past couple of weeks.&amp;nbsp; In case you didn&amp;rsquo;t know, Node is a fully supported development option on Azure.&amp;nbsp; There&amp;rsquo;s an official open source SDK, which as of version 0.5.2 supports Azure tables, blobs, storage queues, ServiceBus queues, and ServiceBus topics.&amp;nbsp; You can even deploy to Azure from the &lt;a href="http://c9.io/"&gt;Cloud9 online IDE&lt;/a&gt; using a Mac.&amp;nbsp; If you're a Node developer and are looking for a cloud provider, you should take a look at Azure.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a lot of documentation on the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200086844"&gt;Node.js Developer Center&lt;/a&gt; for Azure, and the &lt;a href="https://github.com/WindowsAzure/azure-sdk-for-node"&gt;GitHub page for the SDK&lt;/a&gt;, but I don&amp;rsquo;t recall seeing how to enable logging as of the release date for version 0.5.2 of the SDK.&amp;nbsp; It&amp;rsquo;s quite simple:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;azure = require(&lt;span style="color: maroon;"&gt;'azure'&lt;/span&gt;);

&lt;span style="color: blue;"&gt;var &lt;/span&gt;tableService = azure.createTableService();
tableService.logger = &lt;span style="color: blue;"&gt;new &lt;/span&gt;azure.Logger(azure.Logger.LogLevels.DEBUG);

&lt;span style="color: blue;"&gt;var &lt;/span&gt;blobService = azure.createBlobService();
blobService.logger = &lt;span style="color: blue;"&gt;new &lt;/span&gt;azure.Logger(azure.Logger.LogLevels.DEBUG);

&lt;span style="color: blue;"&gt;var &lt;/span&gt;queueService = azure.createQueueService();
queueService.logger = &lt;span style="color: blue;"&gt;new &lt;/span&gt;azure.Logger(azure.Logger.LogLevels.DEBUG);
&lt;/pre&gt;
&lt;p&gt;All sorts of information will then show up in the console which you can use to get a better understanding of what&amp;rsquo;s happening behind the scenes.&amp;nbsp; Comment out the lines which set the &lt;code&gt;logger&lt;/code&gt; property to disable logging.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/Node-js/">Node.js</category></item><item><title>Learn about Windows Server 2008 R2 virtualization</title><link>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/10/learn-about-windows-server-2008-r2-virtualization.aspx</link><pubDate>Fri, 10 Feb 2012 17:48:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10266639</guid><dc:creator>Matt Harrington MSFT</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/b/matt-harrington/archive/2012/02/10/learn-about-windows-server-2008-r2-virtualization.aspx#comments</comments><description>&lt;p&gt;Virtualization is here to stay. It doesn&amp;rsquo;t matter if you're an IT Professional for a multinational company, or running a small business, chances are virtualization is making an impact on how you work. Developers are also leveraging virtualization to gain efficiencies, stabilize their test environments and more.&lt;/p&gt;
&lt;p&gt;Chris E. Avis, an IT Evangelist here at Microsoft, is posting a blog series on virtualization that you may find interesting. The series has a strong focus on delivering the skills required to take and pass the Microsoft Windows Server 2008 R2 Server Virtualization Exam (70-659).&amp;nbsp; Even if you aren&amp;rsquo;t interested in taking the exam, the information provided is invaluable to anyone that is just starting to use the Microsoft virtualization platform. Also planned is some deep dive technical information for those who already work with virtualization.&lt;/p&gt;
&lt;p&gt;Check out the series at his blog:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/b/chrisavis/archive/2012/01/28/passing-the-windows-server-2008-r2-server-virtualization-exam-70-659-part-1.aspx"&gt;Passing the Windows Server 2008 R2 Server Virtualization Exam (70-659) &amp;ndash; Part 1 &amp;ndash; Study Resources&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/b/chrisavis/archive/2012/02/06/passing-the-windows-server-2008-r2-server-virtualization-exam-70-659-part-2.aspx"&gt;Passing the Windows Server 2008 R2 Server Virtualization Exam (70-659) &amp;ndash; Part 2 &amp;ndash; Skills Measured&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/b/chrisavis/archive/2012/02/07/passing-the-windows-server-2008-r2-server-virtualization-exam-70-659-part-3.aspx"&gt;Passing the Windows Server 2008 R2 Server Virtualization Exam (70-659) &amp;ndash; Part 3 &amp;ndash; Installing and Configuring Host and Parent Settings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/b/chrisavis/archive/2012/02/08/passing-the-windows-server-2008-r2-server-virtualization-exam-70-659-part-4.aspx"&gt;Passing the Windows Server 2008 R2 Server Virtualization Exam (70-659) &amp;ndash; Part 4 &amp;ndash; Creating and Configuring Guest VMs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/b/chrisavis/archive/2012/02/10/passing-the-windows-server-2008-r2-server-virtualization-exam-70-659-part-5-i-m-a-developer-why-virtualize.aspx"&gt;Passing the Windows Server 2008 R2 Server Virtualization Exam (70-659) &amp;ndash; Part 5 &amp;ndash; I&amp;rsquo;m a Developer! Why Virtualize?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10266639" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/matt-harrington/archive/tags/virtualization/">virtualization</category></item></channel></rss>