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

<channel>
	<title>DamienG &#187; Microsoft</title>
	<atom:link href="http://damieng.com/blog/category/technology/microsoft/feed" rel="self" type="application/rss+xml" />
	<link>http://damieng.com</link>
	<description>A .NET developer in silicon valley</description>
	<lastBuildDate>Wed, 16 May 2012 22:46:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>My one-year check-in with my Windows Phone 7</title>
		<link>http://damieng.com/blog/2011/11/21/my-one-year-check-in-with-my-windows-phone-7?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=my-one-year-check-in-with-my-windows-phone-7</link>
		<comments>http://damieng.com/blog/2011/11/21/my-one-year-check-in-with-my-windows-phone-7#comments</comments>
		<pubDate>Tue, 22 Nov 2011 05:37:07 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[windows phone]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2258</guid>
		<description><![CDATA[It&#8217;s been almost a year since I bit the Windows Phone 7 bullet and put my iPhone 3G away. As a long-time Mac fan (our house is nothing but Macs) I wasn&#8217;t sure I&#8217;d last&#8230; Contact &#38; calendar management Contact and calendar management is truly awesome as I wrote about previously. With the latest mango ]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been almost a year since I <a href="http://damieng.com/blog/2010/12/26/three-weeks-with-windows-phone-7-a-mac-users-perspective">bit the Windows Phone 7 bullet and put my iPhone 3G away</a>. As a long-time Mac fan (our house is nothing but Macs) I wasn&#8217;t sure I&#8217;d last&#8230;</p>
<h3>Contact &amp; calendar management</h3>
<p>Contact and calendar management is truly awesome as I wrote about previously. With the latest mango release Twitter and LinkedIn get brought into this unified system and messages that start with a text message can switch in and out of Facebook and Live Messenger as available.</p>
<p>What has this meant? Over the last year I&#8217;ve barely had to maintain contacts. Whenever I need to get hold of someone the information is there. If I want to see what they&#8217;re doing, it&#8217;s there. You can pin people to your start menu so having it automatically pick up a photo from a service is another bonus.</p>
<p>My Windows Phone is better for this than any other system I&#8217;ve used including my desktops.</p>
<h3>Gorgeous user interface</h3>
<p>The metro user interface is beautiful to use. It&#8217;s clear, fluid and fast and makes using the phone a breeze. You can see why Microsoft are adopting a similar user interface for their upcoming <a href="http://www.engadget.com/2011/09/09/xbox-live-fall-2011-dashboard-update-preview-bing-search-voice/">Xbox dashboard</a> and seeing how far they can push the concept in <a href="http://channel9.msdn.com/Blogs/BUILD-Conference-Highlights/Behind-the-Windows-8-UI">Windows 8</a>.</p>
<p>Such a bright fast user interface works best on the AMOLED displays such as that on the Focus &#8211; the LCD refresh rates on the HD7 for example seem to struggle with scrolling resulting in a shimmering on the screen.</p>
<h3>Tasty Mango</h3>
<ul>
<li><b>Maps</b> now includes both turn-by-turn directions (although you have to tap the screen after each one) and a useful Scout function that shows you nearby places to eat and visit.</li>
<li><b>Multitasking</b> is a breeze, just double-tap the back button and visually pick the image showing the app you want to switch to. Not all apps support this yet but it&#8217;s getting better.</li>
<li><b>Voice</b> has been underplayed &#8211; it&#8217;s like a mini Siri that can do a few things by voice activation such as calling people, finding places with Bing, opening applications and sending text messages. Just hold the Windows key to activate and speak :)</li>
<li><b>Power saver</b> is a life-saver and something that Apple should be copying given recent iOS battery issues. It turns off wireless, email checking etc. either when you know battery is going or automatically when low and gets you through the tough spots.</li>
<li><b>Background music</b> means not only can you play music in background with the built-in Zune stuff but even third party apps like Spotify can too! The controls and track names will appear on the lock screen and slide in anywhere you adjust the volume.</li>
</ul>
<h3>Hardware choice</h3>
<p>I currently own a <a href="http://www.samsung.com/us/mobile/cell-phones/SGH-I917ZKAATT">Samsung Focus</a> on AT&amp;T and regularly get to use both a <a href="http://www.htc.com/www/smartphones/htc-hd7/">HTC HD7</a> on T-Mobile and a <a href="http://www.htc.com/www/smartphones/htc-7-trophy/">HTC 7 Trophy</a> on Verizon for testing.</p>
<p>Having a <a href="http://en.wikipedia.org/wiki/List_of_Windows_Phone_devices">choice of hardware is great</a> &#8211; you can pick the screen size (from 3.5&#8243; to 4.7&#8243;), type, speed (1GHz to 1.5GHz) and specifications including slide-out keyboards, microSD expansion slots, a waterproof model and up to a 13.2 megapixel camera.</p>
<p>The negative side of having choice is that all the devices I&#8217;ve used have a combination of matt and shiny plastics none of which have the same quality feeling as the iPhone 4&#8242;s aluminum and glass. The LCD displays and the Super AMOLED with it&#8217;s <a href="http://en.wikipedia.org/wiki/PenTile_matrix_family">PenTile display</a> also don&#8217;t look as gorgeous as the iPhone retina display and has a sort of dithered effect with some solid colors when viewed closely.</p>
<p>Here&#8217;s hoping the <a href="http://www.bgr.com/2011/11/21/nokia-lumia-800-review/">Nokia Lumia 800</a> raises the bar.</p>
<h3>Most favorite apps available</h3>
<p>The thing that really made the iPhone were apps. The good news is the best ones are also on Windows Phone 7 too often making better use of the display through the metro style they adopt.</p>
<style text="text/css">.horiz { margin: 0; padding: 0; list-style-type: none } .horiz li { margin: 0; padding: 1px; display: inline }</style>
<ul class="horiz">
<li><a href="http://www.windowsphone.com/en-US/apps/48195fb4-ee0e-e011-9264-00237de2db9e"><img title="Amazon Kindle" src="http://catalog.zune.net/v3.2/en-US/apps/48195fb4-ee0e-e011-9264-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Amazon Kindle" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/db21927d-f292-e011-986b-78e7d1fa76f8"><img title="Evernote" src="http://catalog.zune.net/v3.2/en-US/apps/db21927d-f292-e011-986b-78e7d1fa76f8/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Evernote" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/82a23635-5bd9-df11-a844-00237de2db9e"><img title="Facebook" src="http://catalog.zune.net/v3.2/en-US/apps/82a23635-5bd9-df11-a844-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Facebook" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/7dc02baf-a7d6-df11-a844-00237de2db9e"><img title="Flixster" src="http://catalog.zune.net/v3.2/en-US/apps/7dc02baf-a7d6-df11-a844-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Flixster" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/26cf3302-469f-e011-986b-78e7d1fa76f8"><img title="foursquare" src="http://catalog.zune.net/v3.2/en-US/apps/26cf3302-469f-e011-986b-78e7d1fa76f8/primaryImage?width=95&amp;height=95&amp;resize=true" alt="foursquare" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/ff971299-eed8-df11-a844-00237de2db9e"><img title="IMDB" src="http://catalog.zune.net/v3.2/en-US/apps/ff971299-eed8-df11-a844-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="IMDB" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/c3a509cd-61d6-df11-a844-00237de2db9e"><img title="Netflix" src="http://catalog.zune.net/v3.2/en-US/apps/c3a509cd-61d6-df11-a844-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Netflix" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/ca8d6603-a9ae-4a05-8643-baad091ecdd1"><img title="Spotify" src="http://catalog.zune.net/v3.2/en-US/apps/ca8d6603-a9ae-4a05-8643-baad091ecdd1/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Spotify" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/0b792c7c-14dc-df11-a844-00237de2db9e"><img title="Twitter" src="http://catalog.zune.net/v3.2/en-US/apps/0b792c7c-14dc-df11-a844-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="Twitter" /></a></li>
<li><a href="http://www.windowsphone.com/en-US/apps/dcbb1ac6-a89a-df11-a490-00237de2db9e"><img title="YouTube" src="http://catalog.zune.net/v3.2/en-US/apps/dcbb1ac6-a89a-df11-a490-00237de2db9e/primaryImage?width=95&amp;height=95&amp;resize=true" alt="YouTube" /></a></li>
</ul>
<p>There are of course many extra <a href="www.windowsphone.com/marketplace">great applications and games available in the marketplace</a> and games usually count towards your Xbox LIVE gamerscore :)</p>
<p>Some notable omissions still exist including Pandora (can play on the site though) and Skype (only a matter of time given Microsoft&#8217;s acquisition).</p>
<h3>Some cool extras</h3>
<h4>Hidden features</h4>
<ul>
<li><strong>Calendar</strong> can skip between months and years in month mode &#8211; just tap the month for a selector</li>
<li><strong>Calculator</strong> can turn into a scientific one when rotated left and a programmer one when rotated right</li>
</ul>
<p>You can also check and tweak all sorts of settings via the <a href="http://www.addictivetips.com/mobile/what-is-windows-phone-7-diagnosis-menu-how-to-tweak-your-wp7-phone/">diagnostic options</a>.</p>
<h4>Microsoft&#8217;s extra free apps</h4>
<p>Microsoft put together a bunch of slick small free apps that perfectly complement the metro style look and feel. They include:</p>
<ul>
<li><a href="http://www.windowsphone.com/en-US/apps/9abcf2c6-19db-df11-a844-00237de2db9e">World Clock</a> &#8211; Lets you setup a number of clocks around the world. Useful if you often converse with people in other time zones.</li>
<li><a href="http://www.windowsphone.com/en-US/apps/2cb7cda1-17d8-df11-a844-00237de2db9e">Tranlsator</a> &#8211; Text translation tool that also pronounces translations between English, French, German, Italian and Spanish.</li>
<li><a href="http://www.windowsphone.com/en-US/apps/ace44e54-1dd8-df11-a844-00237de2db9e">Weather</a> &#8211; Simple and convenient weather application that supports multiple locations.</li>
<li><a href="http://www.windowsphone.com/en-US/apps/0f69cc30-1bd8-df11-a844-00237de2db9e">Unit Converter</a> &#8211; Translate between various lengths, areas, volume, capacity etc.</li>
<li><a href="http://www.windowsphone.com/en-US/apps/7f056db6-17d8-df11-a844-00237de2db9e">Stocks</a> &#8211; Keep track of your stocks and the indexes.</li>
<li><a href="http://www.windowsphone.com/en-US/apps/f681c513-15d8-df11-a844-00237de2db9e">Shopping List</a> &#8211; Simple shopping list management.</li>
</ul>
<h3>The niggley bits</h3>
<p>While most of the WP7 experience is great there are some rough edges that even Mango hasn&#8217;t yet sorted out.</p>
<h4>Overly sensitive buttons</h4>
<p>It&#8217;s actually great having a back button and prevents wasting screen on a back button like iOS does. The problem however is that both the back and search buttons are overly sensitive. It&#8217;s difficult to hold the phone in one hand and use it without your thumb hitting the pesky back button. It&#8217;s unfortunately something even the Xbox 360 slim picked up with the eject mechanism which is suitably annoying when putting away a controller.</p>
<p><b>Microsoft should add code to limit button presses to a distinct no-touch, touch for 0.4s, no-touch process.</b></p>
<h4>Volume control</h4>
<p>For some reason the phone has only one volume control that is shared by both applications and the ring-tone so if you&#8217;re the sort of person who like your phone low and your music loud you&#8217;re going to be constantly shifting back-and-forth and in my case that results in either embarrassing rings when it should be silent and silent rings when it should be working.</p>
<p><b>The volume control needs to be context sensitive. When in an app or the background music player is active adjust the audio volume otherwise adjust ringer volume.</b></p>
<h4>Equalizer settings</h4>
<p>There&#8217;s no sound equalizer settings so if you don&#8217;t like the sound coming from your speakers or headphones you&#8217;re stuck with it.</p>
<p><b>Build in a system-wide equalizer that at least affects the background music player.</b></p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2011/11/21/my-one-year-check-in-with-my-windows-phone-7/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Behind the scenes at xbox.com &#8211; RSS enabling web marketplace</title>
		<link>http://damieng.com/blog/2011/07/07/behind-the-scenes-at-xbox-com-rss-enabling-web-marketplace?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=behind-the-scenes-at-xbox-com-rss-enabling-web-marketplace</link>
		<comments>http://damieng.com/blog/2011/07/07/behind-the-scenes-at-xbox-com-rss-enabling-web-marketplace#comments</comments>
		<pubDate>Thu, 07 Jul 2011 20:05:44 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2178</guid>
		<description><![CDATA[A number of people were requesting additional RSS feeds for the xbox.com web marketplace. (We had just one that included all new arrivals) Looking across our site as the various lists of products we display today the significant views are: Browse games by department Search results Promotions (e.g. Deal of the week) Game detail (shows ]]></description>
			<content:encoded><![CDATA[<p>A number of people were requesting additional RSS feeds for the xbox.com web marketplace. (We had just one that included all new arrivals)</p>
<p>Looking across our site as the various lists of products we display today the significant views are:</p>
<ul>
<li>Browse games by department</li>
<li>Search results</li>
<li>Promotions (e.g. Deal of the week)</li>
<li>Game detail (shows downloads available beneath it)</li>
<li>Avatar item browse</li>
</ul>
<p>These views also have sorting options and a set of filters available for things like product type, game genre, content rating etc.</p>
<p>So we had a couple of options:</p>
<ol>
<li>Write controller actions that expose the results of specific queries as RSS</li>
<li>Introduce a mechanism whereby any of our product result pages can render as RSS including any user-defined filtering</li>
</ol>
<p>Our web marketplace is written in ASP.NET MVC (like most of xbox.com) so while option 1 sounds simpler MVC really helps us make option 2 more attractive by way of a useful feature called ActionFilters that let us jump in and reshape the way existing actions behave.</p>
<h3>ActionFilters</h3>
<p><a href="http://msdn.microsoft.com/en-us/library/gg416513%28VS.98%29.aspx">ActionFilters</a> can be applied to either to an individual action method on a controller or to the controller class itself which applies it to all the actions on that controller. They provide hooks into the processing pipeline where you can jump in and perform additional processing.</p>
<p>The most interesting events are:</p>
<ul>
<li>OnActionExecuting</li>
<li>OnActionExecuted</li>
<li>OnResultExecuting</li>
<li>OnResultExecuted</li>
</ul>
<div>We&#8217;re going to hook in to the OnActionExecuted step &#8211; this is because we always want to run after the code in the controller action has executed but before the ActionResult has done it&#8217;s work &#8211; i.e. before page or RSS rendering.</div>
<h3>Writing our ActionFilter</h3>
<p>The first thing we want to do is identify that a request wants the RSS version. One way is to read the accepts header and switch when it requests mime/type but this can be a little trickier to test,  another is to append a query parameter on the url which is very easy to test.</p>
<p>Once we&#8217;ve identified the incoming request should be for RSS we need to identify the data we want to turn into RSS and repurpose it.</p>
<p>All the views we identified at the start of this post share a common rendering mechanism and each view model subclasses from one of our base models. For simplicity though we&#8217;ll imagine an interface that just exposes an IEnumerable&lt;Product&gt; property.</p>
<pre><code><strong>public class</strong> RssEnabledAttribute : ActionFilterAttribute
{
    <strong>public override void</strong> OnActionExecuted(ActionExecutedContext filterContext) {
        <strong>var</strong> viewModel = filterContext.Controller.ViewData.Model <strong>as</strong> IProductResultViewModel;
        if (viewModel == <strong>null</strong>)
            <strong>return</strong>;

        <strong>var</strong> rssFeedTitle = FeedHelper.MakeTitle(viewModel.Results);
        filterContext.Controller.ViewData.Add("RssFeedTitle", rssFeedTitle);

        <strong>var</strong> format = filterContext.RequestContext.HttpContext.Request.QueryString["format"];
        <strong>if</strong> (format == "rss" &amp;&amp; rssFeedTitle != <strong>null</strong>) {
            <strong>var</strong> urlHelper = <strong>new</strong> UrlHelper(filterContext.RequestContext);
            <strong>var</strong> url = QueryStringUtility.RemoveQueryStringParameter(filterContext.RequestContext.HttpContext.Request.Url.ToString(), "format");
            <strong>var</strong> feedItems = FeedHelper.GetSyndicationItems(viewModel.Results, urlHelper);
            filterContext.Result = FeedHelper.CreateProductFeed(rssFeedTitle, viewModel.Description, <strong>new</strong> Uri(url), feedItems);
        }

        <strong>base</strong>.OnActionExecuted(filterContext);
    }
}</code></pre>
<p>This class relies on our FeedHelper class to achieve three things it needs:</p>
<ol>
<li><strong>MakeTitle</strong> takes the request details &#8211; i.e. which page, type of products, filtering and sorting is selected and makes a title by re-using our breadcrumbs</li>
<li><strong>GetSyndicationItems</strong> takes the IEnumerable&lt;Product&gt; and turns it into IEnumerable&lt;SyndicationItem&gt; by way of a foreach projecting Product into SyndicationItem with some basic HTML formatting, combining the product image and setting the correct category (with a yield thrown in for good measure)</li>
<li><strong>CreateProductFeed</strong> then creates a Syndication feed with the appropriate Copyright and Language set and chooses the formatter &#8211; in our case <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.rss20feedformatter.aspx">RSS 2.0</a> but could easily be <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.atom10feedformatter.aspx">Atom 1.0</a>, e.g.</li>
</ol>
<pre><code><strong>public static</strong> SyndicationFeedResult CreateProductFeed(<strong>string</strong> title, <strong>string</strong> description, Uri link, IEnumerable&lt;SyndicationItem&gt; syndicationItems)
{
    <strong>var</strong> feed = new SyndicationFeed(title, description, link, syndicationItems) {
        Copyright = new TextSyndicationContent(String.Format(Resources.FeedCopyrightFormat, DateTime.Now.Year)),
        Language = CultureInfo.CurrentUICulture.Name
    };

    <strong>return new</strong> FeedResult(<strong>new</strong> Rss20FeedFormatter(feed, <strong>false</strong>));
}</code></pre>
<p>The <a href="http://damieng.com/blog/2010/04/26/creating-rss-feeds-in-asp-net-mvc">FeedResult</a> class is a simple one that takes the built-in .NET SyndicationFeed class and wires it up to MVC by implementing an ActionResult that writes the XML of the SyndicationFeedFormatter into the response as well as setting the application/rss+xml content type and encoding.</p>
<h3>Advertising the feed in the head</h3>
<p>Now that we have the ability to serve up RSS we need to let browsers know it exists.</p>
<p>The ActionFilter we wrote above needs to know the title of the RSS feed regardless of whether it is rendering the RSS (which needs a title) or rendering the page (which will need to advertise the RSS title) so it always calculates it and then puts it into the ViewData dictionary with the key RssFeedTitle.</p>
<p>Now finally our site&#8217;s master page can check for the existence of that key/value pair and advertise it out with a simple link tag:</p>
<pre><code><strong>var</strong> rssFeedTitle = ViewData["RssFeedTitle"] <strong>as string</strong>;
<strong>if</strong> (!String.IsNullOrEmpty(rssFeedTitle)) { %&gt;
&lt;link rel="alternate" type="application/rss+xml" title="&lt;%:rssFeedTitle%&gt;" href="&lt;%:Url.ForThisAsRssFeed%&gt;" /&gt;
&lt;% }</code></pre>
<p>This code requires just one more thing &#8211; a very small UrlHelper which will append &#8220;format=rss&#8221; to the query string (taking into account whether there existing query parameters or not).</p>
<p>The result of this is we can now just add [RssEnabled] in front of any controller or action to turn on RSS feeds for that portion of our marketplace! :)</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2011/07/07/behind-the-scenes-at-xbox-com-rss-enabling-web-marketplace/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Three weeks with Windows Phone 7 &#8211; a Mac users perspective</title>
		<link>http://damieng.com/blog/2010/12/26/three-weeks-with-windows-phone-7-a-mac-users-perspective?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=three-weeks-with-windows-phone-7-a-mac-users-perspective</link>
		<comments>http://damieng.com/blog/2010/12/26/three-weeks-with-windows-phone-7-a-mac-users-perspective#comments</comments>
		<pubDate>Sun, 26 Dec 2010 17:20:02 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1785</guid>
		<description><![CDATA[It&#8217;s been a few weeks since I took up Microsoft&#8217;s employee offer of a free Windows Phone 7 (when you renew a 2 year contract) and combined it with AT&#38;T&#8217;s offer of buy-one-get-one-free for my wife. So how have things been going? Physical Compared to the iPhone 3G the Focus is much more comfortable. The ]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a few weeks since I took up Microsoft&#8217;s employee offer of a free Windows Phone 7 (when you renew a 2 year contract) and combined it with AT&amp;T&#8217;s offer of buy-one-get-one-free for my wife.</p>
<p>So how have things been going?</p>
<h3>Physical</h3>
<p>Compared to the iPhone 3G the Focus is much more comfortable.</p>
<p>The larger screen size means a wider and taller phone but with less surround it&#8217;s not unwieldy &#8211; far from it. In fact the phone sits far more comfortably in my hand than the iPhone did. This is partly because it&#8217;s a better match for the size of my hand, partly because it&#8217;s a little lighter but mostly I think because the bevel is a lot more subtle and less steep and awkward than the iPhone&#8217;s shiny-pebble inspired design.</p>
<p>On the flip side it does look and feel a little cheaper and less solid but a small part of that is because the back of the phone flips off like many other allowing you access to the battery, sim and memory expansion slot. The dedicated back and home buttons below the screen help keep the display clear of chrome and give the apps the space they need.</p>
<p>The major disappointment for me here is the screen. While it is very bright and has great contrast if, like me, you hold it rather close to your face you can see a dithering pattern caused by the unusual LED subpixel arrangement called <a href="http://en.wikipedia.org/wiki/PenTile_Matrix_Family">PenTile</a> on every colour except green. I&#8217;ve learnt to hold it a little father away as the text rendering is very nice otherwise but compared to a friends iPhone 4 the screen is a letdown.</p>
<h3>User interface</h3>
<p>Until you&#8217;ve used the Zune-inspired interface (part of an overall design strategy called Metro) it&#8217;s a little hard to put it into words. Static screenshots certainly don&#8217;t do it justice as it&#8217;s all about movement and flow in a way other devices aren&#8217;t.</p>
<p>Starting from a tiled home page that gives you a peek into your mail, messages, people and games through a gorgeous combination of animation, text and imagery that keeps the page feeling fresh and alive &#8211; a spirit that is carried through the rest of the device &#8211; not just with the built-in screens and features but also into many third-party apps (more on that soon).</p>
<p>In a way it feels like a window onto a bigger world behind it instead of a subset of that world crammed onto a small screen. It&#8217;s like the difference between a mobile web browser that scales in and out on a whole page versus a mobile-optimized page that lacks detail and finesse.</p>
<p>As many will know my wife and I are primarily based on Apple technology but even after a week with the Focus my wife announced (with a slightly sad face) that her iPhone 3GS felt old &#8211; even with iOS 4.1 on it. I have to admit the same feeling. Sure the iPhone is cure but the icon-and-list approach with the odd red circle to indicate some activity now lacks engagement.</p>
<p>Part of Microsoft&#8217;s advertising campaign has been the get-in-get-out approach and the home page and email works really well here. So much so that it&#8217;s broken my 3 year ritual almost instantly in that I now check my email on my phone each morning when I get up instead of using the laptop to do the same. If I can find a good Google Reader app then the laptop might not open until I get to work.</p>
<p>I had an initial worry when I first turned it on as there were a bunch of AT&amp;T applications and tiles installed however it let me remove all the ones I don&#8217;t want or use (e.g. U-Verse) Score +1 for consumers over providers :)</p>
<h3>Mac integration</h3>
<p>I&#8217;m in a minority among friends as I actually like iTunes. It sorts, it plays, it lets me get audiobooks, podcasts and legal music quick and fast. I&#8217;ve also used it to rip a fair number of my own tracks from CD and bolstered my collection with tracks from Amazon MP3 sometimes (like their $3.99 Tron: Legacy deal). Sure I wish it allowed plug-ins for different music formats &#8211; I have a soft spot for chipmusic &#8211; but apart from that it&#8217;s been quite pain free.</p>
<p>iTunes however only likes to play with iPods, iPads and iPhones. Other companies have hooked their devices in unofficially in the past and Apple have been sure to quickly break it.</p>
<p>Thankfully Microsoft haven&#8217;t let the Mac fans out in the cold and provide the <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1fe7ea0f-3ad6-4137-8397-d412a3792c33">Windows Phone 7 Connector for Mac</a>.</p>
<p>The software does an okay job at sending music and videos from your iTunes library over to your USB connected phone although obviously DRM-protected content isn&#8217;t going to work.</p>
<p>What was disappointing however is even &#8220;Purchased music&#8221; from iTunes won&#8217;t actually play on the Windows Phone even though it syncs. I&#8217;m assuming this is a bug as there isn&#8217;t any DRM here (that is marked &#8220;Protected music&#8221;) and the file format is Dolby&#8217;s own AAC not Apple&#8217;s so I don&#8217;t see why it shouldn&#8217;t work.</p>
<p>It also won&#8217;t sync your Mac&#8217;s Address Book and Calendar&#8217;s directly however there is a way to do this quite easily indirectly &#8211; see below.</p>
<h3>Contacts</h3>
<p>Enter your Facebook name and password and it will fill your contacts from Facebook with each getting their own &#8216;what&#8217;s new&#8217; etc. Like most people this isn&#8217;t exactly what I want but I took the opportunity to prune 100 people I never speak to &#8211; an option also exists to only supplement existing contacts on the phone with their Facebook pictures and feeds.</p>
<p>It also helpfully pulled in my Gmail contacts and in the cases where I have a contact card in GMail for somebody on Facebook did a good job of joining them up. Some it seems were automatic possibly based on email addresses and full names. Others had recommendation when I went to join that were always correct and in a handful of cases I just had to tell it which ones to join up manually because they had changed their name on Facebook.</p>
<p>In some cases I merged three cards for a single person &#8211; their semi-public Facebook profile and photo, their private telephone numbers from GMail and their semi-public Windows Live details for messenger and Xbox.</p>
<p>Finally I added my Outlook/Exchange account &#8211; all worked flawlessly and for each account you get to choose whether to bring in contacts and calendars and in most cases mail (but not for Facebook).</p>
<p>The result of all this is that my phone is now the best contact list I have on any device. It combines them beautifully in a way no other device I&#8217;ve owned has and not once in the three weeks since I set it up has it got confused, lost details or had sync problems.</p>
<p>Very sweet&#8230; unless of course your primary contact information is your Mac&#8217;s Address Book as any Mac-owning iPhone owners will be.</p>
<h3>Getting Address Book contacts onto Windows Phone</h3>
<p>Please forgive the SEO-tuned heading but I didn&#8217;t find any useful information online and want to share this simple technique with others :)</p>
<p>You&#8217;ll need a GMail account to make this work (it also works with Google Apps for Domains too), simply:</p>
<ol>
<li>Copy any important details from your GMail contacts manually into Address Book if you need to</li>
<li>Wipe out your GMail contacts (you could always backup with Export first if you want but don&#8217;t re-import)</li>
<li>Open the Address Book application and head into Preferences</li>
<li>Choose the option to sync &#8220;On My Mac&#8221; with Google and hit configure to enter your GMail details</li>
<li>Delete the GMail profile from your Windows Phone 7 and then re-add it (otherwise it won&#8217;t sync phone numbers)</li>
</ol>
<p>This means you&#8217;ll have your Mac contacts at your fingertip in GMail so make sure your GMail account has a secure password and <a href="http://mail.google.com/support/bin/static.py?hl=en&amp;page=checklist.cs">follow their steps to ensure your account is well protected</a>.</p>
<h3>Reception &amp; call quality</h3>
<p>I was nervous about getting back into bed with AT&amp;T for another two years. I need coverage at work and home as I don&#8217;t have a dedicated phone at either location and many times AT&amp;T had left me with only a single bar to get by.</p>
<p>I am somewhat confused that I get 3-4 bars on the Samsung Focus in both locations and I&#8217;ve yet to have the chopping up or disconnecting of calls that I attributed to AT&amp;T when using my iPhone 3G. Stranger still is that when I have had 1 bar (one place in my apartment) I am actually still able to make calls without it cutting out or dropping. My iPhone taught me never to try with 1 bar&#8230;</p>
<p>Visual voicemail is gone as I guess that was an Apple exclusive but I&#8217;ve only had a handful of voicemail messages over the last 2 years so I doubt i&#8217;ll miss it.</p>
<h3>Camera</h3>
<p>The camera seems pretty good and has some HDR and anti-shake options as standard as well as limited bunch of image effects. It also does video but I haven&#8217;t tried that yet.</p>
<h3>Marketplace</h3>
<p>You sign into this with your Xbox LIVE credentials and once you&#8217;re there it&#8217;s not a far off experience from the iTunes store except that it has a lot less apps. While it&#8217;s good you don&#8217;t have to wade through so much junk to find good stuff there are some omissions too like Hulu and for many people they&#8217;ll be missing Angry Birds and their favorite games and apps. I also haven&#8217;t found a good Windows Phone-like navigation app although the built-in Bing app is no worse than the Google Maps app on the iPhone that occasionally gave me nonsensical (drive into the ocean) or wrong directions (Seattle hotel being off by 2 blocks).</p>
<p>On the plus side some favourite sites have their own apps and they have fully embraced the metro user interface to provide a great experience &#8211; these include IMDB, eBay, Facebook, Twitter.</p>
<p>The bad side here is that the marketplace you&#8217;ll be presented with is the one your Xbox LIVE account is associated with and once you&#8217;ve set-up your phone YOU CAN&#8217;T CHANGE IT!</p>
<p>For me this means I can&#8217;t get Netflix on my device as my Xbox account is set to USA. Previously Xbox didn&#8217;t let you change your country but recently introduced a facility to let you migrate your account to one of several new countries they now support.  I&#8217;m hopeful they&#8217;ll let more general country changes next year as I&#8217;m not giving up my 8800 gamer score and cool gamertag (damieng) without a fight.</p>
<h3>Summary</h3>
<p>There are a whole bunch of extra things I haven&#8217;t covered here including the Bing maps, Office docs, Xbox LIVE, Zune and the various apps. I&#8217;ll either update this article or post another :)</p>
<p>I haven&#8217;t switched my iPhone on in three weeks. There are a few apps I do miss but they&#8217;re also on my iPad.</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2010/12/26/three-weeks-with-windows-phone-7-a-mac-users-perspective/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Six great new features at Xbox.com</title>
		<link>http://damieng.com/blog/2010/10/20/great-new-features-at-xbox-com?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=great-new-features-at-xbox-com</link>
		<comments>http://damieng.com/blog/2010/10/20/great-new-features-at-xbox-com#comments</comments>
		<pubDate>Wed, 20 Oct 2010 09:49:09 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1765</guid>
		<description><![CDATA[It&#8217;s been quite a while since xbox.com had a major update and today sees the launch of the new version with a clean new look and a whole host of new features that our teams here at LIVE engagement have been working on. There are a whole great new set of features, my favourites are ]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been quite a while since xbox.com had a major update and today sees the launch of the new version with a clean new look and a whole host of new features that our teams here at LIVE engagement have been working on.</p>
<p>There are a whole great new set of features, my favourites are below&#8230; note that some of these are not available in non-LIVE locales.</p>
<p><img style="float: right;" title="xbox.com Avatar Editor" src="http://images.damieng.com/blog/AvatarEditor.png" alt="Showing the xbox.com Avatar Editor in action" /></p>
<h3>1. Avatars</h3>
<p>Avatars are no longer just for the console but are escaping out onto the web and Windows Phone 7. With the new <a href="http://live.xbox.com/AvatarEditor">Avatar Editor</a> you can create your own avatar or modify your existing one with a new easy-to-use interface from your browser.</p>
<p>The new Avatar Marketplace lets you search and find cool items for your avatar to wear and try them on right-there in the search pages. Head on in either by <a href="http://marketplace.xbox.com/Products/BrowseAvatarGameStyle">game</a> or by<a href="http://marketplace.xbox.com/Products/BrowseAvatarLifestyle"> lifestyle (brands)</a> (click the little grid icon to see sub-brands such as your own university&#8217;s sports team!).</p>
<p>Because these guys are 3D animated they require <a href="http://www.silverlight.net/">Silverlight</a> to be installed on your machine (the streaming videos on xbox.com also require it)</p>
<h3>2. Marketplace search &amp; results</h3>
<p>A brand new search function means we get <a href="http://marketplace.xbox.com/en-US/Search?query=modern%20call%20of%20duty">much better results than before</a>, fuzzy matching and some dynamic filtering options that appear on the left-hand side letting you dig down into family friendly games (e.g. bt game ratings).</p>
<p>Another cool use is to search for your <a href="http://marketplace.xbox.com/en-US/Search?query=%20nirvana&amp;Game=66acd000-77fe-1000-9115-d80245410869">favourite band and see what tracks and packs</a> they have available. Then head to the game filter on the left to see only the ones that work with your game (e.g. Rock Band, Guitar Hero, Dance Central etc!)</p>
<p>When you visit the product detail page it now shows the images and streaming video inline (goodbye popups) as well as <a href="http://marketplace.xbox.com/Product/Mothership-Zeta/00000000-0000-400c-80cf-001a425307d5">game add-ons</a> <a href="http://marketplace.xbox.com/Product/Take-Me-Out/00000000-0000-400c-80cf-022745410829">showing which games they work with</a> &#8211; useful for those music track packs!</p>
<h3>3. Hand-picked promotions</h3>
<p>Our content teams can now put together collections of themed hand-picked games, add-ons etc. that you can you filter, sort and explore from such as the new <a href="http://marketplace.xbox.com/promotion/kinectgames">Kinect games</a> or <a href="http://marketplace.xbox.com/promotion/familygames">family-friendly fun</a> (these will be per-region so might not exist in yours yet).</p>
<p>Gold and family gold members should keep an eye out for Gold exclusive offers or pricing!</p>
<h3>4. Streamlined account creation</h3>
<p>It&#8217;s now easier-than-ever to sign up for a free Xbox live account. Less questions, less steps and we&#8217;ll give you a randomly-generated gamertag you can change for free later when you&#8217;ve had chance to decide on the perfect name for your game-playing alter-ego. (We&#8217;ve seen some fun auto-generated ones during the development cycle including FirmJunk,</p>
<p><img style="float: right;" title="Compare games" src="http://images.damieng.com/blog/compare.png" alt="Comparing games on Xbox.com" /></p>
<h3>5. Compare games with your friends</h3>
<p>Okay, you could compare games before but the new UI is better and there&#8217;s a cool hidden feature that lets you compare against multiple people at the same time.</p>
<p>To do this head into My Xbox&#8217;s Game Center and choose a friend to compare with. Now, notice the url at the top of the page? Put a comma after it and another gamertag to see three&#8230; or another comma and a gamertag to see all four (the maximum) side-by-side.</p>
<h3>6. Family center</h3>
<p>New with this update is the <a href="http://www.xbox.com/live/familypack">Gold Family Pack</a> which lets you get four gold subscriptions for $99 a year and lots of cool family features including play time reports, gifting points, allowances etc.</p>
<p>There are a whole host of extra features to be seen at xbox.com including mobile-to-web gaming, improved messaging, simplified UI etc. so go check them out!</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2010/10/20/great-new-features-at-xbox-com/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>LINQ to SQL changes in .NET 4.0</title>
		<link>http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=linq-to-sql-changes-in-net-40</link>
		<comments>http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40#comments</comments>
		<pubDate>Mon, 01 Jun 2009 22:15:29 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[linq-to-sql]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40</guid>
		<description><![CDATA[People have been asking via Twitter and the LINQ to SQL forums so here’s a list I put together on a number of the changes made for 4.0. 25 Aug 2009 – Updated with additional changes, some of which are new in beta 2. Change list Performance Query plans are reused more often by specifically ]]></description>
			<content:encoded><![CDATA[<p>People have been asking via Twitter and the LINQ to SQL forums so here’s a list I put together on a number of the changes made for 4.0.</p>
<p class="new"><strong>25 Aug 2009</strong> – Updated with additional changes, some of which are new in beta 2. </p>
<h3>Change list</h3>
<h4>Performance</h4>
<ul>
<li>Query plans are reused more often by specifically defining text parameter lengths (when connecting to SQL 2005 or later)</li>
<li>Identity cache lookups for primary key with single result now includes query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefault </li>
<li>Reduced query execution overhead when DataLoadOptions specified (cache lookup considers DataLoadOptions value equivalency)</li>
</ul>
<h4>Usability</h4>
<ul>
<li>ITable&lt;T&gt; interface for additional mocking possibilities </li>
<li>Contains with enums automatically casts to int or string depending on column type </li>
<li>Associations can now specify non-primary-key columns on the other end of the association for updates </li>
<li>Support list initialization syntax for queries </li>
<li>LinqDataSource now supports inherited entities </li>
<li>LinqDataSource support for ASP.NET query extenders added </li>
</ul>
<h4>Query stability</h4>
<ul>
<li>Contains now detects self-referencing IQueryable and doesn&#8217;t cause a stack overflow </li>
<li>Skip(0) no longer prevents eager loading </li>
<li>GetCommand operates within SQL Compact transactions </li>
<li>Exposing Link&lt;T&gt; on a property/field is detected and reported correctly </li>
<li>Compiled queries now correctly detect a change in mapping source and throw </li>
<li>String.StartsWith, EndsWith and Contains now correctly handles ~ in the search string (regular &amp; compiled queries)</li>
<li>Now detects multiple active result sets (MARS) better </li>
<li>Associations are properly created between entities when using eager loading with Table-Valued Functions (TVFs) </li>
<li>Queries that contain sub-queries with scalar projections now work better </li>
</ul>
<h4>Update stability</h4>
<ul>
<li>SubmitChanges no longer silently consumes transaction rollback exceptions </li>
<li>SubmitChanges deals with timestamps in a change conflict scenario properly </li>
<li>IsDbGenerated now honors renamed properties that don&#8217;t match underlying column name </li>
<li>Server-generated columns and SQL replication/triggers now work instead of throwing SQL exception </li>
<li>Improved binding support with the MVC model binder</li>
</ul>
<h4>General stability</h4>
<ul>
<li>Binary types equate correctly after deserialization </li>
<li>EntitySet.ListChanged fired when adding items to an unloaded entity set </li>
<li>Dispose our connections upon context disposal (ones passed in are untouched) </li>
</ul>
<h4>Database&#160; control</h4>
<ul>
<li>DeleteDatabase no longer fails with case-sensitive database servers</li>
</ul>
<h4>SQL Metal</h4>
<ul>
<li>Foreign key property setter now checks all affected associations not just the first </li>
<li>Improved error handling when primary key type not supported </li>
<li>Now skips stored procedures containing table-valued parameters instead of aborting process </li>
<li>Can now be used against connections that use AttachDbFilename syntax </li>
<li>No longer crashes when unexpected data types are encountered </li>
</ul>
<h4>LINQ to SQL class designer</h4>
<ul>
<li>Now handles a single anonymously named column in SQL result set </li>
<li>Improved error message for associations to nullable unique columns </li>
<li>No longer fails when using clauses are added to the partial user class </li>
<li>VarChar(1) now correctly maps to string and not char </li>
<li>Decimal precision and scale are now emitted correctly in the DbType attributes for stored procedures &amp; computed columns</li>
<li>Foreign key changes will be picked up when bringing tables back into the designer without a restart </li>
<li>Can edit the return value type of unidentified stored procedure types</li>
<li>Stored procedure generated classes do not localize the word “Result” in the class name</li>
<li>Opening a DBML file no longer causes it to be checked out of source control</li>
<li>Changing a FK for a table and re-dragging it to the designer surface will show new FK’s</li>
</ul>
<h4>Code generation (SQL Metal + LINQ to SQL class designer)</h4>
<ul>
<li>Stored procedures using original values now compiles when the entity and context namespaces differ </li>
<li>Virtual internal now generates correct syntax </li>
<li>Mapping attributes are now fully qualified to prevent conflicts with user types </li>
<li>KnownTypeAttributes are now emitted for DataContractSerializer with inheritance </li>
<li>Delay-loaded foreign keys now have the correct, compilable, code generated </li>
<li>Using stored procedures with concurrency no longer gets confused if entities in different namespace to context </li>
<li>ForeignKeyReferenceAlreadyHasValueException is now thrown if any association is loaded not just the first </li>
</ul>
<h3></h3>
<h3>Potentially breaking changes</h3>
<p>We worked very hard to avoid breaking changes but of course any potential bug fix is a breaking change if your application was depending on the wrong behavior. The ones I specifically want to call out are:</p>
<h4>Skip(0) is no longer a no-op</h4>
<p>The special-casing of 0 for Skip to be a no-op was causing some subtle issues such as eager loading to fail and we took the decision to stop special casing this. This means if you had syntax that was invalid for a Skip greater than 0 it will now also be invalid for skip with a 0. This makes more sense and means your app would break on the first page now instead of subtlety breaking on the second page. Fail fast :)</p>
<h4>ForeignKeyReferenceAlreadyHasValue exception</h4>
<p>If you are getting this exception where you weren’t previously it means you have an underlying foreign key with multiple associations based on it and you are trying to change the underlying foreign key even though we have associations loaded.Best thing to do here is to set the associations themselves and if you can’t do that make sure they aren’t loaded when you want to set the foreign key to avoid inconsistencies.</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40/feed</wfw:commentRss>
		<slash:comments>83</slash:comments>
		</item>
		<item>
		<title>LINQ to SQL next steps</title>
		<link>http://damieng.com/blog/2008/10/31/linq-to-sql-next-steps?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=linq-to-sql-next-steps</link>
		<comments>http://damieng.com/blog/2008/10/31/linq-to-sql-next-steps#comments</comments>
		<pubDate>Sat, 01 Nov 2008 00:15:14 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[linq-to-sql]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1082</guid>
		<description><![CDATA[There has been a flurry of posts and comments in the last 24 hours over the future of LINQ to SQL so I thought it would be interesting to provide some information on what the LINQ to SQL team have been up to and what we’re working on for .NET Framework 4.0. A little background ]]></description>
			<content:encoded><![CDATA[<p>There has been a flurry of posts and comments in the last 24 hours over the future of LINQ to SQL so I thought it would be interesting to provide some information on what the LINQ to SQL team have been up to and what we’re working on for .NET Framework 4.0.</p>
<h3>A little background</h3>
<p>LINQ was a new feature in .NET 3.5 that provides a store-agnostic query language syntax using a provider model.</p>
<p>As part of that initiative the C# team delivered LINQ to SQL – a LINQ provider to SQL Server with additional update and access management via DataContext and mapping tools such as the designer and SQL Metal. The result is a great lightweight solution that is easy to get started with and a good data access solution where your database and objects are closely aligned.</p>
<p>Meanwhile Data Programmability worked on an initiative to provide abstraction between conceptual and physical models of databases to allow applications to operate independently of the database vendor and underlying physical schema. LINQ support was also added in the form of LINQ to Entities and it shipped with it’s management tools in .NET 3.5 SP1.</p>
<p>Which now means we have two object-relational mapping options that overlap in some areas but with very different backgrounds.</p>
<h3>The story so far</h3>
<p>Some time before I started in May LINQ to SQL was handed over to Data Programmability.</p>
<p>One of the first things you notice is that the overlap between the two object-relational mapping solutions Microsoft causes confusion and hesitation.</p>
<blockquote><p>Do I want something lightweight and easy or do I need the extra abstraction with a richer feature set?     <br /> If I want to start with LINQ to SQL today but know that the database won’t stay under my control how would I move to Entity Framework?</p>
</blockquote>
<p>These are the questions that many developers face and our team spent a lot of time looking at the differences between the two stacks, how they behave and which features were missing if you wanted to migrate from LINQ to SQL to Entity Framework v1. We put together code samples, some helpers and documentation which are now being <a href="http://blogs.msdn.com/adonet/">serialized on the ADO.NET blog</a> and left us with a better understanding of the disparity – some of which the EF team have already addressed in v2.</p>
<h3>Where next</h3>
<p>The decision has been made that <a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx">Entity Framework is the recommended solution for LINQ to relational scenarios</a> but we are committed to looking after our users and are approaching this in two ways.</p>
<p>Firstly we are going to make sure LINQ to SQL continues to operate as it should. This doesn’t just mean making sure what we had works in .NET 4.0 but also fixing a number of issues that have arisen as people pick it up for more advanced projects and put it into production environments.</p>
<p>Secondly we will evolve LINQ to Entities to encompass the features and ease of use that people have come to expect from LINQ to SQL. In .NET 4.0 this already includes additional LINQ operators and better persistence-ignorance.</p>
<p>This isn’t to say LINQ to SQL won’t ever get new features. The communities around LINQ to SQL are a continuous source of ideas and we need to consider how they fit the minimalistic lightweight approach LINQ to SQL is already valued for. Where these suggestions fit with this strategy we will be working hard to get them into the product. Some enhancements like the T4 templates can be released independently but runtime elements need to stick to the .NET Framework schedule.</p>
<h3>In conclusion</h3>
<p><font size="5">DON’T PANIC     <br /></font> (in large, friendly letters)</p>
<p>LINQ to SQL will continue to work and EF will better address the needs of LINQ to SQL users with each new release.</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/10/31/linq-to-sql-next-steps/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>From the vaults of Twitter</title>
		<link>http://damieng.com/blog/2008/07/10/from-the-vaults-of-twitter?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=from-the-vaults-of-twitter</link>
		<comments>http://damieng.com/blog/2008/07/10/from-the-vaults-of-twitter#comments</comments>
		<pubDate>Thu, 10 Jul 2008 19:50:35 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[c sharp]]></category>
		<category><![CDATA[Envy-Code-R]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/07/10/from-the-vaults-of-twitter</guid>
		<description><![CDATA[I don&#8217;t normally republish my Tweets but are my highlights. damienguard: Methods returning &#34;this&#34; is a hack for fluency. Let&#8217;s get &#34;..&#34; added to the C# compiler to operate on previous object. a.This()..That() lazycoder: @damienguard I can&#8217;t decide if that&#8217;s genius or insanity. Should we add the &#34;~&#34; operator to refer back to the top ]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t normally republish <a href="http://twitter.com/damienguard">my Tweets</a> but are my highlights.</p>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br />Methods returning &quot;this&quot; is a hack for fluency. Let&#8217;s get &quot;..&quot; added to the C# compiler to operate on previous object. a.This()..That() </p>
<p><a href="http://twitter.com/lazycoder">lazycoder</a>:       <br /><a href="http://twitter.com/damienguard">@<b>damienguard</b></a> I can&#8217;t decide if that&#8217;s genius or insanity. Should we add the &quot;~&quot; operator to refer back to the top of the inherit. chain? ;)</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/LostInTangent">LostInTangent</a>:       <br /><a href="http://twitter.com/damienguard">@<b>damienguard</b></a> I&#8217;ve started using Envy Code R for most of my applications (not just VS) and I have to say I&#8217;m loving it.</p>
<p><a href="http://twitter.com/damienguard">damienguard</a>:       <br /><a href="http://twitter.com/LostInTangent">@LostInTangent</a>: Envy Code R PR8 soon &#8211; Greek chars, improved hinting and some glyph revisions subscript/fractions &amp; *96 redone.</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br />Statically typed languages are not flexible enough to develop dynamically linked libraries.</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br />Renaming your wifi router StupidRouter does not alas shame it into being more reliable.</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br /><a href="http://twitter.com/command_tab">@command_tab</a>: Am I the only one who finds paying for pretty UI&#8217;s to leverage free software that took much more effort to develop offensive?</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br />Just took delivery on my Alps-switched keyboard&#8230; feels good so far&#8230; but let&#8217;s see if co-workers complain about the noise. </p>
<p><a href="http://twitter.com/Plip">Plip</a>:       <br /><a href="http://twitter.com/damienguard">@<b>damienguard</b></a> I CAN&#8217;T HEAR MYSELF THINK FOR THAT INFERNAL CLICKING ! </p>
<p><a href="http://twitter.com/damienguard">damienguard</a>:       <br /><a href="http://twitter.com/lancefisher">@lancefisher</a> The alps keyboard was from DSI USA&#8230; but don’t order one, terrible 2-key limits prevent fast typing.</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br />Apple should add hobbyist to its OS X line-up. Make kernel easier to switch, remove the h/w lockdown and no support.</p>
</blockquote>
<blockquote><p><a href="http://twitter.com/damienguard">damienguard</a>:       <br />Standard windows font smoothing&#8217;s real problem is lack of scales. Convert a ClearType rendering to greyscale in Photoshop&#8230;</p>
</blockquote>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/07/10/from-the-vaults-of-twitter/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Experimental LINQ to SQL template</title>
		<link>http://damieng.com/blog/2008/06/25/experimental-linq-to-sql-template-for-t4?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=experimental-linq-to-sql-template-for-t4</link>
		<comments>http://damieng.com/blog/2008/06/25/experimental-linq-to-sql-template-for-t4#comments</comments>
		<pubDate>Wed, 25 Jun 2008 22:12:46 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[linq-to-sql]]></category>
		<category><![CDATA[t4]]></category>
		<category><![CDATA[text templating]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=922</guid>
		<description><![CDATA[A newer version of this LINQ to SQL template is available. While SQL Metal does a good job of turning your SQL schema into a set of classes for you it doesn&#8217;t let you customize the code generation process. Usefully there is now a templating system built into Visual Studio 2008 called Text Templates (T4 ]]></description>
			<content:encoded><![CDATA[<p class="new">A newer version of <a href="http://damieng.com/blog/2009/01/19/linq-to-sql-templates-updated-now-on-codeplex">this LINQ to SQL template is available</a>.</p>
<p>While SQL Metal does a good job of turning your SQL schema into a set of classes for you it doesn&#8217;t let you customize the code generation process.</p>
<p>Usefully there is now a templating system built into Visual Studio 2008 called <a href="http://msdn.microsoft.com/en-us/library/bb126445.aspx">Text Templates</a> (T4 for short).</p>
<p>Here is a short (369 line) experimental proof-of-concept T4 template I wrote last night that will generate a data context and associated entity classes as a starting point similar to that produced by SqlMetal.</p>
<p class="download">Download of this old version no longer available, see the <a href="http://damieng.com/blog/2009/01/19/linq-to-sql-templates-updated-now-on-codeplex">newer article!</a></p>
<p>Once downloaded unzip and drop the DataContext.cs.tt into your project and edit line 17 to set the connection string. You can also edit lines 18 and 19 to set the namespace and class name. The lightweight wrappers around database, table and column can be found at the end of the file &#8211; they simply wrap the SQL Server Information_Schema views as briefly as possible.</p>
<p>Within seconds Visual Studio should have created a code-behind file for the DataContext named DataContext.cs.cs with your generated code ready to use :) If you don&#8217;t like the way the template generates your context you can change it :)</p>
<div class="alert">There are limitations with this experimental proof-of-concept including: </p>
<ul>
<li>Processes all and only tables in the database (no views or SP&#8217;s)</li>
<li>Foreign-key relationships are not implemented</li>
<li>Column attributes for IsDbGenerated, UpdateCheck and AutoSync not implemented</li>
<li>C# only (<a href="http://www.thedatafarm.com/blog/">sorry Julie</a>)</li>
<li>Plural and singular naming rules are incomplete</li>
<li>Can&#8217;t modify schema as you could with a designer stage</li>
</ul>
</div>
<div class="information">To learn more about T4: </p>
<ul>
<li>Watch a <a href="http://msdn.microsoft.com/en-us/vstudio/cc308634.aspx">screencast about T4 in action</a> (download, embedded player is awful)</li>
<li>Grab <a href="http://www.t4editor.net/">T4 Editor</a> for IntelliSense within T4 and <a href="http://dotnet.org.za/hiltong/archive/2008/02/18/t4-template-items.aspx">T4 Template Items</a> for <em>Add New Item&#8230;</em> support</li>
<li>Check out <a href="http://www.olegsych.com/">Oleg Sych&#8217;s blog</a> for great T4 articles including how to <a href="http://www.olegsych.com/2008/02/t4-template-directive/">enable the 3.5 compiler for templates</a></li>
<li>Learn about <a href="http://blogs.msdn.com/garethj/archive/2006/01/09/t4debugging.aspx">T4 debugging</a></li>
</ul>
</div>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/06/25/experimental-linq-to-sql-template-for-t4/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Four Windows apps for home-sick Mac users</title>
		<link>http://damieng.com/blog/2008/04/17/four-windows-apps-for-home-sick-mac-users?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=four-windows-apps-for-home-sick-mac-users</link>
		<comments>http://damieng.com/blog/2008/04/17/four-windows-apps-for-home-sick-mac-users#comments</comments>
		<pubDate>Thu, 17 Apr 2008 11:08:16 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[dash]]></category>
		<category><![CDATA[digsby]]></category>
		<category><![CDATA[e text editor]]></category>
		<category><![CDATA[libra]]></category>
		<category><![CDATA[windows applications]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=893</guid>
		<description><![CDATA[Libra (like Delicious Library) Delicious Library is a DVD, game and book organisation tool I&#8217;ve been using since my PowerBook G4 and a 2.0 version has been dangling from Wil Shipley&#8217;s mouth longer than I care to remember. Windows users however will find Libra a very interesting clone and it features some of the same ]]></description>
			<content:encoded><![CDATA[<h3>Libra (like Delicious Library)</h3>
<p><a href="http://www.delicious-monster.com/">Delicious Library</a> is a DVD, game and book organisation tool I&#8217;ve been using since my PowerBook G4 and a 2.0 version has been dangling from Wil Shipley&#8217;s mouth longer than I care to remember.</p>
<p>Windows users however will find <a href="http://www.getlibra.com/">Libra</a> a very interesting clone and it features some of the same great features such as bar-code scanning via a web cam, tracking loans, a rendered virtual shelf and fast queries.</p>
<p>Unlike Delicious Library 1.x it also features sharing your library on-line, tweaking the types and rendering and a more advanced query engine and is available free for non-commercial use.</p>
<h3>E Text Editor (like TextMate)</h3>
<p><a href="http://macromates.com/">TextMate</a> is a programming editor for the Mac that can be extended through the use of Bundles to provide additional syntax highlighting, menu options and command processing. It is fast, feels lightweight and therefore incredibly customisable all of which contribute to it&#8217;s success.</p>
<p><a href="http://www.e-texteditor.com/">E Text Editor</a> is a Windows clone of TextMate that doesn&#8217;t just mimic the user interface but also provides compatibility with TextMate bundles allowing you to take advantage of some of the many great enhancements available and at $34 is almost half the price although it doesn&#8217;t feel as snappy as it&#8217;s Mac counterpart.</p>
<h3>Digsby (like Adium)</h3>
<p><a href="http://www.adiumx.com/">Adium</a> is my instant messaging client of choice allowing me a single app to manage MSN, ICQ and Google Talk (I wish they would get basic Skype support in there too).</p>
<p><a href="http://www.digsby.com/">Digsby</a> provides similar functionality whilst also throwing social networking (Facebook, Twitter) and email notification (Hotmail, GMail, Yahoo Mail etc.) into the mix.</p>
<h3>Dash (like Quicksilver)</h3>
<p><a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">QuickSilver</a> provides a quick keyboard-based entry system for performing a wide variety of tasks and selections within Mac OS X and what it doesn&#8217;t do can often be added with plug-ins.</p>
<p><a href="http://www.trydash.com/">Dash</a> achieves a similar effect on Windows but I have to admit I&#8217;m not really sold on either yet. I think the movement from keyboard to mouse and back every now and then must be a good break for your hands if not for your productivity&#8230;</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/17/four-windows-apps-for-home-sick-mac-users/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Windows 2008 Server on my MacBook Pro</title>
		<link>http://damieng.com/blog/2008/04/02/windows-2008-server-on-my-macbook-pro?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-2008-server-on-my-macbook-pro</link>
		<comments>http://damieng.com/blog/2008/04/02/windows-2008-server-on-my-macbook-pro#comments</comments>
		<pubDate>Wed, 02 Apr 2008 13:37:06 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[windows 2008 server]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=894</guid>
		<description><![CDATA[A troublesome disk (a story for another time) has forced me to reinstall my MacBook Pro and review my Windows partition. My Boot Camp partition was running Vista Ultimate x86 which felt sluggish, ignored the last 1GB and bugged me with UAC. One Windows update kept failing to install which also prevented SP1 from completing. ]]></description>
			<content:encoded><![CDATA[<p>A troublesome disk (a story for another time) has forced me to reinstall my MacBook Pro and review my Windows partition.</p>
<p>My Boot Camp partition was running Vista Ultimate x86 which felt sluggish, ignored the last 1GB and bugged me with UAC. One Windows update kept failing to install which also prevented SP1 from completing.</p>
<p>Apple&#8217;s Boot Camp doesn&#8217;t support 64-bit Windows (except on the Mac Pro) and my 64-bit experiences have been unpleasant so far (no Flash for IE x64, limited 64-bit shell extensions, Live! refusing to install, drivers etc.) The increased x64 memory consumption would also be an issue when running in a 1.5GB virtual machine via Parallels or VMware Fusion.</p>
<p>Windows XP was one option but losing IIS7 and DirectX 10 would see me reinstalling Vista within weeks so I decided to try Windows 2008 Server x86.</p>
<p>Boot Camp happily accepted the 2008 Server x86 CD where I chose the BOOTCAMP partition, formatting it as NTFS and electing for a standard installation. The Boot Camp drivers subsequently installed without complaint, all 4GB of RAM was accessible and there are no 64-bit compatibility issues.</p>
<p>Microsoft are giving away 1 year evaluation copies of Windows 2008 Enterprise Server x86 as part of their Heroes Happen Here launch program for Windows 2008, SQL Server 2008 and Visual Studio 2008 if you don&#8217;t happen to have an MSDN subscription to hand. There are however a few tweaks you need to do to get a more desktop-like experience:</p>
<h3>Install desktop features</h3>
<p>Head into <em>Server Manager</em> and <em>Add Features</em> then choose <em>Desktop Experience</em> to install Windows Media Player, Aero etc.</p>
<p>Go into <em>Services </em>and set the <em>Themes </em>service to <em>Automatic </em>and <em>Start </em>it to make themes available and then choose <em>Browse&#8230;</em> from the <em>Theme Settings</em> in <em>Personalisation </em>to select <em> %windir%\Resources\Themes\Aero.theme</em></p>
<h3>Install wireless networking</h3>
<p>This one had me stumped for a while as I thought my wireless card/drivers weren&#8217;t working. The reality is that 2008 Server has wireless networking removed by default so head into <em>Server Manager &gt; Add Features &gt; Wireless LAN Service </em>to install it.</p>
<h3>Enabling hibernate</h3>
<p>Open a command prompt and enter:</p>
<pre><code>powercfg.exe /hibernate on</code></pre>
<h3>Remove annoying shutdown</h3>
<p>Head into the registry to <em>HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Reliability</em> and change the <em>ShutdownReasonOn </em>DWORD key to <em>0</em>.</p>
<h3>Relaxing local password policy</h3>
<p>A controversial change I&#8217;m sure but I&#8217;d rather choose something complex and unique that will last 90+ days than something memorable every 30.  Head into <em>Local Security Policy</em> &gt; <em>Account Policies</em> &gt; <em>Password Policy</em> &gt; <em>Maximum password age</em> and change it to something more reasonable.</p>
<h3>Going further</h3>
<p>A great guide with <a href="http://www.win2008workstation.com/wordpress/">screen-shots on additional tweaks for a more workstation-like experience</a> also exists &#8211; wish I known about that earlier!</p>
<div class="new"><a href="http://codeclimber.net.nz/archive/2008/04/07/Running-Win2008-on-my-Mac.aspx">Simone Chiaretta</a> has highlighted the that tap-to-click is absent and there are some Bluetooth issues stemming from missing drivers.</div>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/02/windows-2008-server-on-my-macbook-pro/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

