<?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; Technology</title>
	<atom:link href="http://damieng.com/blog/category/technology/feed" rel="self" type="application/rss+xml" />
	<link>http://damieng.com</link>
	<description>A .NET developer in silicon valley</description>
	<lastBuildDate>Wed, 08 Feb 2012 06:46:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</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>Android&#8217;s Roboto system font for Ice Cream Sandwich</title>
		<link>http://damieng.com/blog/2011/10/19/androids-roboto-system-font-for-ice-cream-sandwich?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=androids-roboto-system-font-for-ice-cream-sandwich</link>
		<comments>http://damieng.com/blog/2011/10/19/androids-roboto-system-font-for-ice-cream-sandwich#comments</comments>
		<pubDate>Thu, 20 Oct 2011 05:44:10 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2229</guid>
		<description><![CDATA[Google have switched system font for Android&#8217;s latest release (known as Ice Cream Sandwich) from the Droid Family to a new typeface known as Roboto. Typographica opened today with a critique of the Roboto font which boils down to this: The similarity to Helvetica is obvious but that similarity can be drawn with many modern ]]></description>
			<content:encoded><![CDATA[<p>Google have switched system font for Android&#8217;s latest release (known as <a href="http://reviews.cnet.com/8301-19736_7-20061501-251/ice-cream-sandwich-first-impressions-a-bold-new-android/">Ice Cream Sandwich</a>) from <a href="http://damieng.com/blog/2007/11/14/droid-font-family-courtesy-of-google-ascender">the Droid Family</a> to a new typeface known as Roboto.</p>
<p>Typographica opened today with a <a href="http://typographica.org/2011/on-typography/roboto-typeface-is-a-four-headed-frankenstein/">critique of the Roboto font</a> which boils down to this:</p>
<p><img src="http://images.damieng.com/blog/Roboto.png" alt="Roboto compared at Typographica" width="400" /></p>
<p>The similarity to Helvetica is obvious but that similarity can be drawn with many modern typefaces &#8211; the other comparisons are tenuous indeed:</p>
<ul>
<li><a href="http://dinfont.com">FF DIN</a> has little resemblance other than having straight edges on rounded letters. Lots of faces do that. <a href="http://damieng.com/envy-code-r">Envy Code R</a> does extensively :)</li>
<li><a href="http://en.wikipedia.org/wiki/Myriad_(typeface)">Myriad</a> is more open in it&#8217;s whitespace, ends t with a slant and features a different approach to shoulders on mnpqr</a>
</li>
<li><a href="http://new.myfonts.com/fonts/type-together/ronnia/">Ronnia</a> only shares the single horizontal stem which is also present in many monospace bitmap fonts</a>
</ul>
<p>Yes, some of these differences are subtle when you put them side by side but <a href="http://www.fontshop.com/education/pdf/typeface_anatomy.pdf">subtleties are what give the typeface its character</a>.</p>
<p>There are only so many ways to draw letters with consistency and readability especially if you want a modern sans look. That&#8217;s exactly why <a href="http://en.wikipedia.org/wiki/Copyright_on_typefaces">copyright refuses to cover letterforms in the USA</a>.</p>
<p>So coming to the font itself at first glance, yes, on my laptop it doesn&#8217;t look as pretty as Helvetica when blown up for comparison but here&#8217;s something you should consider.</p>
<blockquote><p>Typefaces are designed for a specific environment</p></blockquote>
<p>Consider the following typefaces:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Bell_Gothic">Bell Gothic</a> has big counters and deep ink-traps so that high-speed printing on cheap paper retains the form</li>
<li><a href="http://clearviewhwy.com/WhatIsClearviewHwy/HowItWorks/developmentCriteria.php">ClearView Highway</a> is designed to be quickly readable with headlight glare</li>
<li><a href="http://en.wikipedia.org/wiki/Cambria_(typeface)">Cambria</a> has many little flourishes that only look good with <a href="http://en.wikipedia.org/wiki/ClearType">sub-pixel positioning</a></li>
</ul>
<p>Use a typeface outside its intended environment and you&#8217;ll easily believe it&#8217;s a bad design, ugly or unrefined as those very characteristics that made it great for that environments completely fail to fit new surroundings.</p>
<p>Even the famous Helvetica has an environment of whitespace, bold colours and clean-lines where it shines. That makes it a <a href="http://www.webdesignerdepot.com/2009/03/40-excellent-logos-created-with-helvetica">top choice for corporate logos</a>.</p>
<p>Roboto is the work of independent type designer <a href="http://betatype.com/">Christian Robertson</a> and until I see it on a Droid device I&#8217;ll cut him and Google some slack &#8211; from the screenshots I&#8217;ve seen online it looks like a good fit.</p>
<p>You have to at least respect Google for continuing to improve typography by commission fonts. Microsoft are the only other major UI player doing this as Apple&#8217;s sole contribution to typefaces in the last 10 years has been a <a href="http://damieng.com/blog/2009/08/29/first-impressions-of-snow-leopard">hack-job on the open-source Deja-Vu Mono to rename it Menlo, move some bars around and to trash the hinting in the process</a> so they have something to replace the ageing <a href="http://en.wikipedia.org/wiki/Monaco_(typeface)">Monaco</a> with.</p>
<p>If you want to download the font yourself here is a complete set of the files taken from the SDK (unlike the other zip floating around this one has all variants + the licence).</p>
<p class="download">Download <a href="http://download.damieng.com/fonts/redistributed/RobotoFamily.zip">Roboto Font Family (ZIP of TTF)</a> (399 KB)</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2011/10/19/androids-roboto-system-font-for-ice-cream-sandwich/feed</wfw:commentRss>
		<slash:comments>9</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>5</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>MacBook Pro 256GB SSD upgrade experience</title>
		<link>http://damieng.com/blog/2010/04/09/macbook-pro-upgrade-to-crucial-256gb-ssd?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=macbook-pro-upgrade-to-crucial-256gb-ssd</link>
		<comments>http://damieng.com/blog/2010/04/09/macbook-pro-upgrade-to-crucial-256gb-ssd#comments</comments>
		<pubDate>Fri, 09 Apr 2010 23:48:28 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[crucial]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[MacBook]]></category>
		<category><![CDATA[MacBook-Pro]]></category>
		<category><![CDATA[ssd]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1566</guid>
		<description><![CDATA[I&#8217;ve been wanting an SSD for some time and finally caved. Armed with credit card, screwdriver and trusty MacBook Pro I fitted a sweet SSD and decided to document the experience. Updated with benchmarks for the Crucial M4! Choosing a drive There are a bewildering number of options out there. Budget, as always, dictates the ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been wanting an SSD for some time and finally caved. Armed with credit card, screwdriver and <a href="http://damieng.com/blog/2010/01/27/macbook-pro-two-year-check-in">trusty MacBook Pro</a> I fitted a sweet SSD and decided to document the experience.</p>
<p class="new">Updated with benchmarks for the Crucial M4!</p>
<h3>Choosing a drive</h3>
<p>There are a bewildering number of options out there. Budget, as always, dictates the combination of speed and size available.</p>
<h4>Size</h4>
<p>You may not need as much space as you think so even if you intend on a fresh install first clean-up your current drive to get an idea of actual requirements. Remembering to backup before you:</p>
<ol>
<li><em>Identify biggest culprits<br />
</em>Try <a href="http://www.daisydiskapp.com/">DaisyDisk</a> ($20) or <a href="http://www.derlien.com/">Disk Inventory X</a> (free) and drill down to catch unexpected bloat in your folders</li>
<li><em>Clean up unused system junk<br />
</em>Use <a href="http://macpaw.com/">CleanMyMac</a> ($30) or <a href="http://monolingual.sourceforge.net/">MonoLingual</a> (free) to clean up logs, caches, redundant processor and unwanted languages.</li>
<li><em>Archive unused content<br />
</em>Move those podcasts, TV shows, applications and games you aren’t going to use anytime soon to cheaper external storage.</li>
<li><em>Deal with orphaned &amp; duplicate files<br />
</em>Find media in your iTunes folders missing from iTunes lists and either trash or add it back then use iTunes <em>Display Duplicates</em>.</li>
</ol>
<p>If you&#8217;re prepared to give up your internal Superdrive then <a href="http://www.ifixit.com/Apple-Parts/12-7-mm-Optical-Bay-SATA-Hard-Drive-Enclosure/IF107-079">move your existing hard drive to the optical bay</a> and purchase a smaller SSD for the OS and key performance-critical files. This saves cash and gives you more space at the expense of battery life and a little extra weight.</p>
<h4>Speed</h4>
<p>All SSDs are not created equal and the combination of flash and controller (on drive and in your machine) play their parts in defining performance. Firmware, hardware revisions, drive size and operating system can also affect the speed so do your homework.</p>
<p><a href="http://anandtech.com/tag/storage">Anandtech</a> have in-depth coverage of SSDs including an <a href="http://www.anandtech.com/bench/SSD/65">SSD Bench</a> with Tom&#8217;s providing a more general <a href="http://www.tomsguide.com/us/ssd-value-performance,review-1455.html">SSD Buyer&#8217;s Guide</a>. Drives come and go quickly so keep an eye on review dates and exact model numbers as manufacturers have models with similar names with difference specifications.</p>
<h3>My choice</h3>
<p>I settled on the Crucial SSD 256GB C300 because it is blazingly fast and the 256GB variant fit my 150GB storage requirements. </p>
<p class="new">The C300 drives are no longer available as Crucial have replaced them with the faster and cheaper <a href="http://www.kqzyfj.com/click-3893583-10674245">M4 family</a> or <a href="http://www.amazon.com/mn/search/?_encoding=UTF8&#038;scn=1292116011&#038;keywords=crucial%20m4&#038;tag=dam-20&#038;linkCode=ur2&#038;qid=1328683156&#038;h=91d5492929c1a792b75aa43e8acbfa7a3baf1c18&#038;camp=1789&#038;creative=390957&#038;rh=n%3A1292116011%2Ck%3Acrucial%20m4#/ref=sr_nr_p_6_1?rh=n:172282,n:!493964,n:541966,n:193870011,n:1292116011,k:crucial m4,p_4:Crucial,p_n_condition-type:2224371011,p_6:ATVPDKIKX0DER">at Amazon</a><br />
64GB for $105, 128GB for $188, 250GB for $365 and 512GB for $677<img src="http://www.lduhtrp.net/image-3893583-10674245" width="1" height="1" border="0"/></p>
<h4>Apple-factory options</h4>
<p>Apple&#8217;s factory options for SSD are a mixed bag. They originally used <a href="http://www.anandtech.com/show/2829/19">slower drives</a> such as Toshiba. As of July 2010 <a href="http://www.macrumors.com/2011/07/26/apple-still-using-ssds-with-varying-speeds-on-new-macbook-air/">whether you get a fast Samsung or a slow Toshiba SSD is pure luck</a>.</p>
<p>Given Apple charge a slight premium for the SSD option, you don&#8217;t get to choose your drive model and they are easily replaceable (except the <a href="http://www.geek.com/articles/chips/apple-preventing-aftermarket-ssd-upgrades-on-27-inch-imacs-2010082/">iMac 27&#8243;</a>) go with an after-market drive :)</p>
<h3>Installing a new hard drive</h3>
<p>The newer Unibody MacBook Pro’s hard-drives are designed to be user-replaceable and are covered in the manual.</p>
<p>My older non-Unibody is not so simple but those nice people over at iFixit put together a <a href="http://www.ifixit.com/Guide/Repair/Installing-MacBook-Pro-15-Inch-Core-2-Duo-Model-A1211-Hard-Drive-Replacement/459/1">hard drive replacement guide for 15” that is close enough for my 17&#8243;</a>.</p>
<h3>Installing Mac OS X without a DVD drive</h3>
<p>My Superdrive died a while back so installing Mac OS X is a little trickier than usual. There are a few options you might come across.</p>
<h4>Remote Install</h4>
<p><a href="http://support.apple.com/kb/HT2129">Remote Install</a> let&#8217;s you put the a DVD into a machine with a drive, run <em>Utilities</em> &gt; <em>Remote Install</em> and follow a few steps which include holding down the <em>alt</em> key on the machine that doesn’t have a drive.</p>
<p>Unfortunately only machines Apple shipped without a Superdrive &#8211; i.e. a Mac mini or MacBook Air from 2009 or later are happy to boot from a Remote Disc.</p>
<p>The following two shell commands enable Remote Disc on older machines within Finder but don&#8217;t allow a remote install:</p>
<pre><code>defaults write com.apple.NetworkBrowser EnableODiskBrowsing -bool true
defaults write com.apple.NetworkBrowser ODSSupported -bool true</code></pre>
<p>You will also need to enable sharing on the Mac with the DVD drive. Head into <em>System Preferences</em> then select <em>Sharing</em> then check <em>DVD or CD sharing</em>. You may also want to uncheck <em>Ask me before allowing others to use my DVD drive</em> to avoid having to go to the other machine to continually grant access.</p>
<h4>USB image</h4>
<p>A Snow Leopard image will require just over 6.2GB and a GUID Partition Table. I&#8217;ve had success with a <a href="http://amzn.to/jIPnPB">OCZ 16GB Rally2 USB Flash Drive ($35)</a></p>
<p>To copy the Snow Leopard Install Disc to it:</p>
<ol>
<li>Use a Mac that has a Superdrive and insert both the install DVD and USB storage device</li>
<li>Launch <em>Disk Utility</em> from the <em>Utilities</em> folder</li>
<li>Select the <em>USB storage device</em> from the list of devices and then choose the <em>Partition</em> tab</li>
<li>Choose <em>1 Partition</em> from the <em>Volume Scheme</em> drop-down</li>
<li>Press <em>Options&#8230;</em> choose <em>GUID Partition Table</em> then <em>OK</em></li>
<li>Press <em>Apply</em> to confirm you are happy to wipe away all the data on the device</li>
<li>Select the <em>install DVD</em> from the list of devices and then choose the <em>Restore</em> tab</li>
<li>Drag the <em>install DVD</em> from the list of devices into the <em>Source</em> text box</li>
<li>Drag the<em> USB storage device</em> from the list of devices into the <em>Destination</em> text box</li>
<li>Press the <em>Restore</em> and wait a while</li>
</ol>
<p>When finished eject the USB device and insert it into your DVD-less Mac. Turn it on and hold down <em>alt</em> until a boot selection screen shows then use the arrow keys to select your USB device and press return to launch the installer.</p>
<p>It may take a while for the installer screen to appear but be patient.</p>
<p>Press <em>Options&#8230;</em> from the installer to turn all off all the features you don&#8217;t need such as additional languages, printer drivers etc.</p>
<p class="information">Open the Installer Log window and set <em>Detail Level</em> to <em>Show All Logs</em> to see more granular progress &#8211; useful if installing from silent media like networks or flash.</p>
<h4>NetBoot</h4>
<p>Macs can boot from network images but the official Netboot server only comes with Mac OS X Server which is $499 right now although rumoured to be free with Mac OS X Lion so that could be an option soon.</p>
<h3>Performance over time &amp; TRIM</h3>
<h4>A simplified primer</h4>
<p>File systems write things in blocks. Before SSD when the file system wrote to &#8216;block 1&#8242; it hit &#8216;block 1&#8242; on the drive (unless it was damaged when it would map in a replacement from a reserved section). If it rewrote &#8216;block 1&#8242; it overwrote what it wrote last time. This is how tools that erase files by writing them over and over work.</p>
<p>Now SSDs are fast but the flash technology suffers some limitations the most important is they can&#8217;t overwrite data without erasing it first so what they do is when the operating system writes &#8216;block 1&#8242; a second time, it puts it somewhere else in the flash (but tells the file system it was &#8216;block 1&#8242;). This avoids the write penalty and also means that you don&#8217;t wear out block 1 by writing it over and over again (this is called wear-leveling).</p>
<p>Now this works just fine until you run out of fresh unused blocks. This happens sooner than you&#8217;d think because when the file-system deletes a file it does not actually erase anything but just marks it as not used in it&#8217;s own file-system tables knowing it will just get used again sooner or later. (This is how file-recovery tools are able to undelete files).</p>
<p>So this combination of the drive never getting told to erase blocks and only finding out it can re-use them later when its time to write data and it suddenly finds these writes all require it erase blocks too and performance can drop to traditional hard-drive speeds (or worse).</p>
<h4>The solutions</h4>
<p>Manufacturers initially solved this problem by writing tools that examined the file-system structures to find out which blocks are unused so they can send &#8216;erase block&#8217; commands down to the SSD drive so they are ready to be written again without the erase penalty &#8211; at least until you run out of blocks again. Because these tools need to know the file-systems internals you can&#8217;t throw a Windows tool designed for the NTFS file system at a disk formatted with HFS+ for the Mac and expect it to be able to understand anything.</p>
<p>Another solution involves the drive recording when blocks are being overwritten at the file-system it can mark the older copy of the actual block on the flash as erasable. Now, this may not happen until the disk is quite full and so to avoid stalling again on writes the manufacturers put some extra flash storage on the drive. When it gets in this state the writes gets a fresh block from the reserve and the reserve takes the previously used block to erase and put back into reserve.  The problem here is that the manufacturers have to put extra flash and logic on the drive which costs $&#8217; and it&#8217;s only able to put off stalling as long as the reserve can keep supplying fresh blocks.</p>
<p>A third solution tackles the problem at the source. Manufacturers agreed on a standard that extends the ATA protocol called &#8216;TRIM&#8217; that lets file-systems tell the drive when blocks are no longer required and can be erased when it&#8217;s not busy. Support was built into Windows 7 and Linux 2.6.28 making a lot of SSD owners very happy.</p>
<h4>Mac OS X &amp; TRIM</h4>
<div class="new">Only Apple-supplied drives have OS X TRIM support enabled by default but there are techniques for enabling TRIM in <a href="http://www.groths.org/?p=308">Mac OS X 10.6.7 (Snow Leopard)</a> and <a href="http://www.mactrast.com/2011/07/how-to-enable-trim-support-for-all-ssds-in-os-x-lion/">10.7 (Lion)</a></div>
<p>You could also try to minimize unnecessary writes:</p>
<ol>
<li>Don&#8217;t use Finder&#8217;s Secure Empty Trash or the srm command line tool &#8211; these attempt to overwrite the blocks but because of wear-leveling on SSD they&#8217;ll just steal blocks up to 35x the size of the file you want to &#8216;erase&#8217;</li>
<li>Keep large churning files on external drives (e.g. video processing)</li>
<li>Don&#8217;t let your laptop run out of power as it copies the RAM to disk each time (2-8GB)</li>
<li>Prevent unnecessary disk operations such as the &#8216;last accessed&#8217; attribute on files (see below)</li>
<li>Don&#8217;t keep running disk benchmarks that cause lots of writes!</li>
</ol>
<div class="alert">Don&#8217;t be tempted to try and use one of the manufacturers Windows tools from your BootCamp partition as they only understand NTFS and FAT. They won&#8217;t be able to even figure out which blocks can be erased as Mac OS X uses it&#8217;s own HFS+ file system.</div>
<h4>Turn off last-access-time</h4>
<p>These access times are pretty useless and indeed the iPhone also has them switched off. Create a file named noatime.plist in your <em>/Library/LaunchDaemons</em> path with the following contents:</p>
<pre><code>&lt;plist version="1.0"&gt;
  &lt;dict&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;noatime&lt;/string&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
      &lt;string&gt;mount&lt;/string&gt;
      &lt;string&gt;-vuwo&lt;/string&gt;
      &lt;string&gt;noatime&lt;/string&gt;
      &lt;string&gt;/&lt;/string&gt;
    &lt;/array&gt;
    &lt;key&gt;RunAtLoad&lt;/key&gt;
    &lt;true/&gt;
  &lt;/dict&gt;
&lt;/plist&gt;
</code></pre>
<p>Thanks go to Ricardo Gameiro for that tip although his other <a href="http://blogs.nullvision.com/?p=275">Mac SSD tweaks</a> of creating a RAM disk is questionable given the way Mac OS X manages memory and disabling the RAM copy-to-disk entirely and therefore losing data is more risky to me than running out of blocks early.</p>
<h4>Do not</h4>
<ul>
<li><em>Turn off the sudden motion sensor</em> &#8211; SSDs ignore the park head command anyway</li>
<li><em>Turn off HFS+ journaling</em> &#8211; some users report odd issues and corruption</li>
</ul>
<h4>Last resort</h4>
<p>If you do get into the situation where your write performance is suffering badly and you are prepared to spend a little time to get it back you can do the following:</p>
<ol>
<li>Ensure you have a full Time Machine backup</li>
<li>Boot from a Linux Live CD (or USB image) containing a recent build of <a href="http://sourceforge.net/projects/hdparm/">hdparm</a></li>
<li>Use hdparm to perform an <a href="https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase#HDDErase">ATA Secure Erase</a></li>
<li>Boot from your Mac OS X DVD/USB stick</li>
<li>Choose the <em>Utilities</em> &gt; <em>Restore System From Backup</em> menu option</li>
<li>Point it at your Time Machine backup</li>
</ol>
<p>You should also be able to do this with other full-system backup tools like <a href="http://www.shirt-pocket.com/SuperDuper">SuperDuper</a> but you&#8217;ll have to figure out the steps for yourself ;-)</p>
<h3>Performance</h3>
<p>I wish I had some better benchmarking tools but <a href="http://www.xbench.com/">Xbench</a> is all I have, sorry!</p>
<h4>Xbench with Crucial C300 (256GB) on older MacBook Pro</h4>
<p>Here are the figures for my Crucial C300 256GB drive with 0009 firmware on my older non-unibody MacBook Pro 17&#8243; (MacBookPro3,1) with a dual-core 2.6GHz CPU and 4GB RAM. </p>
<p class="alert">This MacBook Pro is limited to 1.5GB/sec on the SATA bus as it uses an <a href="http://www.intel.com/products/notebook/chipsets/pm965/pm965-overview.htm">Intel ICH-8M SATA controller</a></p>
<table>
<tbody>
<tr>
<th></th>
<th>0001<br />
Sequential</th>
<th>0001<br />
Random</th>
<th>0002<br />
Sequential</th>
<th>0002<br />
Random</th>
<th>0006<br />
Sequential</th>
<th>0006<br />
Random</th>
<th>0007<br />
Sequential</th>
<th>0007<br />
Random</th>
<th>0007<br />
Sequential TRIM</th>
<th>0007<br />
Random TRIM</th>
</tr>
<tr>
<th>Overall</th>
<td style="text-align: right;">137.66</td>
<td style="text-align: right;">643.14</td>
<td style="text-align: right;">137.39</td>
<td style="text-align: right;">648.57</td>
<td style="text-align: right;">121.39</td>
<td style="text-align: right;">644.71</td>
<td style="text-align: right;">125.17</td>
<td style="text-align: right;">620.97</td>
<td style="text-align: right;">138.23</td>
<td style="text-align: right;">638.23</td>
</tr>
<tr>
<th>Uncached write 4K</th>
<td style="text-align: right;">200.40</td>
<td style="text-align: right;">762.30</td>
<td style="text-align: right;">185.92</td>
<td style="text-align: right;">789.45</td>
<td style="text-align: right;">194.20</td>
<td style="text-align: right;">774.95</td>
<td style="text-align: right;">208.42</td>
<td style="text-align: right;">885.91</td>
<td style="text-align: right;">191.31</td>
<td style="text-align: right;">931.43</td>
</tr>
<tr>
<th>Uncached write 256K</th>
<td style="text-align: right;">196.34</td>
<td style="text-align: right;">357.61</td>
<td style="text-align: right;">196.05</td>
<td style="text-align: right;">359.23</td>
<td style="text-align: right;">129.89</td>
<td style="text-align: right;">360.79</td>
<td style="text-align: right;">157.84</td>
<td style="text-align: right;">318.87</td>
<td style="text-align: right;">172.08</td>
<td style="text-align: right;">320.78</td>
</tr>
<tr>
<th>Uncached read 4K</th>
<td style="text-align: right;">67.56</td>
<td style="text-align: right;">1926.31</td>
<td style="text-align: right;">69.27</td>
<td style="text-align: right;">1942.94</td>
<td style="text-align: right;">63.01</td>
<td style="text-align: right;">1911.07</td>
<td style="text-align: right;">60.37</td>
<td style="text-align: right;">1812.40</td>
<td style="text-align: right;">72.50</td>
<td style="text-align: right;">2030.81</td>
</tr>
<tr>
<th>Uncached read 256K</th>
<td style="text-align: right;">239.73</td>
<td style="text-align: right;">628.06</td>
<td style="text-align: right;">238.22</td>
<td style="text-align: right;">624.15</td>
<td style="text-align: right;">236.40</td>
<td style="text-align: right;">617.67</td>
<td style="text-align: right;">234.84</td>
<td style="text-align: right;">615.42</td>
<td style="text-align: right;">243.42</td>
<td style="text-align: right;">631.16</td>
</tr>
</tbody>
</table>
<p>My original performance figures with the original as-shipped 0001 firmware and subsequent <a href="http://www.crucial.com/support/firmware.aspx">0006 firmware</a> figures are after almost a year of continual use and the drive has not been secure erased in that time. The final set of 0007 figures are on Mac OS X Lion with the TRIM enabler support switched on for a week.</p>
<h4>Xbench with Crucial M4 (256GB) on new MacBook Pro</h4>
<p>I had the opportunity to put an SSD in my new work MacBook and immediately jumped to the a href=&#8221;http://www.kqzyfj.com/click-3893583-10674245&#8243;>Crucial M4 256GB</a>. Here are the crazy figures for that drive with 0009 firmware on a MacBook Pro 15&#8243; (MacBookPro8,2) with a quad-core 2.2GHz CPU and 8GB RAM)</p>
<table>
<tbody>
<tr>
<th></th>
<th>0009<br />
Sequential</th>
<th>0009<br />
Random</th>
</tr>
<tr>
<th>Overall</th>
<td style="text-align: right;">277.21</td>
<td style="text-align: right;">1293.22</td>
</tr>
<tr>
<th>Uncached write 4K</th>
<td style="text-align: right;">428.98</td>
<td style="text-align: right;">1890.35</td>
</tr>
<tr>
<th>Uncached write 256K</th>
<td style="text-align: right;">424.35</td>
<td style="text-align: right;">770.44</td>
</tr>
<tr>
<th>Uncached read 4K</th>
<td style="text-align: right;">120.56</td>
<td style="text-align: right;">2162.18</td>
</tr>
<tr>
<th>Uncached read 256K</th>
<td style="text-align: right;">691.20</td>
<td style="text-align: right;">1244.41</td>
</tr>
</tbody>
</table>
<h3>Thoughts</h3>
<p>SSD is fast but given the hype I was expecting everything to be instant and it wasn’t quite there. Applications usually launch within a single dock bounce and everything feels a lot snappier but there wasn&#8217;t the massive WOW! I was expecting.</p>
<p>There are also a few other advantages often overlooked, especially on a laptop:</p>
<ul>
<li>lower power consumption</li>
<li>less weight, noise &amp; heat</li>
<li>greater shock, dust and magnetic resistance</li>
</ul>
<p>Here&#8217;s a table that pulls the specs compared to the 7200RPM Travestar that was previously my main drive.</p>
<table>
<tbody>
<tr>
<th></th>
<th>Crucial RealSSD C300 256GB</th>
<th>Hitachi Travelstar 7K320</th>
</tr>
<tr>
<th>Power consumption (W)</th>
<td style="text-align: right;">0.094 – 2.1 &#8211; 4.3</td>
<td style="text-align: right;">0.2 – 2.2 &#8211; 5.5</td>
</tr>
<tr>
<th>Weight (g)</th>
<td style="text-align: right;">75</td>
<td style="text-align: right;">110</td>
</tr>
<tr>
<th>Shock resistance (G/1.0ms)</th>
<td style="text-align: right;">1500</td>
<td style="text-align: right;">200</td>
</tr>
<tr>
<th>Noise (Bels)</th>
<td style="text-align: right;">0</td>
<td style="text-align: right;">2.8</td>
</tr>
<tr>
<th>Seek time (ms)</th>
<td style="text-align: right;">&lt; .1</td>
<td style="text-align: right;">12</td>
</tr>
</tbody>
</table>
<p>Time will tell how well the machine now deals with large Aperture libraries of RAW images and Visual Studio compilations from inside Parallels and I&#8217;ll be sure to report them here.</p>
<h3>Check-in (26 June 2011)</h3>
<p>I installed the SSD and wrote this article back in April 2010. I&#8217;ve revised and tweaked it over the 14 months it&#8217;s been published to account for new firmware, updated benchmarks, the new Crucial M4 replacement of the C300 and the fact that Apple now ship SSD&#8217;s with very good performance as standard.</p>
<p>My C300 is still going strong through two firmware upgrades, three OS X installs (trying out betas), regular application installs and work with heavyweight software such as VMware Fusion and Aperture.</p>
<p>The Crucial hasn&#8217;t yet missed a beat. No calls to support, no stuttering and benchmarks today are very similar to those published for the 0006 firmware update (within 10%).</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2010/04/09/macbook-pro-upgrade-to-crucial-256gb-ssd/feed</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>MacBook Pro two year check-in</title>
		<link>http://damieng.com/blog/2010/01/27/macbook-pro-two-year-check-in?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=macbook-pro-two-year-check-in</link>
		<comments>http://damieng.com/blog/2010/01/27/macbook-pro-two-year-check-in#comments</comments>
		<pubDate>Thu, 28 Jan 2010 07:44:36 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[freeware]]></category>
		<category><![CDATA[MacBook-Pro]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1546</guid>
		<description><![CDATA[It&#8217;s been an interesting couple of years with nothing but a maxed-out MacBook Pro 17&#8243; as my only home machine. Failures The hard drive died but time machine held my hand. At ALT.NET Seattle 2009 my backpack took a dive that left a dent in one corner. The battery was replaced and I roped GrinGod ]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been an interesting couple of years with nothing but a maxed-out MacBook Pro 17&#8243; as my only home machine.</p>
<h3>Failures</h3>
<p>The hard drive died but time machine held my hand. At <a href="http://www.altnetseattle.org/">ALT.NET Seattle</a> 2009 my backpack took a dive that left a dent in one corner. The battery was replaced and I roped GrinGod into obtaining a replacement UK-style \ key from the UK after some frantic typing.</p>
<p>A friend cracked the display when his keyfob sprang from his Batbelt culminating in a visit of the Apple Store in Bellevue. Ten days and $700 later got that fixed and included a bonus disconnected thermal sensor, a couple of new scratches, an extra screw to rattle around inside and a line of grease around the Apple logo.</p>
<h3>Sticking with it</h3>
<p>When I find myself eying the unibody I wince at the glossy &#8216;matt finish&#8217; screen, the multi-touch trackpad clicks that sound like Robocop is nearby and a US keyboard that requires my pinky to hit a single-height enter key. That little pink dog won&#8217;t learn any new tricks. I&#8217;ve tried.</p>
<p>Still the OpenCL benchmark show the 8600M outperforming the newer 9400M and it does everything I need and at least one thing I don&#8217;t (gets hot enough to bake bread on). Short of switching the hard disk out for an SSD &#8211; I&#8217;ve ordered twice and then recalled after a Twitter volley of &#8220;no, you don&#8217;t want THAT one&#8221; &#8211; it&#8217;s here to stay for at least another year.</p>
<h3>Applications</h3>
<p>One thing that is always changing is the bunch of installed applications as I search for a combination that deliver a nirvana between productivity and enjoyment. Apps that perform a set of focused useful tasks with a shiny, eminently lick-able user interface, score highly.</p>
<p>I&#8217;ve rounded up my favourite apps before but here&#8217;s the latest specials on the menu.</p>
<h4>CleanMyMac</h4>
<p>This great-looking app helps <a href="http://www.macpaw.com/cleanmymac">reclaim wasted space</a> making it a pre-requisite for SSD switchers.</p>
<p>Combining the PowerPC and foreign language code-purging of XSlimmer &amp; TrimTheFat is also adds cache &amp; log purging in with application uninstalls ala AppZapper etc.</p>
<p>Despite using XSlimmer already on my machine it was able to reclaim another 1.8GB and V2 is out soon which I hope will remove &amp; alias duplicates given we&#8217;re not getting ZFS which had this feature (how many copies of Sparkle.framework do I have on my machine&#8230;.)</p>
<h4>Coda</h4>
<p>This year I rewrote my blog&#8217;s WordPress theme from scratch and given the PHP requirement I found myself looking for an alternate IDE to Visual Studio. I already own TextMate but the feel of a raw text editor with bundles of extra bits feel didn&#8217;t have the gloss and usability I wanted such as fast preview, remote FTP sync etc. with a minimal of setup fuss.</p>
<p>I briefly toyed with Espresso during the early development cycle but <a href="http://www.panic.com/coda/">Coda</a> won me over in the end with it&#8217;s sheer simplicity and elegance plus the addition of built-in documentation for PHP was very helpful when working offline.</p>
<h4>BetterTouchTool</h4>
<p>Yes, when the <a href="http://www.apple.com/magicmouse/">Magic Mouse</a> hit the street I picked one up. The idea of a mouse with trackpad multi-touch technology was appealing but a few minutes of use and no amount of twiddling would make it track  or let me configure it to take full advantage of what it should be able to do.</p>
<p>Until Apple sort this out <a href="http://blog.boastr.net/">BetterTouchTool</a> is your friend letting you speed up the tracking of the Magic Mouse, or indeed your trackpad, and assign all sorts of interesting shortcuts and abilities to combinations of finger gestures.</p>
<h4>Secrets</h4>
<p>Mac apps tend to expose only the common options in their user interfaces but sometimes developers add some additional tweaks and settings behind the scenes that live in the Mac&#8217;s equivalent of the registry (known as &#8220;<a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/defaults.1.html">defaults</a>&#8220;). While you can set these manually using the defaults command-line tool you still need to know the setting exists, it&#8217;s name and what options are available and so secrets exposes this.</p>
<p><a href="http://secrets.blacktree.com/">Secrets</a> is similar to Deeper and TinkerTool but the difference is that the secrets web site lets people add new options which then are automatically available within the installed preferences pane making them easily discoverable, searchable, applied&#8230; and occasionally undone.</p>
<h4>Machinarium</h4>
<p><img style="float: right;" title="Machinarium" src="http://images.damieng.com/blog/machinarium2.jpg" alt="Screenshot of the game Machinarium" width="256" height="162" />This <a href="http://machinarium.net/">point-and-click adventure game</a> will appeal to people who enjoyed Monkey Island although it feels more like the gorgeously submerging <a href="http://www.revolution.co.uk/_display.php?id=16">Beneath a Steel Sky</a>.</p>
<p>The scenery is brilliantly imagined, stylistic and shows that very real lived-in cities can be beautiful especially when populated by cute robots capable of assembling themselves from their own body-parts (just like a <a href="http://terminator.wikia.com/wiki/Series_888">triple 8</a> but infinitely cuter).</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2010/01/27/macbook-pro-two-year-check-in/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Origins of a love affair</title>
		<link>http://damieng.com/blog/2009/12/29/origins-of-a-love-affair?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=origins-of-a-love-affair</link>
		<comments>http://damieng.com/blog/2009/12/29/origins-of-a-love-affair#comments</comments>
		<pubDate>Tue, 29 Dec 2009 20:06:51 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[bbc micro]]></category>
		<category><![CDATA[sinclair]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1502</guid>
		<description><![CDATA[From an earliest memory of a cream coloured box emblazoned with letters, mostly black &#8211; some red, came an owl proclaiming allegiance to the BBC. This small box sat silently, patiently even, in our classroom for the best part of a year. On the few occasions our teacher was brave enough to flip the switch ]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/BBC_Micro"><img style="float: right; padding-left: 1em" title="BBC Micro Computer's Owl" src="http://images.damieng.com/blog/bbc-owl.jpg" alt="BBC Micro Computer's Owl" width="147" height="156" /></a>From an earliest memory of a cream coloured box emblazoned with letters, mostly black &#8211; some red, came an owl proclaiming allegiance to the BBC.</p>
<p>This small box sat silently, patiently even, in our classroom for the best part of a year. On the few occasions our teacher was brave enough to flip the switch the machine would chirp into life with it&#8217;s two-tone beep and would state on capital white letters on a black background that it was BASIC. At this point the teacher would key-in the mythical incantation of CHAIN &#8220;&#8221; &#8211; handily jotted on a nearby note &#8211; and feed the beast a cassette tape.</p>
<p>Some time later the machine would announce it&#8217;s vague disappointment with the contents of the tape and be put back to sleep.  One time, and one time only, I recall a screen full of bright colours masquerading as pirates looking for treasure.</p>
<p>I was 11.</p>
<p>Such a tantalising taste of computing left me hungry for more. I knew precisely two people who owned computers. One possessed a cut-down version of the BBC Micro from my classroom called the Acorn Electron and guarded it like a sacred treasure, the other was a friend and more accommodating so much so that he agreed, with little optimism, we could type my program listing into his computer.</p>
<p>What combination of childish scrawl, lack of understanding of programming concepts or the cobbled-together dialect of BASIC was responsible for his <a href="http://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A">Texas Instruments TI-99</a> rejecting my program I would never know. However neither that failure nor the subsequent arrival and rapid departure of a &#8216;programmable&#8217; <a href="http://computermuseum.50megs.com/brands/g7000.htm">Philips G7000 Videopac</a> from my home would quench my thirst.</p>
<p>A new school year started and for me that meant a new school and new subjects the most interesting of these was named Information Technology or IT for short. I don&#8217;t recall much of these early lessons other than some exposure to word processing, videotext and a simplified geometry-base programming language for drawing shapes called <a href="http://en.wikipedia.org/wiki/Logo_(programming_language)">Logo</a>.</p>
<p>This fixed schedule held little interest to me although the machines themselves did and the teacher opened the room of fifteen or so BBC Micro&#8217;s equipped with 5.25&#8243; floppy drives to the ever-changing line of misfits queued outside to play games. But unlike my old school a few people here actually knew a little about these machines.</p>
<p><a href="http://www.mobygames.com/game/chuckie-egg/">Chuckie Egg</a> and Mr. E were favourites while masochists would fire up <a href="http://video.google.co.uk/videoplay?docid=7967989481850456319&amp;q=castle+quest#">Castle Quest</a>, <a href="http://www.strafom.force9.co.uk/bbc/Retrobbc/Citadel/index.html">Citadel</a> and <a href="http://en.wikipedia.org/wiki/Repton_(video_game)">Repton 2</a> despite being impossible to complete and lacking a crucial save-game option. Fewer still braved the open-ended and <a href="http://en.wikipedia.org/wiki/Elite_(video_game)">Elite</a> space trading/combat game which would let you resume your position each day. Right on commander!</p>
<p>Games consisted of a few files passed between easily damaged 5.25&#8243; floppy disks that students had mysteriously acquired. Remembering which file to CHAIN, *EXEC or *LOAD was a task in itself made worse by the ever-changing scene of kids and games. Now I finally had a machine to myself for a brief period each day I set about solving the first real world problem I encountered here and wanted to create something that would automatically boot and let you select a game by pressing a letter or a number.</p>
<p>Scouring magazines, loaning one of the few <a href="http://mdfs.net/Software/BBCBasic/">BBC BASIC</a> programming manuals from the teacher and occasionally LISTing other people&#8217;s I came up with something that worked. Before long it had double height text, colours and some basic animation. Included in the program were some basic instructions on how to edit the program to fit the games on your own disk and it spread like wildfire.</p>
<p><a href="http://www.worldofspectrum.org"><img style="float: left; padding-right: 1em" title="Spectrum" src="http://images.damieng.com/blog/Spectrum.jpg" alt="" width="202" height="142" /></a>Shortly after my father, who made gadget trading one of his hobbies, brought home a <a href="http://worldofspectrum.org">Sinclair ZX Spectrum</a> 16KB. It was less powerful than the BBC&#8217;s at school and had to be hooked up to a television and cassette record to be of any use and had small rubber keys that were hard to type on. I played and programmed on it for hours without interruption and it finally became mine when my mother made it clear to my father it couldn&#8217;t be traded out for the next gadget. Within a few months the machine had died after something metallic got in through the edge connector.</p>
<p>I was heartbroken but found a neighbour was selling his Spectrum 48K and persuaded my parents to buy it. The extra memory was useful but even better was the hard-key keyboard and the original Sinclair BASIC programming manual I&#8217;d been missing. That year my parents split, my father moved out and we moved to a new parish on our little island of Guernsey which meant new friends and a new school. A school that had IT sharing lessons with technical drawing.</p>
<p>My hopes weren&#8217;t high&#8230;</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2009/12/29/origins-of-a-love-affair/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>First impressions of Snow Leopard</title>
		<link>http://damieng.com/blog/2009/08/29/first-impressions-of-snow-leopard?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=first-impressions-of-snow-leopard</link>
		<comments>http://damieng.com/blog/2009/08/29/first-impressions-of-snow-leopard#comments</comments>
		<pubDate>Sat, 29 Aug 2009 08:14:19 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Mac-OS-X]]></category>
		<category><![CDATA[snow leopard]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=1273</guid>
		<description><![CDATA[I came home from work today to find my family pack upgrade version of Snow Leopard. It&#8217;s been a few hours, so here are impressions so far. Packaging &#38; installation The packaging was very small and lightweight and eco-friendly compared to the big-plastic-box-monsters that come out of Redmond. Installation went mostly smoothly apart from an ]]></description>
			<content:encoded><![CDATA[<p>I came home from work today to find my family pack upgrade version of Snow Leopard. It&#8217;s been a few hours, so here are impressions so far.</p>
<h3>Packaging &amp; installation</h3>
<p>The packaging was very small and lightweight and eco-friendly compared to the big-plastic-box-monsters that come out of Redmond.</p>
<p>Installation went mostly smoothly apart from an abort-and-restart that seems to have been caused by my DVD drive flaking out on me. It&#8217;s been trouble since it came back from the Apple Store.</p>
<p>I had to run the separate Xcode installer to update that &#8211; it wasn&#8217;t automatically detected &#8211; which left me wondering if I need to manually install anything from the optional installs or not. Running Xcode before updating it not only failed to launch but left a background process I had to force quit with Actitity Monitor to let the installer upgrade it.</p>
<p>The less-is-more-approach followed through to disk space which freed up another 10.5 GB &#8211; impressive given that I had purged all the non-English language resources already using Monolingual and I elected to re-install the Rossetta PowerPC binary support.</p>
<h3>Noticeable changes</h3>
<p>Despite being an optimization release Apple squeezed a few features in to sweeten the deal the majority of which are documented at their site and in proper reviews. The ones I&#8217;ve encountered so far are:</p>
<h4>Location services, detect time-zone</h4>
<p><img src="http://images.damieng.com/blog/snow-timezone.png" alt="Screenshot of location aware time-zone in Snow Leopard" style="float:right" />Great for travelling users like myself, it found my nearest city instantly.</p>
<h4>AirPort status in menu bar</h4>
<p>Pop-up menu now shows signal strength of all other networks. (Hold down alt when popping up this menu to see detailed connection stats)</p>
<h4>Smoothing options</h4>
<p>Gone are the Automatic, light, medium and strong options replaced with a single &#8220;Use LCD font smoothing when available&#8221; option that <a href="http://blog.jjgod.org/2009/08/18/snow-leopard-vs-dell-lcd-displays/">isn&#8217;t too good at detecting third-party displays but you can activate the old hidden options</a>.</p>
<h4>Subpixel quality</h4>
<p>The rendering just looks plain wrong when booting. It has that awful colour-fringe that you see from time to time, the cause of which seems to be related to the default gamma (the curve on which digital colours become analogue levels) on <a href="http://support.apple.com/kb/HT3712?viewlocale=en_US">Mac OS X changing from 1.8 to the PC compatible 2.2</a>.</p>
<p>It seems however that the sub-pixel rendering algorithms haven&#8217;t been updated to correct this. There is absolutely no point in posting a screenshot as either your browser, screen or OS would make it appear different to how it did here.</p>
<p>Help is at hand though, you can head into the ColorSync Utility in your Applications folder and calibrate your display &#8211; just follow the instructions and set the gamma back to 1.8. It&#8217;s worth turning on &#8220;Expert&#8221; mode and spending a few minutes setting it up properly though.</p>
<h4>Unable to open NIBs</h4>
<p><img src="http://images.damieng.com/blog/no-compiled-nibs.png" alt="No compiled nibs error in Snow Leopard"  style="float:right" />I used to love opening up other people&#8217;s NIB files. You could in theory create your own customised versions of an applications interface. Localise it for yourself. Maybe even create a UK English version where Colour is spelt correctly.</p>
<p>No more.</p>
<p>Whether this was to save space or to prevent such hacking is anyone&#8217;s guess.</p>
<h3>Compatibility woes</h3>
<p>So far I&#8217;ve had a couple of things break:</p>
<ul>
<li><a href="http://cyberduck.ch/">Cyberduck</a> quits on launch &#8211; beta replacement is out</li>
<li>Xbox 360 controller extension (I don&#8217;t use it anymore anyway)</li>
<li><a href="http://www.islayer.com/apps/istatmenus/">iStat Menus</a> fails to launch &#8211; I need this to replace menu time with timezones and a drop-down calendar</li>
</ul>
<h3>Features I was expecting</h3>
<p>Given the lean-and-mean plus sensible small refinements I was expecting&#8230;</p>
<ol>
<li>Login Window keyboard shortcut &#8211; come on, seriously, with the secrecy at Apple surely you need this too?</li>
<li>Uninstaller &#8211; AWOL since the transition from OpenStep to NextStep and sorely needed</li>
<li>Language purging &#8211; I still don&#8217;t want French etc. on my laptop, odd omission given the reduction goals</li>
<li>System update framework &#8211; Other apps could use this too you know guys &#8211; and put clever delta&#8217;ing support in</li>
<li>Grab &#8211; STILL only saves in TIFF format. So I save it there, load into preview then into PNG. WTF??</li>
<li>Safari &#8211; should have an option to force new windows to open in a new tab</li>
</ol>
<p>I&#8217;d also love to see being able to pin documents to their dock icon and being able to push a window to an edge to tile like as these were two features I found useful in Windows 7. Talking of which when you hold the mouse button down on a dock icon it greys everything else out for a truly UAC-like moment every time you want to quit an app from the dock&#8230;</p>
<h3>The Menlo font</h3>
<p><a href="http://typophile.com/node/58625"><img src="http://images.damieng.com/blog/menlo-vs-vera.png" alt="Menlo and Vera Sans Mono overlaid for comparison" style="float:right" /></a>Apple needed to replace the ageing Monaco as it has poor international unicode support, has just a single style and poor hinting (it uses embedded bitmaps to look good without anti-aliasing in Terminal).</p>
<p>Given <a href="http://news.stanford.edu/news/2005/june15/jobs-061505.html">Steve Job&#8217;s apparently love of typography</a> would they commission a gorgeous new monospaced font as Microsoft did with <a href="http://www.ascendercorp.com/font/consolas/">Consolas</a>? No.</p>
<p>In 2003 Bitstream released the family <a href="http://www.gnome.org/fonts/">Bitstream Vera</a> under a free licence which included a great Sans Mono with bolt, italic and bold-italic variants. It even has some capable hinting so looks pretty good without anti-aliasing although could do with a few delta&#8217;s to clean that up. While it was short on the unicode support several forks filled in the gaps such as Deja Vu and Apple took Vera Sans Mono, grabbed some of these additions (adding 2900 glyphs) and tweaked some of the existing ones. Specifically they moved the vertical bar up on EBH, widened MN, shifted il, changed 0 from dotted to crossed and move/resized punctation then packed it up in a True Type Collection file that stores multiple TTF&#8217;s in a single file.</p>
<p>While these changes themselves look quite good &#8211; it seems they were optimizing for 14 point &#8211; in the process they destroyed the hinting for these glyphs despite the tiny amount of change made.<br />
<img src="http://images.damieng.com/blog/menlo-notepad.png" alt="Menlo on Windows in Notepad" /><img src="http://images.damieng.com/blog/menlo-aliased.png" alt="Menlo on Mac OS X in TextMate" /><br />
Spot which ones Apple modified on these screenshots (curiously Windows refuses to use the TTC file as it believes it is corrupt).</p>
<p><img src="http://images.damieng.com/blog/no-aliased-menlo.png" alt="Screenshot of Terminal preferences showing anti-aliasing forced for Menlo" style="float:left" />Apple is obviously aware it&#8217;s not a good job as the option to turn off anti-aliasing in Terminal when using Menlo is curiously disabled &#8211; this seems to be something hard-coded into Terminal.app as it doesn&#8217;t affect TextMate.</p>
<h3>Boot Camp</h3>
<p>Installation here was a little tricky as initially the installer told me that Boot Camp 64-bit was not supported on my computer model.</p>
<p>Whether they don&#8217;t support 64-bit Windows on a late 2007 MacBook Pro 17&#8243; (MacBookPro3,1) or whether it was complaining about Windows 7 isn&#8217;t clear as there are no Windows 7 specific drivers on the disk. </p>
<p>All is not lost however as if you navigate into Boot Camp\Drivers\Apple folder you can run the BootCamp.msi or BootCamp64.msi from there and it does not seem to perform the check. All the drivers installed without complaint and the trackpad, mouse, audio etc. is working just fine.</p>
<p><em>[)amien</em></p>
]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2009/08/29/first-impressions-of-snow-leopard/feed</wfw:commentRss>
		<slash:comments>6</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>
	</channel>
</rss>

