<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feed.damieng.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>DamienG</title>
	
	<link>http://damieng.com</link>
	<description>A .NET developer in silicon valley</description>
	<lastBuildDate>Mon, 06 May 2013 21:36:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feed.damieng.com/DamienG" /><feedburner:info uri="damieng" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feed.damieng.com/DamienG" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>Acer Aspire S7 review – two months in</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/V4b4jJxMj_Q/acer-aspire-s7-review-two-months-in</link>
		<comments>http://damieng.com/blog/2013/01/23/acer-aspire-s7-review-two-months-in#comments</comments>
		<pubDate>Wed, 23 Jan 2013 20:31:47 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[acer]]></category>
		<category><![CDATA[aspire]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[s7]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2529</guid>
		<description>Given my new focus on Windows 8 apps and the loss of my MacBook Pro I was in the market for a Windows 8 laptop. My requirements were that it had a touchscreen display with at least 1080p resolution, fast (i5 or better with an SSD) and very slim. You&amp;#8217;d be surprised at how such simple</description>
				<content:encoded><![CDATA[<p>Given my new focus on Windows 8 apps and the loss of my MacBook Pro I was in the market for a Windows 8 laptop.</p>
<p>My requirements were that it had a touchscreen display with at least 1080p resolution, fast (i5 or better with an SSD) and very slim. You&#8217;d be surprised at how such simple requirements leave you with such a small selection right now.</p>
<p>I settled on the <a href="http://www.amazon.com/gp/product/B00AVYPLF4?ie=UTF8&#038;camp=213733&#038;creative=393177&#038;creativeASIN=B00AVYPLF4&#038;linkCode=shr&#038;tag=dam-20&#038;qid=1365759902&#038;sr=8-1">Acer Aspire S7</a> although I had a couple of reservations as it supports a maximum of 4GB of RAM and a glossy display. Here&#8217;s my thoughts so far after two months of almost-daily use:</p>
<h2>Buying experience</h2>
<p>I picked up the machine from my local Microsoft Store in the mall. The process was quick and painless and I was in and out in under 10 minutes even though the store was rather busy. I did have to decline a free Windows 8 tutorial but otherwise it was plain sailing.</p>
<h2>Unboxing</h2>
<p>The product was well packed and nicely presented very much like an Apple product. The similarities ended there however as unlike Apple the box included a bunch of items Apple would charge extra for. These were:</p>
<ol>
<li>Leather-like slip-cover</li>
<li>Small Acer-branded Bluetooth mouse</li>
<li>USB to Ethernet adapter</li>
<li>Mini-HDMI to VGA adapter</li>
</ol>
<p>The adapters are very useful, the mouse of no use to me (I only use Logitech G5/G500&#8242;s) and the slip-cover I thought would be useful but is a bit unwieldy and it started to break after light use.</p>
<p>Anyone complaining that the machine doesn&#8217;t have Ethernet or VGA physically built into the device (I&#8217;m looking at you ZDNet) would do well to remember that both those connectors are thicker than this machine and there are plenty of thick klunky machines to choose from if having it built-in is important to you.</p>
<p>There is a good video on YouTube that shows somebody else actually going through the <a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CDcQtwIwAA&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DGyGMh17aEiw&amp;ei=NyUAUcS-GOS9igKr7YCQBA&amp;usg=AFQjCNHhh69WBCb3YqL7jzM1piBNcRgjFA&amp;bvm=bv.41248874,d.cGE">unboxing process</a>.</p>
<h2>Display</h2>
<p>The tiny 13.3&#8243; display sports almost the same resolution as my 24&#8243; Dell at 1600 x 1080 and at this size and resolution the screen is great. Small text is not unreadable  at the regular DPI and larger text feels smooth and refined.</p>
<p>The touch aspect of this screen is incredible and I&#8217;m able to reliably move 8 objects concurrently on the game we wrote called <a href="http://stickertales.com">Sticker Tales</a>. The display actually supports ten concurrent touch points but at 13.3&#8243; trying to find space for ten fingers to move is tricky unless you have tiny fingers.</p>
<p>That&#8217;s not to say everything about the display is good. As usual the gloss finish is incredibly annoying and within a week it has three indentations presumably from being pressed against small specs when closed against the keyboard although I&#8217;ve not seen the actual cause. Thankfully you can only spot them when the screen is mostly dark and the display is very bright and colorful.</p>
<p>Unlike some of the current touch-capable machines the screen on this one doesn&#8217;t completely flip over. It can however go completely flat&#8230; that might erm, be useful&#8230; to someone?</p>
<h2>Keyboard</h2>
<p>The keyboard is a mixed bunch. The basic layout and feel of the keyboard is good and it follows an almost-flush (2mm raised) chiclet style keyboard with back-lighting. Okay, that&#8217;s the good news.</p>
<p>The bad news is that there are no function keys so it&#8217;s Fn+numbers for those. The back-light comes on every time you bring the machine out of sleep and you have to tap Fn+U several times to get rid of it. There are a bunch of Fn special keys across Q through O the worst of which is Fn+T which is easily hit and turns off the trackpad with no notification. You&#8217;ll be incredibly confused the first couple of times you do this when you meant to press Ctrl+T to open a new tab.</p>
<p>Another annoyance for developers and power users is that the home/page up and end/page down are flush with the left and right arrows. Get used to typos. Symbols and the caps/enter keys are also a bit unusual too. Overall the keyboard feels more style over usability.</p>
<h2>Trackpad</h2>
<p>The trackpad is probably good enough for most people. Frankly my mind is so hard-wired from the hard-button on my pre-unibody Macbook Pro that I&#8217;ve been struggling with buttonless trackpads ever since. Thankfully the included software lets you disable some of the more annoying gestures like zoom if you&#8217;re having issues retraining your digits.</p>
<h2>Weight and size</h2>
<p>I have to admit the weight is awesome and despite my reservations after 4 years on a 17&#8243; laptop the size is great. I really wouldn&#8217;t want to go any smaller though and when I get my own personal machine (this Aspire is a work one) later this year it will likely be a 15&#8243; primarily because of the keyboard space limitations on a 13.3&#8243; and the fact I don&#8217;t want&#8230;</p>
<h2>Graphics</h2>
<p>Like all sub-15&#8243; ultrabooks you&#8217;re stuck with the <a href="http://www.videocardbenchmark.net/video_lookup.php?gpu=Intel+HD+4000">Intel HD 4000 graphic</a>s that are actually embedded inside the Ivy Bridge Intel Core i5/i7 CPU. Yes, even Apple&#8217;s 13&#8243; MacBook&#8217;s suffer this limitation too.</p>
<p>If you want better graphics performance in an Ultrabook you&#8217;re probably going to have to wait until June when Intel&#8217;s new replacement for Ivy Bridge comes out and the graphics get ramped again.</p>
<h2>Conclusion</h2>
<p>This is a great machine for overall regular and light usage but I can&#8217;t recommend it to developers.</p>
<p>The lack of function keys mixed with the 4GB RAM limit are going to be painful for users of virtual machines or IDEs. If Acer had sense they would up the RAM on the i7 version to 8GB to further differentiate the two.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=V4b4jJxMj_Q:yrzc1nx1w6c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=V4b4jJxMj_Q:yrzc1nx1w6c:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=V4b4jJxMj_Q:yrzc1nx1w6c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/V4b4jJxMj_Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2013/01/23/acer-aspire-s7-review-two-months-in/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2013/01/23/acer-aspire-s7-review-two-months-in?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=acer-aspire-s7-review-two-months-in</feedburner:origLink></item>
		<item>
		<title>For the love of pixels</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/QkIzDx4ftNk/for-the-love-of-pixels</link>
		<comments>http://damieng.com/blog/2012/12/02/for-the-love-of-pixels#comments</comments>
		<pubDate>Mon, 03 Dec 2012 00:51:25 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Icons]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[pixels]]></category>
		<category><![CDATA[retro]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2508</guid>
		<description>There&amp;#8217;s something entrancing about the pixel. Square and elegant and when pushed by the right people they can form beautiful art, stunning animations and gorgeously crisp text. But as resolution and pixel density increase these building blocks of the screen become smaller and individually insignificant especially as the dpi of displays hits 220+ppi. What once</description>
				<content:encoded><![CDATA[<p>There&#8217;s something entrancing about the pixel. Square and elegant and when pushed by the right people they can form beautiful art, stunning animations and gorgeously crisp text.</p>
<p>But as resolution and pixel density increase these building blocks of the screen become smaller and individually insignificant especially as the dpi of displays hits 220+ppi. What once was a building block of art and design becomes nothing more than a indistinct element in a photo-realistic image or a glint in a faux-texture supporting a <a href="http://realmacsoftware.com/blog/skeuomorphism-and-the-user-interface">skeuomorphism</a>.</p>
<p>And so the art style of the visible pixel is doomed… or is it?</p>
<h2>Games</h2>
<p><a href="http://swordandsworcery.com"><img src="http://images.damieng.com/blog/sworcery.png" alt="Screenshot of Sword and Sworcery" style="float:right" /></a>A resurgence in retro games over the last 10 years has helped keep pixels front-and-center (and sometimes off-screen to the right in the case of horizontal scrolling beat-em-ups).</p>
<p><a href="http://www.minecraft.net/">Minecraft</a> brought 3D pixel art to the mainstream with its wild success across PCs, iOS and even the Xbox. Some people say it&#8217;s despite the graphics but I think they&#8217;re part of the charm.</p>
<p><a href="http://www.skrillexquest.com/">Skrillex Quest</a> is a 3D Flash game with textures made up of large pixels and all manner of 8 and 16-bit style graphic corruption that lends to the retro feel while music from the man himself ensures your ears stays as overwhelmed as your eyes.</p>
<p><a href="http://www.swordandsworcery.com/">Sword &amp; Sworcery: EP</a> is a recent discovery for me but its gorgeous 2D landscape, fun story and great sound make for awesome atmosphere. It&#8217;s currently available on <a href="http://store.steampowered.com/app/204060/">Steam for the PC or Mac</a> and available from the <a href="http://itunes.apple.com/ca/app/superbrothers-sword-sworcery/id424912055?mt=8">iOS store too</a>.</p>
<p><a href="http://store.steampowered.com/sub/2102/">LucasArts Adventure Pack on Steam</a> gives you a bunch of point and click adventures including two installments of Indy, Loom and The Dig. They also have a <a href="http://store.steampowered.com/sub/6183/">Secret of Monkey Island 1 &amp; 2 Bundle</a> that has updated graphics but your can toggle back to the pixelated 256-color VGA version at any time.</p>
<p><a href="http://marketplace.xbox.com/en-US/Product/SCOTT-PILGRIM-THE-GAME/66acd000-77fe-1000-9115-d80258410a2c">Scott Pilgrim The Game</a> is a fun little horizontal-scrolling beat-up up created a couple of years back. Some of the <a href="http://boutain.blogspot.com/search/label/VIDEOGAMES">graphic</a> <a href="http://probertson.livejournal.com/33796.html">artists</a> have some great pages up showcasing their pixel animating talents.</p>
<p><a href="http://www.benjaminrivers.com/games/home/">Home from Benjamin Rivers</a> is a creepy whodunnit horror mystery where the story unfolds and changes based on your own actions. Who knew pixels could be so creepy.</p>
<h2>Art</h2>
<p><a href="http://www.effectgames.com/effect/article-Old_School_Color_Cycling_with_HTML5.html"><img src="http://images.damieng.com/blog/FallCity.png" alt="Fall City by Mark J. Ferrari" style="float:right"/></a><a href="http://hello.eboy.com/eboy/">eBoy</a> is a three-man team that has been creating isometric pixel art for years sometimes for magazines and adverts but primarily available as posters and wallpapers and now puzzles too.</p>
<p><a href="http://www.effectgames.com/effect/article-Old_School_Color_Cycling_with_HTML5.html">Color Cycling</a> revisits the technique of animating hand-illustrated Amiga artwork that achieved the effect of animation simply by cycling parts of the color palette. This effective technique was incredibly space efficient and was something every Deluxe Paint user tried (and likely failed) at some point.</p>
<p><a href="http://iotacons.blogspot.com">Iotacons</a> by Andy Rash are very low-resolution icons of various celebrities and well known pop-culture figures lovingly adorned in digital format and, on occasion, as a real-world cross-stitch.</p>
<p><a href="http://browse.deviantart.com/digitalart/pixelart/?order=9">DeviantArt</a> have an entire category dedicated to pixel art many of which are lovingly animated. If the cuteness of these pixels doesn&#8217;t make you miss them then nothing will.</p>
<p><a href="http://www.binaryzone.org/thezone/davidthorpe.php">F David Thorpe</a> produced some great loading screens for computers in the 80s despite their crazy technical limitations. Binary Zone has a great page that highlights some of his best.</p>
<p><a href="http://imgur.com/a/GPlx4">Animated backgrounds</a> from various fighting games look beautiful.</p>
<h2>Fonts &amp; icons</h2>
<p>I&#8217;ve covered some great pixel fonts from older <a href="http://damieng.com/blog/2011/02/20/typography-in-8-bits-system-fonts">8-bit</a> and <a href="http://damieng.com/blog/2011/03/27/typography-in-16-bits-system-fonts">16-bit</a> computers already but there are plenty more great examples to be found:</p>
<p><a href="http://fontstruct.com/gallery/tag/Pixel">FontStruct</a> is an online tool that lets you build fonts from blocks and so lends itself well to people wanting to reproduce bitmap fonts. They have almost 500 fonts in their gallery already tagged with &#8216;pixel&#8217;</p>
<p><a href="http://pixelfonts.style-force.net">Semplice Pixelfonts</a> has some beautiful proportional pixel fonts in TrueType format.</p>
<p>Guidebook has screenshots of various pixelated desktops throughout the years including shots of early <a href="http://www.guidebookgallery.org/guis/macos">Macintosh</a>, <a href="http://www.guidebookgallery.org/guis/amigaos">Amiga</a>, <a href="http://www.guidebookgallery.org/guis/tos">Atari</a>, <a href="http://www.guidebookgallery.org/guis/os2">OS/2</a> and <a href="http://www.guidebookgallery.org/icons/components">more</a>.</p>
<h2>Fashion</h2>
<p><a href="http://www.welovefine.com/117-8-bit"><img src="http://images.damieng.com/blog/StarWarsShirt.jpg" alt="Star Wars pixel shirt from We Love Fine" style="float:right" /></a>ThinkGeek have the <a href="http://www.thinkgeek.com/tshirts-apparel/unisex/popculture/78c6/">I See Dead Pixels T-Shirt</a>, the <a href="http://www.thinkgeek.com/tshirts-apparel/hats-ties/9352/?srp=7">8-bit tie</a> and the less practical <a href="http://www.thinkgeek.com/tshirts-apparel/accessories/e73d/?srp=4">8-bit hair bow</a>.</p>
<p>WeLoveFine also have a great selection of <a href="http://www.welovefine.com/117-8-bit">8-bit wears</a> just flowing over with pixels.</p>
<p>Red Bubble have a <a href="http://www.redbubble.com/people/f-zimba/works/3684422-mac-cursor-icons?p=t-shirt">Mac Cursor Icons T-shirt</a> that the original Apple fans can appreciate.</p>
<p>Even sunglasses get the pixel treatment in <a href="http://www.amazon.com/gp/product/B0080ATM56?ie=UTF8&amp;tag=dam-20&amp;linkCode=shr&amp;camp=213733&amp;creative=393177&amp;creativeASIN=B0080ATM56&amp;ref_=pd_sim_sbs_sg_1">black</a> or <a href="http://www.amazon.com/gp/product/B0080ATLM0?ie=UTF8&amp;tag=dam-20&amp;linkCode=shr&amp;camp=213733&amp;creative=393177&amp;creativeASIN=B0080ATLM0&amp;ref_=pd_sim_sbs_sg_1">blue</a>… or even regular <a href="http://www.amazon.com/gp/product/B0080ATPQC?ie=UTF8&amp;tag=dam-20&amp;linkCode=shr&amp;camp=213733&amp;creative=393177&amp;creativeASIN=B0080ATPQC&amp;ref_=pd_sim_sbs_sg_2">clear glasses</a>.</p>
<h2>In the real word</h2>
<p><a href="http://www.cubeecraft.com/blog/pixel-pages/%0A">Cube Craft Pixel Pages</a> consists of a bunch of icons you can print out, cut and fold to create a pixel-deep real-world rendering when placed against a solid surface.</p>
<p><a href="http://www.alexvaranese.com/work/mdi8b">My Desk is 8-bit</a> happened when Alex Varanese wondered what a video-game would look like rendered on his desk. It&#8217;s a labor of love 1:18 long video with great chip music too.</p>
<p><a href="http://www.buzzfeed.com/abrams/8-bit-artwork-in-swedish-subway-system">Swedish Subway</a> shows that the small square tiles that adorn the walls of subways can be put to creative use when you think of them as pixels such as this homage to video-games.</p>
<p><a href="http://store.artlebedev.com/toys/card-games/36-54/space-invaders/">Playing Cards</a> featuring pixel art including some from video games such as space invaders.</p>
<p><a href="http://www.minieco.co.uk/8-bit-popup-cards/">8-bit pop-up cards</a> are a fun way to make a gift card with more pixel goodness.</p>
<p>A love of pixels can however <a href="http://www.thecreatorsproject.com/blog/living-in-a-world-of-pixels">go too far</a>.</p>
<h2>Dithering</h2>
<p>Wikipedia has an excellent article on the screen resolutions and color capabilities of <a href="http://en.wikipedia.org/wiki/List_of_8-bit_computer_hardware_palettes">8-bit</a> and <a href="http://en.wikipedia.org/wiki/List_of_16-bit_computer_hardware_palettes">16-bit</a> computers. With such few colors available it was necessary to blend colors together to achieve the effect of more colors or shades.  This <a href="http://kitted.deviantart.com/art/DITHERING-TUTORIAL-Basics-69747353">tutorial at Deviantart</a> is a good start although there are a few different algorithms available including the most famous Floyd-Steinberg and the <a href="http://members.chello.at/theodor.lauppert/windows/colors/">ordered dithering of Windows</a> older users may be familiar with.</p>
<p><a href="http://www.derekyu.com/?page_id=226">Derek Yu</a>, <a href="http://www.pixel.schlet.net">Pixel Schlet</a> and <a href="http://garmahis.com/tutorials/pixel-art-tutorials/">Garmahis</a> provide tutorials showing you how to do it by hand!</p>
<h2>Further exploration for those still with me&#8230;</h2>
<p><a href="http://teletext.mb21.co.uk/gallery/">Teletext</a> (aka Videotex, Ceefax) was a low-resolution graphics system long before the Internet. It was available in some countries such as the UK via television and some early computer systems (Prestel, Micronet) used it over incredibly slow (1200/75bps) modems although it had a certain charm.</p>
<p>Creating graphics and pages in it was quite a challenge and I actually have a Cambridge University IT Certificate for doing so while at school where we also used a special adapter with our BBC Micro to let them <a href="http://teletext.mb21.co.uk/gallery/ceefax/telesoftware/">download programs by holding a TV aerial up and waiting a lot</a>. The French also had a system based on this called Minitel which was <a href="http://www.timesofoman.com/featuredetail.aspx?fid=493">shut down earlier this year</a> :(</p>
<p>Of course for the ultimate pixels experience you could also just dive back in to the old games such as those provided by <a href="http://www.gog.com">Good Old Games</a> (PC) on the amazing <a href="http://worldofspectrum.org">World of Spectrum</a>.  </p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=QkIzDx4ftNk:VGjmIS3FCgA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=QkIzDx4ftNk:VGjmIS3FCgA:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=QkIzDx4ftNk:VGjmIS3FCgA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/QkIzDx4ftNk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2012/12/02/for-the-love-of-pixels/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2012/12/02/for-the-love-of-pixels?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=for-the-love-of-pixels</feedburner:origLink></item>
		<item>
		<title>8 things you probably didn’t know about C#</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/Xx0vG3Lrxwk/8-things-you-probably-didnt-know-about-csharp</link>
		<comments>http://damieng.com/blog/2012/10/29/8-things-you-probably-didnt-know-about-csharp#comments</comments>
		<pubDate>Mon, 29 Oct 2012 09:31:36 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2478</guid>
		<description>Here&amp;#8217;s a few unusual things about C# that few C# developers seem to know about. 1. Indexers can use params We all know the regular indexer pattern x = something["a"] and to implement it you write: public string this[string key] { get { return internalDictionary[key]; } } But did you know that you can use</description>
				<content:encoded><![CDATA[<p>Here&#8217;s a few unusual things about C# that few C# developers seem to know about.</p>
<h2>1. Indexers can use params</h2>
<p>We all know the regular indexer pattern x = something["a"] and to implement it you write:</p>
<pre><code><strong>public string this</strong>[<strong>string</strong> key] {
  <strong>get</strong> { <strong>return</strong> internalDictionary[key]; }
}</code></pre>
<p>But did you know that you can use params to allow x = something["a", "b", "c", "d"] ?</p>
<p>Simply write your indexer like this:</p>
<pre><code><strong>public</strong> IEnumerable&lt;<strong>string</strong>&gt; <strong>this</strong>[<strong>params</strong> <strong>string</strong>[] keys] {
  <strong>get</strong> { <strong>return</strong> keys.Select(key =&gt; internalDictionary[key]).AsEnumerable(); }
}</code></pre>
<p>The cool thing is you can have both indexers in the same class side-by-side. If somebody passes an array or multiple args they get an IEnumerable back but call with a single arg and they get a single value.</p>
<h2>2. Strings defined multiple times in your code are folded into one instance</h2>
<p>Many developers believe that:</p>
<pre><code><strong>if</strong> (x == "" || x == "y")</code></pre>
<p>will create a couple of strings every time. <strong>It won&#8217;t.</strong></p>
<p>C#, like many languages, has <a href="http://www.dotnetperls.com/string-intern">string interning</a> and every string your app compiles with gets put into an in-memory list that is referenced at runtime.</p>
<p>You can use String.Intern to see if it&#8217;s currently in this list but bear in mind that doing String.Intern(&#8220;what&#8221;) == &#8220;what&#8221; will always return true as you just defined another string in your source. String.IsInterned(&#8220;wh&#8221; + &#8220;at&#8221;) == &#8220;what&#8221; will also return true thanks to compiler optimizations. String.IsInterned(new string(new char[] { &#8216;w&#8217;,'h&#8217;,'a&#8217;,'t&#8217; }) == new string(new char[] { &#8216;w&#8217;,'h&#8217;,'a&#8217;,'t&#8217; }) will only return true if you have &#8220;what&#8221; elsewhere in your program or something else at runtime has added it to the intern pool.</p>
<p>If you have classes that build up or retrieve regularly used strings at runtime consider using String.Intern to add them to the pool. Bear in mind once in they&#8217;re there until your app quits so use String.Intern carefully. The syntax is simply String.Intern(someClass.ToString())</p>
<p>Another caveat is that doing (object)&#8221;Hi&#8221; == (object)&#8221;Hi&#8221; will return <strong>true</strong> in your app thanks to interning. Try it in your debug intermediate window and it will be <strong>false</strong> as the debugger will not be interning your strings.</p>
<h2>3. Exposing types as a less capable type doesn&#8217;t prevent use as their real type</h2>
<p>A great example of this is when internal lists are exposed as IEnumerable properties, e.g.</p>
<pre><code><strong>private readonly</strong> List&lt;string&gt; internalStrings = <strong>new</strong> List&lt;string&gt;();
<strong>public</strong> IEnumerable&lt;<strong>string</strong>&gt; AllStrings { <strong>get</strong> { <strong>return</strong> internalStrings; }</code></pre>
<p>You&#8217;d likely think nobody can modify internal strings. Alas, it&#8217;s all too easy:</p>
<pre><code>((List&lt;<strong>string</strong>&gt;)x.AllStrings).Add("Hello");</code></pre>
<p>Even AsEnumerable won&#8217;t help as that&#8217;s a LINQ method that does nothing :( You can use AsReadOnly which creates a wrapper over the list that throws when you try and set anything however and provides a good pattern for doing similar things with your own classes should you need to expose a subset of internal structures if unavoidable.</p>
<h2>4. Variables in methods can be scoped with just braces</h2>
<p>In Pascal you had to declare all the variables your function would use at the start of the function. Thankfully today the declarations can live next to their assignment and use which prevents acidentally using the variable before you intended to.</p>
<p>What it doesn&#8217;t do is stop you using it after you intended. Given that for/if/while/using etc. all allow a nested scope it should come as only mild surprise that you can declare variables within braces without a keyword to achieve the same result:</p>
<pre><code><strong>private void</strong> MultipleScopes() {
  { <strong>var</strong> a = 1; Console.WriteLine(a); }
  { <strong>var</strong> b = 2; Console.WriteLine(a); }
}</code></pre>
<p>It&#8217;s almost useful as now the second copy-and-pasted code block doesn&#8217;t compile but a much better solution is to split your method into smaller ones using the extract method refactoring.</p>
<h2>5. Enums can have extension methods</h2>
<p>Extension methods provide a way to write methods for existing classes in a way other people on your team might actually discover and use. Given that enums are classes like any other it shouldn&#8217;t be too surprising that you can extend them, like:</p>
<pre><code><strong>enum</strong> Duration { Day, Week, Month };

<strong>static class</strong> DurationExtensions {
  <strong>public static</strong> DateTime From(<strong>this</strong> Duration duration, DateTime dateTime) {
    <strong>switch</strong> duration {
      <strong>case</strong> Day: <strong>  return</strong> dateTime.AddDays(1);
      <strong>case</strong> Week:<strong>  return</strong> dateTime.AddDays(7);
      <strong>case</strong> Month: <strong>return</strong> dateTime.AddMonths(1);
      <strong>default</strong>: <strong>   throw new</strong> ArgumentOutOfRangeException("duration")
    }
  }
}</code></pre>
<p>I think enums are evil but at least this lets you centralize some of the switch/if handling and abstract them away a bit until you can do something better. Remember to check the values are in range too.</p>
<h2>6. Order of static variable declaration in your source code matters</h2>
<p>Some people insist that variables are ordered alphabetically and there are tools around that can reorder for you&#8230; however there is one scenario where re-ording can break your app.</p>
<pre><code><strong>static class</strong> Program {
  <strong>private static int</strong> a = 5;
  <strong>private static int</strong> b = a;

  <strong>static void</strong> Main(<strong>string</strong>[] args) {
   Console.WriteLine(b);
  }
}</code></pre>
<p>This will print the value <strong>5</strong>. Reorder the a and b declarations and it will output <strong>0</strong>.</p>
<h2>7. Private instance variables of a class can be accessed by other instances</h2>
<p>You might think the following code wouldn&#8217;t work:</p>
<pre><code><strong>class</strong> KeepSecret {
  <strong>private int</strong> someSecret;
  <strong>public bool</strong> Equals(KeepSecret other) {
    <strong>return</strong> other.someSecret == someSecret;
  }
}</code></pre>
<p>It&#8217;s easy to think of private as meaning only this instance of a class can access them but the reality is it means only this class can access it&#8230; including other instances of this class. It&#8217;s actually quite useful for some comparison methods.</p>
<h2>8. The C# Language specification is already on your computer</h2>
<p>Providing you have Visual Studio installed you can find it in your Visual Studio folder in your Program Files folder (x86 if on a 64-bit machine) within the <strong>VC#\Specifications</strong> folder. VS 2010 comes with the C# 5.0 document in Word format.</p>
<p>It&#8217;s full of many more interesting facts such as:</p>
<ul>
<li>i = 1 is atomic (thread-safe) for an <strong>int</strong> but not <strong>long</strong></li>
<li>You can &amp; and | nullable booleans with SQL compatibility</li>
<li>[Conditional("DEBUG")] is more useful than #if DEBUG</li>
</ul>
<p>And to those of you that say &#8220;I knew all/most of these!&#8221; I say &#8220;Where are you when I&#8217;m recruiting!&#8221; Seriously, it&#8217;s hard enough trying to find C# devs with a solid understanding of the well-know parts of the language.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=Xx0vG3Lrxwk:WS7QBcAwAkU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=Xx0vG3Lrxwk:WS7QBcAwAkU:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=Xx0vG3Lrxwk:WS7QBcAwAkU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/Xx0vG3Lrxwk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2012/10/29/8-things-you-probably-didnt-know-about-csharp/feed</wfw:commentRss>
		<slash:comments>35</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2012/10/29/8-things-you-probably-didnt-know-about-csharp?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=8-things-you-probably-didnt-know-about-csharp</feedburner:origLink></item>
		<item>
		<title>Using your Xbox Kinect as a webcam for Skype on Windows</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/gzTXlN5EkRo/using-your-xbox-kinect-as-a-webcam-for-skype-on-windows</link>
		<comments>http://damieng.com/blog/2012/09/23/using-your-xbox-kinect-as-a-webcam-for-skype-on-windows#comments</comments>
		<pubDate>Sun, 23 Sep 2012 20:51:13 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2467</guid>
		<description>Thanks should go to ScottOrange on the MSDN forums however it&amp;#8217;s along thread that has lots of pieces to pick out and try. Still getting odd noise, corruption and other issues in Skype. Wouldn&amp;#8217;t recommend using a Kinect as a webcam on Windows right now. What worked for me (eventually): Download the Kinect SDK from</description>
				<content:encoded><![CDATA[<p>Thanks should go to <a href="http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/thread/4ee6e7ca-123d-4838-82b6-e5816bf6529c">ScottOrange on the MSDN forums</a> however it&#8217;s along thread that has lots of pieces to pick out and try.</p>
<p class="alert">Still getting odd noise, corruption and other issues in Skype. Wouldn&#8217;t recommend using a Kinect as a webcam on Windows right now.</p>
<p>What worked for me (eventually):</p>
<ol>
<li>Download the <a href="http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx">Kinect SDK from Microsoft</a></li>
<li>Install the <a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=5555">Visual Studio 2010 Runtime</a> if you don&#8217;t already have it</li>
<li>Go to the <a href="https://kinectcpp.googlecode.com/svn/trunk/install/">KinectCPP site</a> and download KINECTSQM.DLL and MSRKINECTNUI.DLL</li>
<li>Create a folder for your Kinect camera drivers to live and copy those two files there</li>
<li>Go to <a href="https://github.com/wildbillcat/KinectCam/tree/master/Compiled/32bit">Wildbill&#8217;s Github repo</a> and download the three files there into the same folder</li>
<li>Open a Command Prompt as <strong>Administrator </strong>and CD into the folder<strong><br />
</strong></li>
<li>Type <strong>install</strong> and press return</li>
</ol>
<p>You should get a success message. If you don&#8217;t then you probably missed steps 2 or 3 &#8211; if all else fails open KinectCam.ax in <a href="http://www.dependencywalker.com/">Dependency Walker</a> and see which DLL it claims it can&#8217;t find. (the IESHIM one missing is fine)</p>
<p>Restart Skype and see if it shows up in the list of cameras. If it doesn&#8217;t.</p>
<ol>
<li>Quit Skype entirely</li>
<li>Go to %appdata%\Skype\shared_dynco in Windows Explorer</li>
<li>Delete dc.db</li>
<li>Restart Skype</li>
</ol>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=gzTXlN5EkRo:6gd2ApVM8mc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=gzTXlN5EkRo:6gd2ApVM8mc:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=gzTXlN5EkRo:6gd2ApVM8mc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/gzTXlN5EkRo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2012/09/23/using-your-xbox-kinect-as-a-webcam-for-skype-on-windows/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2012/09/23/using-your-xbox-kinect-as-a-webcam-for-skype-on-windows?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=using-your-xbox-kinect-as-a-webcam-for-skype-on-windows</feedburner:origLink></item>
		<item>
		<title>Building a great Windows 8 developer &amp; gaming desktop for $900-$1500</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/9999MQQ_AxU/building-a-great-windows-8-developer-gaming-desktop-for-900-1500</link>
		<comments>http://damieng.com/blog/2012/08/24/building-a-great-windows-8-developer-gaming-desktop-for-900-1500#comments</comments>
		<pubDate>Fri, 24 Aug 2012 17:39:08 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[corsair]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[selfbuild]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2422</guid>
		<description>With Windows 8 right around the corner it&amp;#8217;s time to build a new desktop PC that will scream for both development and gaming. Having set a personal budget of around $1500 I started the arduous process that every DIY PC builder has gone through&amp;#8230; researching parts and playing with specifications until it feels just right.</description>
				<content:encoded><![CDATA[<p><img style="float: right;" src="http://images.damieng.com/blog/PC-2012-parts.jpg" alt="Parts for my PC build" />With Windows 8 right around the corner it&#8217;s time to build a new desktop PC that will scream for both development and gaming.</p>
<p>Having set a personal budget of around $1500 I started the arduous process that every DIY PC builder has gone through&#8230; researching parts and playing with specifications until it feels just right.</p>
<p>These are the parts I finally landed on and a second choice if my budget was lower that would deliver almost as much for a lot less.</p>
<p>Please note that Amazon prices go up and down all the time so keep an eye on your basket! :)</p>
<p>My list doesn&#8217;t include a keyboard, mouse or monitor as I already have ones I love. You probably do too.</p>
<h2>Processor</h2>
<p><a href="http://www.amazon.com/gp/product/B007SZ0EOW/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007SZ0EOW&amp;linkCode=as2&amp;tag=dam-20">Intel Core i7-3770K 3.5GHz Quad-Core</a> $340</p>
<p>I went with Intel&#8217;s fastest i7 non-Extreme desktop chip that allows overclocking in case I felt like going that way (I haven&#8217;t yet).</p>
<p>If running virtual machines are an important part of your life &#8211; and for many developers that&#8217;s true &#8211; then check out the <a href="http://www.amazon.com/gp/product/B007SZ0EOM/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007SZ0EOM&amp;linkCode=as2&amp;tag=dam-20">Intel Core i7-3770S</a> which has <a href="http://www.intel.com/technology/itj/2006/v10i3/2-io/7-conclusion.htm">Intel Virtualization for Directed IO (vt-D) </a>but gives up the overclocking and runs at a more modest 3.1GHz.</p>
<p><em>Cheaper:</em> <a href="http://www.amazon.com/gp/product/B007SZ0E1K/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007SZ0E1K&amp;linkCode=as2&amp;tag=dam-20">Intel Core i5-3570K Quad Core</a> comes in at $100 less and provides very similar performance for games as the main difference is the reduced cache and lack of hyper-threading. If you&#8217;re not running heavily-multithreaded applications you&#8217;re unlikely to notice much difference in performance.</p>
<h2>Mainboard</h2>
<p><a href="http://www.amazon.com/gp/product/B007QWIA52/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007QWIA52&amp;linkCode=as2&amp;tag=dam-20">MSI Z77A-GD65</a> $176</p>
<p>This &#8220;military-grade&#8221; Intel Z77 chipset based motherboard from MSI works great with the 3770K chip and provides 4 USB 3.0 sockets and 4 SATA 6Gbps ports instead of the usual 2 givinf up PCI slots entirely for 3 PCIe instead. It can support three graphics cards in either SLI or CrossFire in x8/x4/x4 configurations and has Intel networking.</p>
<p>Cooling has been carefully thought out and includes head-pipes and a low-profile heat-sink. With a two-digit debug display, dual BIOS, UEFI support and one-button overclocking it&#8217;s hard to mess this up.</p>
<p>BIOS flash update was painless.I didn&#8217;t have much luck with MSI&#8217;s Live Update as it doesn&#8217;t actually install things so just head to the driver download page and pick the drivers you&#8217;ll be using. In my case I skipped a number of the Intel ones such as the graphics, etc. You might be tempted to head to Intel&#8217;s site instead but I found newer versions were actually available from MSI instead.</p>
<p><em>Cheaper:</em> <a href="http://www.amazon.com/gp/product/B007R21JWC/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007R21JWC&amp;linkCode=as2&amp;tag=dam-20">Gigabyte GA-Z77-DS3H</a> $99 has good reviews and includes the dual UEFI BIOS too but looses the x8/x4/x4 mode for 3 graphics cards, Atheros networking and is not as overclocking-friendly.</p>
<h2>RAM</h2>
<p><a href="http://www.amazon.com/gp/product/B007TG8QRW/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007TG8QRW&amp;linkCode=as2&amp;tag=dam-20">Corsair Vengeance LP 16GB (2 x 8GB) DDR3-1600</a> $93</p>
<p>Corsair are a well known brand with a solid reputation. This RAM is fast at 10-10-10-27 timings, low-profile (don&#8217;t get in the way of large CPU coolers) and is provided as two 8GB modules not four 4GB which leaves you room to upgrade nicely in the future.</p>
<p>That is the RAM I meant to buy &#8211; alas I picked up the older XMS3 which is slower (11-11-11-30 at 1600MHz) and not recommended.</p>
<p><em>Cheaper</em>: <a href="http://www.amazon.com/gp/product/B00569K7LM/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B00569K7LM&amp;linkCode=as2&amp;tag=dam-20">Corsair 8GB</a> for $45 offering the same performance at half the capacity should be good enough for most games and development projects.</p>
<h2>Storage</h2>
<p><a href="http://www.amazon.com/gp/product/B0077CR66A/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0077CR66A&amp;linkCode=as2&amp;tag=dam-20">Samsung 830 Series 256GB 2.5&#8243; SSD</a> $198</p>
<p>I&#8217;ve been maintaining my <a href="http://damieng.com/blog/2010/04/09/macbook-pro-upgrade-to-crucial-256gb-ssd">MacBook SSD article</a> over the last few years and originally picked the Crucial C300 series that was supersceded by the M4 and now I think the sweet spot in price, performance and reliability is the Samsung 830.</p>
<p><em>Cheaper:</em> At $114 the <a href="http://www.amazon.com/gp/product/B0077CR60Q/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0077CR60Q&amp;linkCode=as2&amp;tag=dam-20">128GB model of the Samsung 830</a> is hard to pass up.</p>
<p>If you need a lot more storage pair it with a <a href="http://www.amazon.com/gp/product/B004VFJ9MK/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004VFJ9MK&amp;linkCode=as2&amp;tag=dam-20">2.5TB Western Digital Caviar Green</a> for $129 more to hold files that aren&#8217;t performance critical like video, music, photos etc.</p>
<h2>Video card</h2>
<p><a href="http://www.amazon.com/gp/product/B007KC1R9E/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007KC1R9E&amp;linkCode=as2&amp;tag=dam-20">EVGA GeForce GTX 680 2GB Superclocked</a> $499</p>
<p>Nvidia and ATI still battle it our going back and forth as leaders in a market that seems rather stale.  I couldn&#8217;t resist aiming high-end card (the GTX 690 is just insane in both perf and price) and so settled on the GTX 680.</p>
<p>With most manufacturers basing their cards on the reference designs the only real choice is the bundle and RAM and clock speed tweaks. The EVGA comes in at a good price and the superclocked version nudges up the perf for no extra cost.</p>
<p><em>Cheaper:</em> The <strong>cheapest</strong> option would be to use the Intel HD 4000 graphics built into the CPU but gaming performance will suffer. I&#8217;d go for the <a href="http://www.amazon.com/gp/product/B008S15X3W/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B008S15X3W&amp;linkCode=as2&amp;tag=dam-20">EVGA GTX 660Ti 2GB</a> at $299 instead.</p>
<h2>Case</h2>
<p><a href="http://www.amazon.com/gp/product/B000GQMHBI/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B000GQMHBI&amp;linkCode=as2&amp;tag=dam-20">Antec One Hundred ATX Mid Tower</a> $47</p>
<p>I had a hard time choosing a case. My last PC was in the deliciously simple black Lian-Li PC60 all-aluminum and today&#8217;s market felt limited once you discount the spiky, alien or nightclub themed offerings.</p>
<p>The Antec One Hundred has a lot of positive reviews and has a nice black mesh look and painted interior for a very low price. The power supply lives in the bottom to provide better cooling and a lower center of balance. Cooling is via two two-speed fans at the rear either side of the CPU &#8211; a 120mm on the back and a 140mm at the top with air coming through the front of the case which appears as 9 mesh sections although only the top 3 are actually removable 5.25&#8243; bays and the fourth segment holding a removable 3.5&#8243; one.</p>
<p><em>Cheaper:</em> For under $47 you could um&#8230; leave all the pieces in a pile on your desk separated with pieces of cardboard.</p>
<h2>Power supply</h2>
<p><a href="http://www.amazon.com/gp/product/B003PJ6QWE/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B003PJ6QWE&amp;linkCode=as2&amp;tag=dam-20">Corsair AX750W ATX12V / EPS12V</a> $156</p>
<p>I&#8217;ve had a fair amount of bad experience with poor power supplies. Some have blown out, rattled, tripped or turned out to be responsible for instabilities.</p>
<p>This time I decided to pay off the power gremlins with a very high quality, quiet, efficient and powerful-but-not-crazy power supply and I also wanted modular.</p>
<p>The cables came in a smart little sturdy bag and so assembly was a case of finding the right cable then routing it down to the power supply and finding the right offset in one of the two long banks of almost identical looking connectors. This was a little tricky but the connectors won&#8217;t let you put them in the wrong place.</p>
<p><em>Cheaper:</em> <a href="http://www.amazon.com/gp/product/B004W2T2UQ/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004W2T2UQ&amp;linkCode=as2&amp;tag=dam-20">Corsair&#8217;s CX600W</a> $61 is half the price but gives up the modularity, some power and efficiency and is quite likely produces more noise.</p>
<h2>Build notes &amp; noise</h2>
<p><img style="float: left;" src="http://images.damieng.com/blog/PC-2012-front.jpg" alt="Front of my new PC" />My machine is now fully assembled and running Windows 8 RTM and Visual Studio 2012 and Steam connected to my existing favorite Dell 2408WFP display, <a href="http://damieng.com/blog/2007/09/11/in-search-of-the-perfect-keyboard">IBM Model M Keyboard</a> and <a href="http://www.amazon.com/gp/product/B002J9GDXI/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002J9GDXI&amp;linkCode=as2&amp;tag=dam-20">Logitech G500 mouse</a>.</p>
<p>Self builds are never completely smooth and I was under the impression the 3770K did not come with a fan. It does but at that point I already purchased and unwrapped a <a href="http://www.amazon.com/gp/product/B001NJ0D0Y/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001NJ0D0Y&amp;linkCode=as2&amp;tag=dam-20">CoolerMaster HyperN 520</a> seduced by the promise of a quiet 19dBA.</p>
<p>Noise is an important issue for me and running six fans (120mm back case, 140mm top case, 2x80mm cpu, power supply, graphics) was never going to be an acceptable option.Thankfully the power-supply fan is rarely even on and the 680 fan is very quiet.</p>
<p>The first step was to remove the CPU fans as they were the loudest and surprisingly the CPU did not get too hot &#8211; quite likely due to the sheer size of the heat-sink of the 520. Experimenting with the case fans revealed that the just the 120mm fan on low provided the least noise and still kept things reasonably quiet and plenty cool enough.</p>
<p>I wasn&#8217;t done yet while I could still hear it so tried a couple of replacement fans before settling on a <a href="http://www.amazon.com/gp/product/B003AVMRPM/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B003AVMRPM&amp;linkCode=as2&amp;tag=dam-20">Cooler Master Excalibur 120mm</a>. This fan can be speed-controlled by the motherboard as it supports the 4-pin PWM system and given it&#8217;s close proximity to the CPU head-sink I plugged it into the CPU fan socket and configured the BIOS to control it to keep the CPU under 70 degrees C.</p>
<p>It runs whisper-quiet at 800 RPM when under normal workloads.</p>
<p><img style="float: right;" src="http://images.damieng.com/blog/PC-2012-side.jpg" alt="A peek inside... I call her Alice." /></p>
<p>I couldn&#8217;t help but try the magic one-press overclock button on the motherboard and watch the machine hit 4.2GHz which ran just fine for hours. If anything is holding that back it&#8217;s the fact I ordered slower Corsair memory by mistake :(</p>
<h2 style="clear: left;">Still to come</h2>
<p>Now that cooling is done (see above) my main areas of focus are:</p>
<ol>
<li>Try getting Intel 4000HD graphics switching via Virtu working on Windows 8 so that power usage drops under light loads</li>
<li>Keeping an eye on disk space to see whether I should get a large mechanical drive or a second 256GB SSD&#8230; or perhaps a third in RAID-5.</li>
</ol>
<p>In case you want to see the whole thing on Amazon I created a Listmania list <a href="http://www.amazon.com/lm/RMQD7F716ND40/?_encoding=UTF8&amp;camp=1789&amp;creative=390957&amp;linkCode=ur2&amp;lm_bb=&amp;tag=dam-20">Great Windows 8 gaming &amp; developer PC self-build</a>.</p>
<h2>Performance</h2>
<p>As promised here are some performance figures for my machine (with slower Corsair than above but 32GB of it) using <a href="http://www.geforce.com/drivers/results/48847">Nvidia&#8217;s 306.23 WHQL drivers</a> on Windows 8 64-bit RTM.</p>
<table>
<tbody>
<tr>
<th>Component</th>
<th>Details</th>
<th>Subscore</th>
<th style="text-align: center;">Base score</th>
</tr>
<tr>
<th>Processor</th>
<td>Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz</td>
<td>8.2</td>
<td style="vertical-align: middle; text-align: center;" rowspan="5">
<div style="font-size: 3em;">8.1</div>
<div style="font-size: 0.75em;">Determined by lowest subscore</div>
</td>
</tr>
<tr>
<th>Memory (RAM)</th>
<td>32.0 GB</td>
<td>8.2</td>
</tr>
<tr>
<th>Graphics</th>
<td>NVIDIA GeForce GTX 680</td>
<td>8.1</td>
</tr>
<tr>
<th>Gaming graphics</th>
<td>4095 MB Total available graphics memory</td>
<td>8.1</td>
</tr>
<tr>
<th>Primary hard disk</th>
<td>72GB Free (238GB Total)</td>
<td>8.1</td>
</tr>
</tbody>
</table>
<p><em>[)amien</em></p>
<p><em>PS I can&#8217;t believe it&#8217;s been <a href="http://damieng.com/blog/2005/05/22/hardware-upgrades-part-1">7 years since I last built a PC!</a></em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=9999MQQ_AxU:JLi-yvJUmNY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=9999MQQ_AxU:JLi-yvJUmNY:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=9999MQQ_AxU:JLi-yvJUmNY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/9999MQQ_AxU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2012/08/24/building-a-great-windows-8-developer-gaming-desktop-for-900-1500/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2012/08/24/building-a-great-windows-8-developer-gaming-desktop-for-900-1500?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=building-a-great-windows-8-developer-gaming-desktop-for-900-1500</feedburner:origLink></item>
		<item>
		<title>Designing a great API</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/NURnDoUpvwU/designing-a-great-api</link>
		<comments>http://damieng.com/blog/2011/11/29/designing-a-great-api#comments</comments>
		<pubDate>Tue, 29 Nov 2011 09:16:44 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2311</guid>
		<description>Several years ago I worked on a payroll package developing a core engine that required an API to let third parties write calculations, validations and security gates that would execute as part of it&amp;#8217;s regular operation. We were a small team and I had many conversations with another developer tasked with building a payroll using</description>
				<content:encoded><![CDATA[<p>Several years ago I worked on a payroll package developing a core engine that required an API to let third parties write calculations, validations and security gates that would execute as part of it&#8217;s regular operation.</p>
<p>We were a small team and I had many conversations with another developer tasked with building a payroll using the API I would provide. Some methods here, classes there, the odd helper function and I had an API and then we had a mini payroll running.</p>
<p>Then he showed me the code he had written and that smug grin dropped off my face. It was awful.</p>
<p>Perhaps this other developer wasn&#8217;t as great as I&#8217;d thought? Looking at the code though made me realise he had done the best anyone could with a terrible API. I&#8217;d exposed parts of this core payroll engine with hooks when it needed a decision. Its job was to run the payroll &#8211; a very complex task that involved storage, translation, time periods, users and companies. That complexity and context had leaked out.</p>
<p>Unfortunately it&#8217;s not a unique story &#8211; many API&#8217;s are terrible to use. They&#8217;re concerned with their own terminology, limitations and quirks because they are exposed sections of an underlying system developed by those responsible for the underlying system.</p>
<p>If you want others to have a good experience with your product you have to put yourself in their shoes. Whether it&#8217;s a UI or an API makes no difference.</p>
<h3>You are not the user</h3>
<p>That&#8217;s the real difference between writing the classes that form your regular implementation and those that make up your public API.</p>
<p>We had time to fix our payroll API. Instead of refining and polishing here and there we took the 20 or so snippets developed for the mini payroll and pruned, cleaned and polished until they looked beautiful. They scanned well and made sense to payroll developers unfamiliar with our package. When a third developer familiar with payrolls but unfamiliar with out package developed the necessary code for a fully-functional jurisdiction in record time with minimal assistance we knew we had hit our goal.</p>
<p>Sure implementing that new API was hard work. Instead of simple methods sticking out of the engine we had a <a href="http://en.wikipedia.org/wiki/Facade_pattern">facade</a> over our engine but it was justified. They were two different systems for two different types of user with distinct ideas about what the system was and how it was going to be used.</p>
<h3>Code First</h3>
<p>Many years later I found myself on a small team of 3 people tasked with putting a brand new API on top of Entity Framework for configuring models with code the .NET world would come to know as Code First. I was determined to use my experience and avoid another complex API surface littered with terminology and leaky abstractions. Parts of EF already suffered from that problem.</p>
<p>So for the first few weeks of that project we didn&#8217;t write any of the code that would in fact become Code First.</p>
<p>Instead we decided who our user was &#8211; in this case a C# developer who likes writing code, knows LINQ and some database concepts but doesn&#8217;t know Entity Framework as people who did were already using Model First or Database First.</p>
<p>Then we wrote tiny sample apps and tried to find simpler and simpler ways to describe them in code. We&#8217;d often start on a whiteboard with a scenario and write the complete mapping. We&#8217;d then try and find conventions that would remove the need for most of it and then try to write succinct code to configure the rest. As the newest guy to the team I&#8217;d fight to keep EF terms away from the main API surface in order to reduce that barrier to entry and help drive adoption.</p>
<p>Finally we&#8217;d hit the computer and develop stub classes and methods to make samples compile and let us try the IntelliSense. This isn&#8217;t always necessary but if you want to develop a fluent API or provide lots of type-safety such as Code First&#8217;s relationship mapping it&#8217;s highly recommended.</p>
<p>We&#8217;d then revisit the samples later and see if they could be read as easily as they were written and figure out what problems people were likely to run into and whether we could solve them without too much noise. Sometimes this meant having more than one way to do things such as chaining the fluent methods or allowing a bunch of properties to be set (solved with an extension method class providing the fluent API) and how users could manage larger models (solved by subclassing EntityConfiguration&lt;T&gt; &#8211; now EntityTypeConfiguration&lt;T&gt; sigh &#8211; and allowing redundant specification for things like relationships that span more than one class).</p>
<p>We finally ended up with succinct code like this with IntelliSense guiding you along the way and preventing you from even being able to specify invalid combinations. The HasMany prompts the properties on Customer and it won&#8217;t show you WithRequired unless it is valid. In the case of Required to Required it will ensure that the WithRequired specified which end is principle and dependent. In short it guides you through the process and results in highly readable code.</p>
<pre><code>Entity&lt;Customer&gt;().HasMany(c =&gt; c.Orders).WithRequired(o =&gt; o.Customer).WillCascadeOnDelete();</code></pre>
<p>This process took a little longer but given the amount of use the API will get that time will be saved by users countless times over.</p>
<p>Code First went down incredibly well with both the target audience and existing EF users and inspired the simpler DbContext interface that became the recommended way of accessing EF.</p>
<p>I think it&#8217;s one of the nicest API&#8217;s to come out of Microsoft and .NET.</p>
<p><em>[)amien</em></p>
<p>PS. Martin Fowler has some great guidance in his book <a href="http://www.amazon.com/gp/product/0321712943/ref=as_li_ss_tl?ie=UTF8&amp;tag=dam-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0321712943">Domain Specific Languages</a>.</p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=NURnDoUpvwU:2h8ZjQiSHn8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=NURnDoUpvwU:2h8ZjQiSHn8:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=NURnDoUpvwU:2h8ZjQiSHn8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/NURnDoUpvwU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2011/11/29/designing-a-great-api/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2011/11/29/designing-a-great-api?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=designing-a-great-api</feedburner:origLink></item>
		<item>
		<title>My one-year check-in with my Windows Phone 7</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/WN3z6PobcRE/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>It&amp;#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&amp;#8217;t sure I&amp;#8217;d last&amp;#8230; Contact &amp;#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>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=WN3z6PobcRE:n-gn5PnwXbY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=WN3z6PobcRE:n-gn5PnwXbY:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=WN3z6PobcRE:n-gn5PnwXbY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/WN3z6PobcRE" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://damieng.com/blog/2011/11/21/my-one-year-check-in-with-my-windows-phone-7?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=my-one-year-check-in-with-my-windows-phone-7</feedburner:origLink></item>
		<item>
		<title>Typography can be fun</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/W9RcLHdXZe4/typography-can-be-fun</link>
		<comments>http://damieng.com/blog/2011/11/19/typography-can-be-fun#comments</comments>
		<pubDate>Sat, 19 Nov 2011 22:40:36 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
				<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=2247</guid>
		<description>People are always surprised when they hear you&amp;#8217;re interested in typography. The appreciation and interest in the shape of letters and symbols is definitely a little more unusual to find as a hobby but it&amp;#8217;s actually quite fun! Here&amp;#8217;s a few ideas I hope will prove my point. Play games The Rather Difficult Font Game</description>
				<content:encoded><![CDATA[<p>People are always surprised when they hear you&#8217;re interested in typography. The appreciation and interest in the shape of letters and symbols is definitely a little more unusual to find as a hobby but it&#8217;s actually quite fun!</p>
<p>Here&#8217;s a few ideas I <em>hope</em> will prove my point.</p>
<h2>Play games</h2>
<p><a href="http://ilovetypography.com/ifontgame/">The Rather Difficult Font Game</a><br />
This game shows you some text in a certain font then asks you to name the font from one of them in the list. It isn&#8217;t as difficult as the name sounds!</p>
<p><a href="http://deep.co.uk/games/font_game/">Deep Font Challenge</a><br />
Head down to the shooting gallery to blow away the letters from the typeface he wants or doesn&#8217;t want.</p>
<p><a href="http://cheeseorfont.com/">Cheese or Font</a><br />
Hmm, it&#8217;s odd how cheeses and typefaces often have similar names. See if you can tell the difference.</p>
<p><a href="http://type.method.ac/">Kern Type</a><br />
Many fonts contain extra information telling the computer how to adjust the spacing between individual pairs of letters. If you think of an AV for example the top of the V might start before the A ends or be very close. This game lets you move the letters around until you think you have optimal spacing then you can see how well you did.</p>
<p><a href="http://shape.method.ac/">Shape Type</a><br />
The ultimate font game! See if you can reshape disported letters back to their original forms by adjusting the lines and bezier curves. The computer will score your efforts by comparing to the original.</p>
<p><span class="Apple-style-span" style="font-size: 20px; font-weight: bold;">Find a font</span></p>
<p><a href="http://www.fontshop.com/blog/newsletters/">FontShop newsletter</a><br />
This newsletter is both infrequent and interesting so it gets to come directly to my inbox. It contains interesting new fonts, news and designer spotlights and is a great way of discovering new typefaces to use.</p>
<p><a href="http://www.identifont.com/">IdentiFont</a><br />
Asks you a series of specific questions about letters in the font on a continual process to narrow it down to the hopefully right one.</p>
<p><a href="http://new.myfonts.com/WhatTheFont/">WhatTheFont</a><br />
This tool is a little more automated, upload the picture and it should identify the letters although you may need to fine-tune the recognition (also available as an <a href="http://itunes.apple.com/app/whatthefont/id304304134?mt=8">iPhone app</a>)</p>
<p><a href="http://wallbase.cc/wallpaper/627904">So you need a typeface infographic</a><br />
This flowchart takes you through a bunch of decisions to choose a typeface. Don&#8217;t expect to find anything too original though!</p>
<h2>Smarten your site</h2>
<p>If you have a web site you might want to look at using a custom font to help stand-out from the crowd now that they are compatible across many browsers. Yes, I should do this for damieng.com :)</p>
<p><a href="http://www.fontsquirrel.com/">Font Squirrel</a><br />
Font squirrel have a great site full of many free fonts and have <a href="http://www.fontsquirrel.com/fontface">prepared the necessary font and CSS files</a> required for the subset available for use on web sites.</p>
<p><a href="http://www.google.com/webfonts">Google web fonts</a><br />
Google have almost 300 fonts available in their free web font directory right now and with just a couple of clicks can provide the necessary HTML, CSS import or Javascript necessary to use them in your pages. The fonts are served up from their servers too so you don&#8217;t need to worry about files or bandwidth.</p>
<p><a href="http://www.fontslive.com/">Fonts Live</a><br />
Monotype&#8217;s hosted service is similar to Google&#8217;s but contains just their own commercial fonts including well-known ones such as Museo, Gill Sans, Bodoni, Rockwell and many of Microsoft&#8217;s typefaces. Prices start at about $40 a year for small sites (250k visits a month) but they have 30-day free trials.</p>
<p><a href="http://webfonts.myfonts.com/">MyFonts WebFonts</a><br />
MyFonts have a huge collection of fonts &#8211; some 40,000+ &#8211; most of which are available to use on the web for the same price as buying the font. This makes it cheaper than FontsLive but you need to host the files and CSS on your own server.</p>
<h2>Offline fun</h2>
<p><a href="http://designtaxi.com/news/351020/Helveticards-Minimalist-Typography-Cards-for-the-Typophile-Gambler/">Playing cards</a><br />
These Helvetica based playing cards are very stylish, bold and modern. If you&#8217;re going to play cards why not do so with something a little different.</p>
<p><a href="http://www.tumblr.com/tagged/typodarium+2012">Typographical calendar</a><br />
Get a daily dose of typography in this compact little desk calendar. The designer&#8217;s equivalent of a word-a-day.</p>
<p><a href="http://www.helveticafilm.com/">Helvetica The Movie</a><br />
Not just a movie about the design of this iconic font but also the modern movement it was part of. If you like this keep an eye out for <a href="http://linotypefilm.com/">Linotype: The Movie</a> due in Feb 2012.</p>
<p>Typography t-shirts<br />
<a href="http://www.zazzle.com/typography+tshirts">Zazzle</a> has a lot of typography t-shirts as does <a href="http://typographyshop.com/line.html">TypographyShop</a> and <a href="http://shop.ugmonk.com/category/tees">Ugmonk</a>.</p>
<h2>Create your own</h2>
<p>If any of that has been enough to pique your interest why not have a go at designing your own font?</p>
<p><a href="http://fontstruct.com/">FontStruct</a> lets you start simply by building your own from a library of pre-build shapes you place on a grid. It&#8217;s like LEGO for typography and is very easy go get started.</p>
<p>If you have an iPad then you can also try out <a href="http://2ttf.com/">iFontMaker</a> for an easy way to make hand-drawn fonts (it lacks fine editing facilities). I actually used a <a href="http://tenonedesign.com/sketch.php">Pogo Sketch</a> for my <a href="http://2ttf.com/UjZ3WtVC">Damien Typewriter</a>  but it is too soft so you could try <a href="http://thenextweb.com/apple/2011/02/26/5-stylus-pens-and-brushes-perfect-for-ipad-artists/">other styluses</a>. Once you&#8217;re done it publishes to their <a href="http://2ttf.com/gallery">web gallery</a> where you can download the TrueType font and a Web Font too.</p>
<p>If you enjoy that but crave more control then try the free <a href="http://fontforge.sourceforge.net/">FontForge editor</a> which runs on many platforms and lets you create real fonts or hack apart other peoples (remember to not redistribute changes to other peoples fonts unless the licence allows it).</p>
<p>If you get stuck on some letters then try my favourite <a href="http://www.amazon.com/gp/product/0300111509/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=dam-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=0300111509">Designing Type book</a> that devotes a page or two to each common character and shows how a number of well-known typefaces express it.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=W9RcLHdXZe4:7ctqhtDMTws:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=W9RcLHdXZe4:7ctqhtDMTws:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=W9RcLHdXZe4:7ctqhtDMTws:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/W9RcLHdXZe4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2011/11/19/typography-can-be-fun/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damieng.com/blog/2011/11/19/typography-can-be-fun?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=typography-can-be-fun</feedburner:origLink></item>
		<item>
		<title>Android’s Roboto system font for Ice Cream Sandwich</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/BHpzBCmj3Hs/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>Google have switched system font for Android&amp;#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>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=BHpzBCmj3Hs:w8hgIprjkmw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=BHpzBCmj3Hs:w8hgIprjkmw:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=BHpzBCmj3Hs:w8hgIprjkmw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/BHpzBCmj3Hs" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://damieng.com/blog/2011/10/19/androids-roboto-system-font-for-ice-cream-sandwich?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=androids-roboto-system-font-for-ice-cream-sandwich</feedburner:origLink></item>
		<item>
		<title>Behind the scenes at xbox.com – RSS enabling web marketplace</title>
		<link>http://feed.damieng.com/~r/DamienG/~3/hVA_JjkuzEk/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>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>
<div class="feedflare">
<a href="http://feed.damieng.com/~ff/DamienG?a=hVA_JjkuzEk:tOSjGqXUssU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/DamienG?i=hVA_JjkuzEk:tOSjGqXUssU:D7DqB2pKExk" border="0"></img></a> <a href="http://feed.damieng.com/~ff/DamienG?a=hVA_JjkuzEk:tOSjGqXUssU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/DamienG?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DamienG/~4/hVA_JjkuzEk" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://damieng.com/blog/2011/07/07/behind-the-scenes-at-xbox-com-rss-enabling-web-marketplace?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=behind-the-scenes-at-xbox-com-rss-enabling-web-marketplace</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.223 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-08 18:24:26 --><!-- Compression = gzip -->
