<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Dan Maharry</title>
    <description>Writing about web development since 1997</description>
    <link>http://blog.hmobius.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.5.0.6</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://blog.hmobius.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Dan Maharry</dc:creator>
    <dc:title>Dan Maharry</dc:title>
    <geo:lat>519,797.000000</geo:lat>
    <geo:long>-13,276.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DansArchive" /><feedburner:info uri="dansarchive" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>51.9797</geo:lat><geo:long>-1.3276</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
      <title>TypeScript v0.8.3 Released + Additional Notes</title>
      <description>&lt;p&gt;Jonathan Turner of the TypeScript team has &lt;a href="http://blogs.msdn.com/b/typescript/archive/2013/02/27/announcing-typescript-0-8-3.aspx"&gt;announced the release of v0.8.3&lt;/a&gt; of the TypeScript compiler and Visual Studio extension. You can &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=34790"&gt;download it here&lt;/a&gt;. This will be the last interim release before the v0.9 releases. Some compiler tweaks have been made in this release as well as two improvements in Visual Studio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There was previously a restriction that you could only debug through your TypeScript files if they were part of the project being debugged. This restriction has since been dropped so you can now attach the VS debugger to an instance of Internet Explorer running the project and debug them remotely (even though the instance of IE knows only about the JavaScript files previously generated from the TypeScript).&lt;/li&gt;
&lt;li&gt;The type information displayed when you hover your cursor over TypeScript variables has been embellished further with the variable name and whether the variable is locally declared or not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full details of these improvements are &lt;a href="http://blogs.msdn.com/b/typescript/archive/2013/02/27/announcing-typescript-0-8-3.aspx"&gt;recorded here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Additionally, I&amp;rsquo;d like to add the following notes for v0.8.3. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;v0.8.3 seems to install over the top of v0.8.2 rather than needing it uninstalled first as in previous versions. However, it does require a complete system restart, so save your stuff before upgrading.&lt;/li&gt;
&lt;li&gt;v0.8.3 (and v0.8.2) install in the main c:\Program Files (x86)\Microsoft SDKs\TypeScript folder rather than in a subfolder with the version number, so if for some reason you need different versions of the compiler on your machine, you&amp;rsquo;ll need to create your own subfolders.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s no sign of the TypeScriptLanguageService.vsix file in the install directory for v0.8.3 that was previously present so there&amp;rsquo;s no fall-back other then trying to reinstall it if it appears that the extension and TypeScript templates have not been installed in your instance of Visual Studio. To make this assertion trickier, the TypeScript extension no longer appears in VIsual Studio&amp;rsquo;s Tools&amp;gt;Extensions and Updates dialog and the &amp;lsquo;HTML Application with TypeScript&amp;rsquo; project template is no longer found under Visual C# &amp;gt; Web. You can now find it under Other Languages &amp;gt; TypeScript.&lt;/li&gt;
&lt;li&gt;v0.8.3 seems to work fine with the latest version v2.5.1 of the Web Essentials 2012 extension.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lcfl6kBNyxI:GWcVTD15Q8I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lcfl6kBNyxI:GWcVTD15Q8I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lcfl6kBNyxI:GWcVTD15Q8I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lcfl6kBNyxI:GWcVTD15Q8I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lcfl6kBNyxI:GWcVTD15Q8I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lcfl6kBNyxI:GWcVTD15Q8I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lcfl6kBNyxI:GWcVTD15Q8I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lcfl6kBNyxI:GWcVTD15Q8I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/lcfl6kBNyxI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/lcfl6kBNyxI/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2013/02/28/TypeScript-v083-Notes.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=33fc45ee-317b-45de-adf3-cfef2b849fd8</guid>
      <pubDate>Thu, 28 Feb 2013 22:00:00 +0100</pubDate>
      <category>Geek Stuff</category>
      <category>TypeScript Revealed</category>
      <dc:publisher>DanM</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=33fc45ee-317b-45de-adf3-cfef2b849fd8</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=33fc45ee-317b-45de-adf3-cfef2b849fd8</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2013/02/28/TypeScript-v083-Notes.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=33fc45ee-317b-45de-adf3-cfef2b849fd8</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=33fc45ee-317b-45de-adf3-cfef2b849fd8</feedburner:origLink></item>
    <item>
      <title>Geek Dad : Installing The Future</title>
      <description>&lt;p&gt;I am writing this to you from the future. Or at least from a future. The one that British Telecom has created here in Deddington as a template for all the telephone exchanges in the UK. London hopes that it will one day be like us. Probably.&lt;/p&gt;
&lt;p&gt;The complete Deddington exchange from Aynho Wharf to the Barfords will be totally enabled with the completion of phase three &amp;ndash; the old half of Deddington &amp;ndash; some time in March. Then we have two years to switch our phones and internet connections over to fibre optic before they remove all the copper wiring in the area. There is no coming back from the future here you know. &lt;/p&gt;
&lt;p&gt;The first step is to choose your phone and internet provider and package. The obvious choice is the omnipresent BT Infinity but there are a good dozen companies (listed at &lt;a href="http://www.thinkbroadband.com/guide/fibre-broadband.html)"&gt;http://www.thinkbroadband.com/guide/fibre-broadband.html)&lt;/a&gt; which you can talk to instead, with rates varying from &amp;pound;18 to &amp;pound;150 a month based on internet speed and download limits. Some will include free installation of the last bit of cable from pole to phone point, others not.&lt;/p&gt;
&lt;p&gt;Our installation was pretty painless. There were two visits, seven days apart. The first replaced the copper cable from the telegraph pole to the house and then ran the new cable down to a junction box nearer where we wanted our phone and broadband connection to be. The second included drilling through the outside wall, installing the actual new hardware and enabling the new connections. (For those with a fear of dentistry, look away; metre-long drill bits are not for you.)&lt;/p&gt;
&lt;p&gt;The only real input the engineers need is to know where you want your new boxes installed. You&amp;rsquo;ll need to have a space about the size of an A4 sheet of paper free somewhere near a plug socket for the new phone lines and battery pack to be fixed. If you have computers or an office in the house, consider having the boxes there for a wired connection to your main machine and using wireless phones rather than the other way around. As long as the distance between the junction box and the new location is less than 25 metres around the outside wall, there&amp;rsquo;s no problem.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re curious about the battery pack, one downside to fibre optic cables is that unlike copper wires, they don&amp;rsquo;t carry an electric charge. The battery pack is mandatory in case a power cut happens and you need to use the phone. The pack is good for 12 hours which hopefully should be enough.&lt;/p&gt;
&lt;p&gt;Once everything was installed, the engineer rang the BT service centre and asked them to switch the cable on. Funnily enough, our guy had a good half a dozen phone numbers for the centre and none of them answered for about half an hour. When he did get through, he was told their systems were down so he&amp;rsquo;d have to call back later. Nice to know it&amp;rsquo;s not just the consumer that gets the run-around by BT.&lt;/p&gt;
&lt;p&gt;With respect to phones, the old ones continue to work as normal even with the new cable installed. More next month on the search for a decent fibre optic phone and figuring out just what we can all do with this new-fangled speedy broadband thing. I can confirm right now however, that the BBC iPlayer and other watch on demand TV channels all work beautifully in glorious high definition. Which is nice.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bkmMpz8LYdM:dNGVCDUS9cs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bkmMpz8LYdM:dNGVCDUS9cs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bkmMpz8LYdM:dNGVCDUS9cs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=bkmMpz8LYdM:dNGVCDUS9cs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bkmMpz8LYdM:dNGVCDUS9cs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=bkmMpz8LYdM:dNGVCDUS9cs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bkmMpz8LYdM:dNGVCDUS9cs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=bkmMpz8LYdM:dNGVCDUS9cs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/bkmMpz8LYdM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/bkmMpz8LYdM/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2013/02/28/Geek-Dad-Installing-The-Future.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=8336344f-e9e4-47c7-a6c0-f5fbf9bcbcde</guid>
      <pubDate>Thu, 28 Feb 2013 20:00:00 +0100</pubDate>
      <category>Nothing in Particular</category>
      <dc:publisher>DanM</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=8336344f-e9e4-47c7-a6c0-f5fbf9bcbcde</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=8336344f-e9e4-47c7-a6c0-f5fbf9bcbcde</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2013/02/28/Geek-Dad-Installing-The-Future.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=8336344f-e9e4-47c7-a6c0-f5fbf9bcbcde</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=8336344f-e9e4-47c7-a6c0-f5fbf9bcbcde</feedburner:origLink></item>
    <item>
      <title>TypeScript Revealed : v0.8.2 Addenda</title>
      <description>&lt;div&gt;The bugger about writing a book on an open source project is that it keeps developing while you are writing, proofing, copyediting and finally printing. This strategy can and does bite you on the arse, and has done me frequently. Two cases spring to mind:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;A book on Microsoft&amp;rsquo;s .NET My Services, codename Hailstorm back in 2001. FOur of us wrote it in six weeks based on the latest bits in time for PDC, met the deadline and got it published. Then found out as the book went to the show that Microsoft had completely axed the entire project.&lt;/li&gt;
&lt;li&gt;A book on the open source wiki software Zope which spent so long trying to catch up with the terrifyingly frequent software releases being made to Zope at the time, that the whole project imploded.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;It&amp;rsquo;s not a surprise that there are already some addenda for &amp;lsquo;&lt;a title="Post about the TypeScript Revealed book" href="http://blog.hmobius.com/post/2013/01/16/TypeScript-Revealed-Details.aspx"&gt;TypeScript Revealed&lt;/a&gt;&amp;rsquo;. It&amp;rsquo;s just disappointing that &lt;a title="TypeScript 0.8.2 Announcement" href="http://blogs.msdn.com/b/typescript/archive/2013/01/21/announcing-typescript-0-8-2.aspx"&gt;TypeScript v0.8.2&lt;/a&gt; was released the same day as the book was and includes a couple of main new features which I would have certainly included were they available at the time.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;That said, that&amp;rsquo;s why I have a &lt;a title="Facebook page for TypeScript Revealed" href="http://www.facebook.com/typescriptrevealed"&gt;facebook page for the book&lt;/a&gt; so you can check up on links for the latest TypeScript articles and this blog so I can give you the heads up on the new stuff and any new github projects out there I would have included had I known of them at the time.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;ol&gt;
&lt;li&gt;The main one is that the TypeScript Language Service can now read jsdoc comments in your typescript and roll them into the intellisense pop-ups it presents when you hover over a function parameter, class name etc. This will work in much the same way as any XML comments you write in your .NET code augment the intellisense for function calls. If you do include jsdoc comments, you can preserve them during the compilation into javascript using the -c flag for the compiler. There'll be a separate article up shortly looking at jsdoc as a whole and how it fits into the TypeScript tool chain.&lt;/li&gt;
&lt;li&gt;The Visual Studio extension for TypeScript now supports Compile-on-Save in addition to the Compile-as-Build-Step functionality it already supported. This works in much the same way as Compile on Save works if you have Mads Kristensen's Web Essentials 2012 add-in for Visual Studio already installed. You can find the options for CoS by selecting Options&amp;gt;Text Editor&amp;gt;TypeScript&amp;gt;Project from the Tools menu. The compile-on-save functionality has also been improved in the NPM-based compiler when using the -watch flag. (Note I'm not a node.js user so I can't say by how much).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Adding TypeScript as an MSBuild step into existing project has become slightly easier. v0.8.2 now comes with a new MSBuild targets file meaning rather than call the compiler you can express the call as MSBuild XML. The doesn't make calling the compiler less valid; it just tidies up the MSBuild file. You can find Microsoft.TypeScript.targets at C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\TypeScript. Again, a full article will be forthcoming shortly, but you'll find brief details on the TypeScript wiki here.&lt;/li&gt;
&lt;li&gt;The compiler service can now be replaced in the TypeScript for Visual Studio 2012 plugin. &amp;nbsp;This makes it easier to leverage the Visual Studio TypeScript extension with newer compiler builds from CodePlex or from experimental forks. Details of how to do this can be found on the TypeScript blog here.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;On the jsodc theme, there's one new github repo that's worth highlighting which adds a new way to create TypeScript definition files for you. &lt;a href="https://github.com/joshheyse/jsdocts"&gt;Jsdocts&lt;/a&gt; outputs a definition file based on the jsdoc within a javascript file. Could be useful, although YMMV.&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=jV2vSDB_iOw:IUE3xV8Dcy4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=jV2vSDB_iOw:IUE3xV8Dcy4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=jV2vSDB_iOw:IUE3xV8Dcy4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=jV2vSDB_iOw:IUE3xV8Dcy4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=jV2vSDB_iOw:IUE3xV8Dcy4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=jV2vSDB_iOw:IUE3xV8Dcy4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=jV2vSDB_iOw:IUE3xV8Dcy4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=jV2vSDB_iOw:IUE3xV8Dcy4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/jV2vSDB_iOw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/jV2vSDB_iOw/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2013/02/18/TypeScript-Revealed-v082-Addenda.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=4d71ef7a-f34b-40f0-935f-6c49c2ec0061</guid>
      <pubDate>Mon, 18 Feb 2013 10:21:00 +0100</pubDate>
      <category>Geek Stuff</category>
      <category>TypeScript Revealed</category>
      <dc:publisher>DanM</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=4d71ef7a-f34b-40f0-935f-6c49c2ec0061</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=4d71ef7a-f34b-40f0-935f-6c49c2ec0061</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2013/02/18/TypeScript-Revealed-v082-Addenda.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=4d71ef7a-f34b-40f0-935f-6c49c2ec0061</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=4d71ef7a-f34b-40f0-935f-6c49c2ec0061</feedburner:origLink></item>
    <item>
      <title>Denon AH-D600 Headphones Review</title>
      <description>&lt;p&gt;There&amp;rsquo;s always something that picks at your brain. Quite recently, apropos of nothing, it&amp;rsquo;s &lt;a href="http://www.wired.co.uk/news/archive/2012-08/13/denon-ah-d600-hands-on"&gt;this article&lt;/a&gt; from Nate Lanxon of Wired UK. A little bit of legacy later and I have a new pair of headphones around my neck replacing the Sennheiser HD-490s I&amp;rsquo;d had for some seven or eight years previously. The Denon AH-D600s are, quite literally, a different level, sonically and price-wise. They&amp;rsquo;re &amp;pound;500 RRP but can be had for substantially less if you search around.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: inline; background-image: none;" title="FrontCover" src="http://blog.hmobius.com/image.axd?picture=FrontCover.jpg" alt="FrontCover" width="484" height="644" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Funnily enough, that white-out box in the bottom right says the headphones are iPhone and iPad compatible. Quite why you&amp;rsquo;d walk down the street with an iPod wearing high-end headphones is unclear, but under the phones themselves in their satin-lined box are two sturdy wrapped cables, one of which has an iPod\iPad remote built-in. The other one &amp;ndash; a straight 2m cord &amp;ndash; will get the greater use in all likelihood.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: inline; background-image: none;" title="Box Interior" src="http://blog.hmobius.com/image.axd?picture=Interior.jpg" alt="Box Interior" width="644" height="484" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s true if you are going to use it with an iPod is that you are not going to get true value for money out of this headgear. The D600s' 25-ohm impedance means phones and MP3 players can easily get a good noise out of them. However, if you haven&amp;rsquo;t got a full hi-fi to push them, a good USB DAC or Headphone Amp for your laptop, such as the &lt;a href="http://www.whathifi.com/review/dragonfly"&gt;Audioquest Dragonfly&lt;/a&gt; or, in my case, the one in my &lt;a href="http://www.whathifi.com/review/bw-mm-1"&gt;MM-1s&lt;/a&gt;&amp;nbsp; are definitely required along with a preferably lossless set of music files for you to hear. This isn&amp;rsquo;t the place to argue about whether you can really hear the difference between 128kbps MP3s and 96kHz/24-bit FLAC files. The simple answer is yes. Although these cans are probably tweaked slightly in favour of Rock-y music rather than lighter fare, there is no place to hide for shaky recordings or low-rate lossy files. Upgrade to Spotify Premium for the higher-rate streaming etc for better effect. Like hi-fi speakers as well, the 50mm drivers inside the extremely comfy over-ear cups need a little warming up. Plug them in, throw them a day-or-two long playlist and come back on Thursday.&lt;/p&gt;
&lt;p&gt;What you&amp;rsquo;ll hear is stunning. Put on a multi-layered track like Tool&amp;rsquo;s Vicarious and the extra definition brings a greater sense of space to the music. The individual strands of the intro are no less complex but more understandable. Something I&amp;rsquo;d miss on my Sennheisers. The ability to deal with different styles of heavy, low-end sounds is also impressive. Strapping Young Lad&amp;rsquo;s City is presented as a clean, almost clinical, dense barrage of noise, Meshuggah&amp;rsquo;s Alive seethes and lurches rather than crunches and never loses the audience noise even midway through a song, and Earth&amp;rsquo;s Omens and Portents is slow, oppressive and arid.&lt;/p&gt;
&lt;p&gt;Spinning up the other end of the aural spectrum and the D600s sense of space allows far quieter, more minimal tracks to shine. Seasick Steve&amp;rsquo;s Treasures is melancholic with the banjo/violin duet more obviously pitched to the far left and right of the centre acoustic guitar while retaining a full character for each instrument. Gorecki&amp;rsquo;s Totus Tuus requires its choir to sing from forte down to molto pianissimo. That line of diminuendo gets flattened a little by the D600s belying its bassier tendencies but still fares better than my earlier Sennheisers that lose the distinction far quicker in order to keep something audible.&lt;/p&gt;
&lt;p&gt;If there&amp;rsquo;s a tiny cloud in the otherwise blue audio sky, it&amp;rsquo;s when dealing with electronica creating full spectrum pink noise (cf. William Fowler Collins &amp;ldquo;Perdition Hill Radio&amp;rdquo; or drone (Nadja &amp;ldquo;Now I Am Become Death&amp;rdquo;) when the mid-range feels neglected for the treble and bass. It&amp;rsquo;s only a small neglect though &amp;ndash; the D600s still do far more good for the music than ill.&lt;/p&gt;
&lt;p&gt;&amp;pound;500 is, frankly, a huge investment for a pair of headphones. But, just as &lt;a href="http://www.hanselman.com/blog/BrainBytesBackBunsTheProgrammersPriorities.aspx"&gt;a chair is the best investment&lt;/a&gt; a desk jockey can make, so too are headphones the best investment a music loving desk jockey can make too. And cheaper than a chair. I&amp;rsquo;m going to love these headphones and don&amp;rsquo;t regret buying them for a minute.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bHF6oIcTSHo:nzFXo-WrA1w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bHF6oIcTSHo:nzFXo-WrA1w:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bHF6oIcTSHo:nzFXo-WrA1w:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=bHF6oIcTSHo:nzFXo-WrA1w:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bHF6oIcTSHo:nzFXo-WrA1w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=bHF6oIcTSHo:nzFXo-WrA1w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=bHF6oIcTSHo:nzFXo-WrA1w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=bHF6oIcTSHo:nzFXo-WrA1w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/bHF6oIcTSHo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/bHF6oIcTSHo/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2013/01/31/Denon-AH-D600-Headphones-Review.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=f62188a0-9636-4b38-b004-8e559ac6f02b</guid>
      <pubDate>Thu, 31 Jan 2013 16:00:00 +0100</pubDate>
      <category>Making Music</category>
      <category>Nothing in Particular</category>
      <dc:publisher>DanM</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=f62188a0-9636-4b38-b004-8e559ac6f02b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=f62188a0-9636-4b38-b004-8e559ac6f02b</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2013/01/31/Denon-AH-D600-Headphones-Review.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=f62188a0-9636-4b38-b004-8e559ac6f02b</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=f62188a0-9636-4b38-b004-8e559ac6f02b</feedburner:origLink></item>
    <item>
      <title>TypeScript Revealed Details</title>
      <description>&lt;p&gt;&lt;img style="float: right; display: inline;" src="http://www.apress.com/media/catalog/product/cache/9/image/9df78eab33525d08d6e5fb8d27136e95/A/9/A9781430257257-3d.png" alt="" align="right" /&gt;It's only been a few months since TypeScript was released on October 1 last year, but I'm pleased to say that my new book 'TypeScript Revealed' is being published on January 23 by Apress. I think my original title, 'A First Look At TypeScript' is a more accurate description of its contents, but there are series titles to be considered :-) It's a modest 100 pages or so and is available in both paper and e-book formats. It covers up to v0.8.1.1.&lt;/p&gt;
&lt;p&gt;The book is aimed directly at .NET programmers who've needed to use JavaScript in the past but haven't really gone any further with it. It won't teach you JavaScript from scratch but it will use the C# and VB.NET syntax you're familiar with to introduce the new syntax features that TypeScript adds to JavaScript. It will also help you integrate TypeScript into your existing web and Windows 8 application projects and point you in the right direction of the key discussions and bugs on Codeplex and the community efforts on github.&lt;/p&gt;
&lt;p&gt;Download the &lt;a href="http://blog.hmobius.com/file.axd?file=TypeScriptRevealed_Code.zip"&gt;code samples for this book&lt;/a&gt; (175 KB)&lt;/p&gt;
&lt;p&gt;Here's the full table of contents:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What is TypeScript?&lt;br /&gt;Covers the need for TypeScript, what it does and doesn't do, and how to install it in Visual Studio, node.js, and Sublime Text&lt;/li&gt;
&lt;li&gt;The New Syntax&lt;br /&gt;Covers the type system, functions (parameter types, overloading and arrow), classes, interfaces, modules and features yet to come. Also notes the refactoring options in Visual Studio.&lt;/li&gt;
&lt;li&gt;Working With TypeScript&lt;br /&gt;Covers the compiler, generating \ sourcing declaration files, integrating TypeScript into your own projects, and how it fits into the development lifecycle.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Apress' &lt;a href="http://www.apress.com/9781430257257"&gt;official page for the book&lt;/a&gt;. Please use this link to submit any errata for this book.&lt;/p&gt;
&lt;p&gt;I've also started &lt;a title="Facebook page for TypeScript Revealed" href="http://www.facebook.com/typescriptrevealed"&gt;a Facebook page for the book&lt;/a&gt; containing any new TypeScript articles and links.&lt;/p&gt;
&lt;p&gt;Buy it on &lt;a href="http://www.amazon.co.uk/gp/product/1430257253/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=1430257253&amp;amp;linkCode=as2&amp;amp;tag=hmobiuscom-21"&gt;Amazon UK&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/1430257253/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=hmobiuscom-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1430257253"&gt;Amazon US&lt;/a&gt;, &lt;a href="http://www.barnesandnoble.com/w/typescript-revealed-dan-maharry/1113779170?ean=9781430257257"&gt;Barnes and Noble&lt;/a&gt;, and &lt;a href="http://www.bookdepository.co.uk/TypeScript-Revealed-Dan-Maharry/9781430257257"&gt;Book Depository (UK)&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=e5oPCX_dEh4:Ob8fJpw_PDY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=e5oPCX_dEh4:Ob8fJpw_PDY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=e5oPCX_dEh4:Ob8fJpw_PDY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=e5oPCX_dEh4:Ob8fJpw_PDY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=e5oPCX_dEh4:Ob8fJpw_PDY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=e5oPCX_dEh4:Ob8fJpw_PDY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=e5oPCX_dEh4:Ob8fJpw_PDY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=e5oPCX_dEh4:Ob8fJpw_PDY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/e5oPCX_dEh4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/e5oPCX_dEh4/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2013/01/16/TypeScript-Revealed-Details.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=a3bfd821-6129-4c47-8b9c-321f64dde56c</guid>
      <pubDate>Wed, 16 Jan 2013 12:00:00 +0100</pubDate>
      <category>Geek Stuff</category>
      <category>Megaphone</category>
      <category>TypeScript Revealed</category>
      <dc:publisher>DanM</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=a3bfd821-6129-4c47-8b9c-321f64dde56c</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=a3bfd821-6129-4c47-8b9c-321f64dde56c</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2013/01/16/TypeScript-Revealed-Details.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=a3bfd821-6129-4c47-8b9c-321f64dde56c</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=a3bfd821-6129-4c47-8b9c-321f64dde56c</feedburner:origLink></item>
    <item>
      <title>Simple.Data.Docs and Sample Into 2013</title>
      <description>&lt;p&gt;On March 27 last year, &lt;a href="http://blog.markrendle.net"&gt;Mark Rendle&lt;/a&gt; put an idle call out into the ether for help with the &lt;a href="http://simplefx.org/simpledata/docs/index.html"&gt;documentation for his Simple.Data project&lt;/a&gt;. At a loose end, I said yes... &lt;/p&gt;&lt;p&gt;It has been a busy nine months in the world of Simple.Data.Docs. Mark has been busy, releasing no fewer than 16 new builds of &lt;a href="http://nuget.org/packages/Simple.Data.Core"&gt;Simple.Data.Core&lt;/a&gt; from v0.16 to v0.18.3 / 1.0.0-rc3 since that time which have been collectively downloaded some 9110 times according to nuget.org. I'd like to hope that the documentation that's being slowly assembled is to your satisfaction. It's gratifying to note that since adding in some counters in early October, we've had some 22600 page views (14500 unique) from 4500 visits (1700 unique) to the doc site and 2 complaints so it can't be all bad. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;A few thanks then to &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/marcusoftnet"&gt;Marcus Hammarberg&lt;/a&gt; for his coverage of testing with the InMemoryAdapter&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/codereflection"&gt;Jeff Schumacher&lt;/a&gt; for his Advanced Naming Scenarios commit&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/Code52/"&gt;Code52&lt;/a&gt; for their &lt;a href="https://github.com/Code52/metro.css"&gt;metro.css&lt;/a&gt; project. The new Metro-style docs have certainly made the site a nicer place to visit and work on.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I'm about 70% finished on the major, basic topics (based on the Simple.Data.SqlServer provider) and, assuming that I don't have to pause efforts for another three months to write &lt;a href="http://www.apress.com/9781430257257"&gt;a book&lt;/a&gt;, the core of the docs should be complete for the first year anniversary. Hurrah! &lt;/p&gt;&lt;p&gt;It's important to note that I've also been updating the &lt;a href="https://github.com/markrendle/Simple.Data.Sample"&gt;Simple.Data.Sample&lt;/a&gt; project to map to and expand on those examples I've included in the docs. Although it hasn't been updated on NuGet since I took over, you'll find the code itself completely refreshed with 100+ new query samples to look at in addition to those in Mark's own test suites. Once the core docs are finished and Simple.Data v1 is finally released, hopefully Mark will be kind enough to update the Sample package on NuGet as well. I'd also like to release it as a VB package and as a set of nUnit tests as well once that has happened. Currently it is a C# command line application.&lt;/p&gt;&lt;p&gt;Once the core docs are complete, I'll add in updates and extra pages for helper functions in the API as they are requested or queried about on the group, but there are a couple of areas I'd like to look at&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Incorporating the docs for other Simple.Data providers into the site. &lt;a href="https://github.com/object"&gt;Vagif Abilov&lt;/a&gt; has completed his &lt;a href="http://bloggingabout.net/blogs/vagif/archive/2013/01/01/simple-data-odata-adapter-approaching-version-1-0.aspx"&gt;Simple.OData docs&lt;/a&gt; and we'll work together on how best to integrate the two. Hopefully, the same can happen with other provider owners. &lt;/li&gt;&lt;li&gt;Documenting the Simple.Data adapter and provider models and how to write your own.&lt;/li&gt;&lt;li&gt;Real-world scenarios and gotchas. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It's this last area in particular, that I'd like to ask your assistance with. Whether you're querying MongoDB, SQLAnywhere, oData, SQL Server, Azure, or something else, if you've come across and then resolved any sticky issues using Simple.Data which you'd be happy to share with the world, please &lt;a href="http://blog.hmobius.com/contact.aspx"&gt;get in touch&lt;/a&gt; or leave a comment below. It would be great to hear from you. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=tANnh1ho4-s:omc-Q_be0nI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=tANnh1ho4-s:omc-Q_be0nI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=tANnh1ho4-s:omc-Q_be0nI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=tANnh1ho4-s:omc-Q_be0nI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=tANnh1ho4-s:omc-Q_be0nI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=tANnh1ho4-s:omc-Q_be0nI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=tANnh1ho4-s:omc-Q_be0nI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=tANnh1ho4-s:omc-Q_be0nI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/tANnh1ho4-s" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/tANnh1ho4-s/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2013/01/02/SimpleDataDocs-and-Sample-Into-2013.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=b4322bae-8007-4362-87e6-f86f1735c7dc</guid>
      <pubDate>Wed, 02 Jan 2013 23:06:00 +0100</pubDate>
      <category>Writing</category>
      <category>Geek Stuff</category>
      <dc:publisher>obiwan</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=b4322bae-8007-4362-87e6-f86f1735c7dc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=b4322bae-8007-4362-87e6-f86f1735c7dc</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2013/01/02/SimpleDataDocs-and-Sample-Into-2013.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=b4322bae-8007-4362-87e6-f86f1735c7dc</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=b4322bae-8007-4362-87e6-f86f1735c7dc</feedburner:origLink></item>
    <item>
      <title>Inferred Hierarchies and Evaluation Strategies in Simple.Data</title>
      <description>&lt;p&gt;&lt;em&gt;This is the second of a number of posts derived from the &lt;a href="http://simplefx.org/simpledata/docs/"&gt;documentation for Simple.Data&lt;/a&gt; that I&amp;rsquo;m compiling and writing at the moment. The code here is part of the &lt;a href="https://github.com/markrendle/Simple.Data.Sample"&gt;Simple.Data.Sample project on github&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Simple.Data is bloody clever at times but quite easy to get confused by. The most common confusion is between using commands that return multiple results as a SimpleQuery object and those that return a single results as a SimpleRecord object. With the return type hidden under the veil of &amp;lsquo;dynamic&amp;rsquo; it&amp;rsquo;s easy to lose track and try to call a method on one that only works on the other. It&amp;rsquo;s the main reason for Mark &lt;a href="http://blog.markrendle.net/2012/10/03/simple-data-change-findby-is-deprecated-for-1-0/"&gt;to deprecate the FindBy method for v1.0&lt;/a&gt;. The second most common is around the subject of lazy\eager-loaded JOINs and what that means in your code.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take an example and suppose we have two tables in our database, Artists and Albums.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.hmobius.com/image.axd?picture=dbdiagram.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="dbdiagram" src="http://blog.hmobius.com/image.axd?picture=dbdiagram_thumb.png" alt="dbdiagram" width="584" height="204" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The simplest way to display an artist&amp;rsquo;s details and album titles would be this.&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;// Retrieve artist with PK value of 22&lt;br /&gt;var lazyDynamicArtist = db.Artists.Get(22);&lt;br /&gt;Console.WriteLine("Artist {0} ({1})", lazyDynamicArtist.ArtistId, lazyDynamicArtist.Name);&lt;br /&gt;&lt;br /&gt;foreach (var album in lazyDynamicArtist.Albums)&lt;br /&gt;{&amp;nbsp;&lt;br /&gt;  Console.WriteLine("\t{0}", album.Title);&amp;nbsp;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Simple.Data adopts a lazy evaluation strategy so &lt;code class="variable"&gt;lazyDynamicArtist&lt;/code&gt; is not evaluated until accessed for the first time in the first call to &lt;code class="method"&gt;Console.WriteLine&lt;/code&gt;. Then it sends the following SQL to the database.&lt;/p&gt;
&lt;pre class="brush:sql"&gt;SELECT TOP 1 &lt;br /&gt;  [dbo].[Artists].[ArtistId], &lt;br /&gt;  [dbo].[Artists].[Name] &lt;br /&gt;from &lt;br /&gt;  [dbo].[Artists] &lt;br /&gt;where &lt;br /&gt;  [ArtistId] = @p1&lt;br /&gt;@p1 (Int32) = 22&lt;/pre&gt;
&lt;p&gt;This explains the existence of the &lt;code class="property"&gt;ArtistId&lt;/code&gt; and &lt;code class="property"&gt;Name&lt;/code&gt; properties for &lt;code class="variable"&gt;lazyDynamicArtist&lt;/code&gt;, but &lt;em&gt;where has the &lt;code class="property"&gt;Albums&lt;/code&gt; property come from&lt;/em&gt;? Answer: Simple.Data has inferred the hierarchy of tables / existence of the &lt;code class="property"&gt;Albums&lt;/code&gt; property from the foreign key relationship between Artists and Albums table. Once again, the &lt;code class="property"&gt;Albums&lt;/code&gt; collection is evaluated &lt;em&gt;only when accessed for the first time&lt;/em&gt; (here, as part of the foreach loop). When that occurs, another query is sent to the database and silently returns another dynamic object to iterate through.&lt;/p&gt;
&lt;pre class="brush:sql"&gt;select   &lt;br /&gt;  [dbo].[Albums].[AlbumId],&lt;br /&gt;  [dbo].[Albums].[GenreId],&lt;br /&gt;  [dbo].[Albums].[ArtistId],&lt;br /&gt;  [dbo].[Albums].[Title],&lt;br /&gt;  [dbo].[Albums].[Price],&lt;br /&gt;  [dbo].[Albums].[AlbumArtUrl] &lt;br /&gt;from &lt;br /&gt;  [dbo].[Albums] &lt;br /&gt;WHERE &lt;br /&gt;  [dbo].[Albums].[ArtistId] = @p1&lt;br /&gt;@p1 (Int32) = 22&lt;/pre&gt;
&lt;p&gt;Note that despite &lt;a href="http://blog.hmobius.com/post/2012/06/23/Name-Resolution-in-SimpleData.aspx"&gt;Simple.Data&amp;rsquo;s name resolution tricks when parsing table and column names in query functions&lt;/a&gt;, accessing artist.Album will throw an exception. Simple.Data does not use any pluralisation rules at this point. You must use &lt;em&gt;the exact table name&lt;/em&gt; as a property to access to the inferred hierarchy.&lt;/p&gt;
&lt;p&gt;This lazy evaluation strategy does have its drawbacks however. The most obvious is the number of SQL commands you can end up sending to the database. In this example, with only two tables needing to be accessed for a single artist, only two statements are sent. In general, n+1 statements will be sent: one for the list of artists and one per artist (n) for each list of albums to retrieve. Add in more tables, and the number of SQL commands sent to the database is quickly far more than your DBA would prefer you make&lt;/p&gt;
&lt;p&gt;Another less immediately obvious down side to this strategy comes via Simple.Data&amp;rsquo;s ability to cast the results of a query into a statically typed object (POCO) on the fly. Let&amp;rsquo;s say we have an Artist class defined like this:&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;public class Artist&lt;br /&gt;{&lt;br /&gt;  public int ArtistId { get; set; }&lt;br /&gt;  public string Name { get; set; }&lt;br /&gt;  public IEnumerable&amp;lt;Album&amp;gt; Albums { get; set; }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;If we try the following code, we hit a snag:&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;// Cast result of query to Artist type&lt;br /&gt;Artist lazyPocoArtist = db.Artists.Get(22);  &lt;br /&gt;&lt;br /&gt;Console.WriteLine("Artist {0} {1}", lazyPocoArtist.ArtistId, lazyPocoArtist.Name);&lt;br /&gt;&lt;br /&gt;foreach (var album in lazyPocoArtist.Albums)&lt;br /&gt;{&lt;br /&gt;  Console.WriteLine("\t{0}", album.Title);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;The first two lines of code work fine, but &lt;code class="property"&gt;lazyPocoArtist.Albums&lt;/code&gt; now returns null. The inferred hierarchy is lost as a result of casting the dynamic (SimpleRecord) object to the static Artist type, no evaluation of Albums occurs and a &lt;code class="type"&gt;System.NullReferenceException&lt;/code&gt; is thrown.&lt;/p&gt;
&lt;h3&gt;Recap&lt;/h3&gt;
&lt;p&gt;In brief then,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access the artist information as a dynamic (SimpleRecord or item in a SimpleQuery) object and the Albums property will be evaluated when it is accessed for the first time. It will become available as another dynamic (SimpleQuery) object to iterate through. Note that even if the artist in question has no albums attached to it in the database, a SimpleQuery object is still created but with nothing in it to enumerate.&lt;/li&gt;
&lt;li&gt;Access the artist information as a POCO and the Albums property will return null.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Eager Evaluation&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s fairly obvious that the lazyPocoArtist variable returns null for its Albums property because Simple.Data didn&amp;rsquo;t actually retrieve any Album information for the artist before it was cast into the Artist type. It was lazy. Fortunately, we can change the initial query command and turn Simple.Data into a pre-emptive, eager data retrieval machine. All we need to do is add a &lt;code class="method"&gt;With&lt;/code&gt; statement like so.&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;var eagerDynamicArtist = db.Artists.FindAllByArtistId(22).WithAlbums().FirstOrDefault();&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Artist {0} {1}", eagerDynamicArtist.ArtistId, eagerDynamicArtist.Name);&lt;br /&gt;&lt;br /&gt;foreach (var album in eagerDynamicArtist.Albums)&lt;br /&gt;{&lt;br /&gt;  Console.WriteLine("\t{0}", album.Title);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Note that I&amp;rsquo;ve switched from using &lt;code class="method"&gt;Get&lt;/code&gt; to &lt;code class="method"&gt;FindAllBy.FirstOrDefault&lt;/code&gt; to return a SimpleRecord object.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There&amp;rsquo;s currently &lt;a href="https://github.com/markrendle/Simple.Data/issues/235"&gt;a bug using Get with a With statement&lt;/a&gt; in that it only returns the first row in the JOINed table rather than them all.&lt;/li&gt;
&lt;li&gt;Once the bug is fixed, the equivalent statement would be &lt;code&gt;var eagerDynamicArtist = db.Artists.WithAlbums().Get(22);&lt;/code&gt; which looks odd, but needs to be this way around or Simple.Data will throw an exception.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As with the lazy loaded sample earlier, &lt;code class="variable"&gt;eagerDynamicArtist&lt;/code&gt; is not evaluated until accessed for the first time in the first call to &lt;code class="method"&gt;Console.WriteLine&lt;/code&gt; at which point it sends the following SQL to the database.&lt;/p&gt;
&lt;pre class="brush:sql"&gt;select &lt;br /&gt;  [dbo].[Artists].[ArtistId],&lt;br /&gt;  [dbo].[Artists].[Name],&lt;br /&gt;  [dbo].[Albums].[AlbumId] AS [__withn__Albums__AlbumId],&lt;br /&gt;  [dbo].[Albums].[GenreId] AS [__withn__Albums__GenreId],&lt;br /&gt;  [dbo].[Albums].[ArtistId] AS [__withn__Albums__ArtistId],&lt;br /&gt;  [dbo].[Albums].[Title] AS [__withn__Albums__Title],&lt;br /&gt;  [dbo].[Albums].[Price] AS [__withn__Albums__Price],&lt;br /&gt;  [dbo].[Albums].[AlbumArtUrl] AS [__withn__Albums__AlbumArtUrl] &lt;br /&gt;from [dbo].[Artists] &lt;br /&gt;  LEFT JOIN [dbo].[Albums] ON ([dbo].[Artists].[ArtistId] = [dbo].[Albums].[ArtistId]) &lt;br /&gt;WHERE &lt;br /&gt;  [dbo].[Artists].[ArtistId] = @p1&lt;br /&gt;@p1 (Int32) = 22&lt;/pre&gt;
&lt;p&gt;The With statement is &lt;a href="http://simplefx.org/simpledata/docs/pages/Start/NamingConventions.html"&gt;fluid&lt;/a&gt; like &lt;code class="method"&gt;FindAllBy&lt;/code&gt;, so by adding &lt;code class="method"&gt;WithAlbums&lt;/code&gt; into the command chain, it knows to include the contents of the Albums table in its query to the database and that it must then collate the results into one row of information about an artist. It does this with a LEFT JOIN statement. The net result is that &lt;code class="variable"&gt;eagerDynamicArtist&lt;/code&gt; is created with an &lt;code class="property"&gt;Albums&lt;/code&gt; property already populated with all the albums in a &lt;code class="type"&gt;SimpleList&lt;/code&gt; object - another &lt;code class="type"&gt;IEnumerable&amp;lt;dynamic&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="Screenshot of the Locals window as eagerDynamicArtist is being accessed. Shows Albums property to have type SimpleList" src="http://blog.hmobius.com/image.axd?picture=simplelist.png" alt="Screenshot of the Locals window as eagerDynamicArtist is being accessed. Shows Albums property to have type SimpleList" width="552" height="238" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;As with &lt;code class="variable"&gt;lazyDynamicArtist&lt;/code&gt;, you can just iterate over a SimpleList to access each item it contains so the rest of the example code here remains the same. The main difference is that there are no additional SQL statements sent to the database on the fly, so your DBAs will like you a lot more, &lt;em&gt;except if there are no items in the Albums table matching the artistId&lt;/em&gt;. More on that in a minute.&lt;/p&gt;
&lt;p&gt;So how does this look when casting &lt;code class="variable"&gt;eagerDynamicArtist&lt;/code&gt; to a POCO? It works very well.&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;Artist eagerPocoArtist = db.Artists.FindAllByArtistId(22).WithAlbums().FirstOrDefault();&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Artist {0} {1}", eagerPocoArtist.ArtistId, eagerPocoArtist.Name);&lt;br /&gt;&lt;br /&gt;foreach (var album in eagerPocoArtist.Albums)&lt;br /&gt;{&lt;br /&gt;  Console.WriteLine("\t{0}", album.Title);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;code class="property"&gt;eagerPocoArtist.Albums&lt;/code&gt; is populated and cast correctly from a &lt;code class="type"&gt;SimpleList&lt;/code&gt; into an &lt;code class="type"&gt;IEnumerable&amp;lt;Album&amp;gt;&lt;/code&gt; (or whatever subtype you prefer) for your code to iterate through. Hurrah! But with a proviso....&lt;/p&gt;
&lt;h3&gt;When there are no matching items in the JOINed table&lt;/h3&gt;
&lt;p&gt;What happens in an eager-loading scenario if the Artists table contains a row with no matching rows in the Albums table? Answer: the LEFT JOIN generated by WithAlbums returns null for all the Albums table fields.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the result is accessed as a dynamic object, &lt;code class="variable"&gt;eagerDynamicArtist&lt;/code&gt; will not have an Albums property pre-generated at all. However, because Simple.Data still infers a hierarchy via foreign keys, it evaluates the &lt;code class="property"&gt;Albums&lt;/code&gt; collection &lt;em&gt;again&lt;/em&gt; when accessed for the first time (here, as part of the foreach loop), sending &lt;em&gt;another&lt;/em&gt; query to the database which &lt;em&gt;again&lt;/em&gt; returns no results as a dynamic (SimpleQuery) object. (But not a null one)&lt;/li&gt;
&lt;li&gt;If the result is cast first to a POCO, &lt;code class="property"&gt;eagerPocoArtist.Albums&lt;/code&gt; will be set to null, so it will have to be tested for null before being iterated over.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a nutshell then, if the JOINed table has no associated rows, Simple.Data drops back to behaving as if it were lazy-loading data rather than eager-loading it. Coder beware.&lt;/p&gt;
&lt;h2&gt;Wrapping Up&lt;/h2&gt;
&lt;p&gt;The examples above are all predicated on the following assumptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The code is using the Simple.Data.SqlServer provider to access the database. YMMV if you are using a different Simple.Data.ADO-based provider&lt;/li&gt;
&lt;li&gt;The two tables have a foreign key relationship between them and referential integrity is being maintained. Without it, the inferred hierarchy does not exist and the Albums property only exists if you eager-load it using the WithMany method rather than With. The former (and its corresponding WithOne method) allows you to specify the relationship between two tables while the former bases it on existing FK relationships.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find more about joining tables in &lt;a href="http://simplefx.org/simpledata/docs/index.html"&gt;the Simple.Data documentation&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=QF1aMI9UgmM:-SAoajiabGc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=QF1aMI9UgmM:-SAoajiabGc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=QF1aMI9UgmM:-SAoajiabGc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=QF1aMI9UgmM:-SAoajiabGc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=QF1aMI9UgmM:-SAoajiabGc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=QF1aMI9UgmM:-SAoajiabGc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=QF1aMI9UgmM:-SAoajiabGc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=QF1aMI9UgmM:-SAoajiabGc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/QF1aMI9UgmM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/QF1aMI9UgmM/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2012/10/14/Inferred-Hierarchies-and-Evaluation-Strategies-in-SimpleData.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=2e49670d-21b0-441a-b8b5-74444b4c3f48</guid>
      <pubDate>Sun, 14 Oct 2012 00:00:00 +0100</pubDate>
      <category>Geek Stuff</category>
      <dc:publisher>DanM</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=2e49670d-21b0-441a-b8b5-74444b4c3f48</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=2e49670d-21b0-441a-b8b5-74444b4c3f48</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2012/10/14/Inferred-Hierarchies-and-Evaluation-Strategies-in-SimpleData.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=2e49670d-21b0-441a-b8b5-74444b4c3f48</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=2e49670d-21b0-441a-b8b5-74444b4c3f48</feedburner:origLink></item>
    <item>
      <title>NotMetro: A Theme For dotNetBlogEngine</title>
      <description>&lt;p&gt;I uploaded my first theme for dotNetBlogEngine today. You’ll find it at &lt;a href="http://dnbegallery.org/cms/List/Themes/NotMetro"&gt;http://dnbegallery.org/cms/List/Themes/NotMetro&lt;/a&gt;. It’s powering the very blog you’re reading now. It’s called NotMetro as it borrows from the official Metro styles document but not too much. And of course, it’s not called Metro any more, is it.&lt;/p&gt;&lt;p&gt;Here are the specs.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;HTML5 – Uses the &lt;a href="http://code.google.com/p/html5shiv/"&gt;html5shiv&lt;/a&gt; to make it IE8- friendly. Not &lt;a href="http://modernizr.com/"&gt;Modernizr&lt;/a&gt; as there’s no fancy CSS. Borrows a few ideas from the &lt;a href="http://html5boilerplate.com/"&gt;HTML5 Boilerplate&lt;/a&gt; project too.&lt;/li&gt;&lt;li&gt;CSS – Uses &lt;a href="http://necolas.github.com/normalize.css/"&gt;normalize.css&lt;/a&gt; and styles from &lt;a href="http://code52.org/"&gt;Code52&lt;/a&gt;’s wonderful &lt;a href="http://code52.org/metro.css/"&gt;metro.css&lt;/a&gt; project&lt;/li&gt;&lt;li&gt;Javascript – Aside from the shiv, none more than BlogEngine already uses.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Layout is one wide, 900px column. The widget zone is in the footer at the end of the page. All standard widgets look fine in it.&lt;/p&gt;&lt;p&gt;For the benefit of those reading with a feedreader, here’s a screenshot.&lt;/p&gt;&lt;p&gt;&lt;img width="660" height="447" title="theme2" style="border: 0px currentcolor; display: inline; background-image: none;" alt="theme2" src="http://blog.hmobius.com/image.axd?picture=theme2.png" border="0"&gt;&lt;/p&gt;&lt;p&gt;Any and all feedback would be gratefully received&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lZx3Y4jj-go:jmjwNjxh-r0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lZx3Y4jj-go:jmjwNjxh-r0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lZx3Y4jj-go:jmjwNjxh-r0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lZx3Y4jj-go:jmjwNjxh-r0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lZx3Y4jj-go:jmjwNjxh-r0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lZx3Y4jj-go:jmjwNjxh-r0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lZx3Y4jj-go:jmjwNjxh-r0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lZx3Y4jj-go:jmjwNjxh-r0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/lZx3Y4jj-go" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/lZx3Y4jj-go/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2012/09/25/NotMetro-A-Theme-For-dotNetBlogEngine.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=3d9b3744-48cd-4d84-ad37-7c748724ef75</guid>
      <pubDate>Tue, 25 Sep 2012 12:00:00 +0100</pubDate>
      <category>Geek Stuff</category>
      <dc:publisher>obiwan</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=3d9b3744-48cd-4d84-ad37-7c748724ef75</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=3d9b3744-48cd-4d84-ad37-7c748724ef75</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2012/09/25/NotMetro-A-Theme-For-dotNetBlogEngine.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=3d9b3744-48cd-4d84-ad37-7c748724ef75</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=3d9b3744-48cd-4d84-ad37-7c748724ef75</feedburner:origLink></item>
    <item>
      <title>DeveloperFusion Needs A New Editor</title>
      <description>&lt;p&gt;After a very happy eighteen months as editor of &lt;a href="http://www.developerfusion.com/"&gt;DeveloperFusion.com&lt;/a&gt;, I’ve decided to move on and write some more of my own copy rather than commission and edit other peoples for a while. Which means that &lt;a href="http://www.developerfusion.com/about-us/"&gt;James and Nick&lt;/a&gt; are looking for a new editor. If you have some spare time and would like to contribute to the great community of .NET developers, get in touch at &lt;a href="mailto:hello@developerfusion.co.uk"&gt;hello@developerfusion.co.uk&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lrwN2FXL9lo:Cmc1Q523UHU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lrwN2FXL9lo:Cmc1Q523UHU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lrwN2FXL9lo:Cmc1Q523UHU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lrwN2FXL9lo:Cmc1Q523UHU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lrwN2FXL9lo:Cmc1Q523UHU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lrwN2FXL9lo:Cmc1Q523UHU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=lrwN2FXL9lo:Cmc1Q523UHU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=lrwN2FXL9lo:Cmc1Q523UHU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/lrwN2FXL9lo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/lrwN2FXL9lo/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2012/09/17/DeveloperFusion-Needs-A-New-Editor.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=d7a0dc9a-878f-4c63-a2eb-cf14266b22c3</guid>
      <pubDate>Mon, 17 Sep 2012 22:00:00 +0100</pubDate>
      <category>Megaphone</category>
      <dc:publisher>obiwan</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=d7a0dc9a-878f-4c63-a2eb-cf14266b22c3</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=d7a0dc9a-878f-4c63-a2eb-cf14266b22c3</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2012/09/17/DeveloperFusion-Needs-A-New-Editor.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=d7a0dc9a-878f-4c63-a2eb-cf14266b22c3</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=d7a0dc9a-878f-4c63-a2eb-cf14266b22c3</feedburner:origLink></item>
    <item>
      <title>Windows 8 First Thoughts And Notes</title>
      <description>&lt;p&gt;I repaved my main machine yesterday from Win7 to Win8. I&amp;rsquo;d not played with Win8 at all before and only read about the desktop\touch pain and big start menu discomfort.&lt;/p&gt;
&lt;p&gt;Here are my thoughts and reactions as I went along and tried a few things:&lt;/p&gt;

&lt;h2&gt;Installation \ Users&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Installation off USB stick. Very slick. Only memory card reader not recognized. Even external USB speakers have built-in drivers.&lt;/li&gt;
&lt;li&gt;Hmm. Must create first admin user as one connected to a Live account. Why would I want to do that? No option to create further users either. Why remove that? &amp;lsquo;Twas very handy, that.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Paranoid thought. Isn&amp;rsquo;t a linked account as admin dangerous? Could someone back hack your computer through an admin account like &lt;a href="http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/all/"&gt;they did with Mat Honan?&lt;/a&gt; (Honan, what is bet in life? Not that, I&amp;rsquo;m guessing)&lt;/li&gt;
&lt;li&gt;Once you&amp;rsquo;ve found the control panel, it is possible to unlink your admin account btw. Linked accounts allow you to sync &amp;lsquo;settings&amp;rsquo; to all your linked devices. What settings they include, it doesn&amp;rsquo;t say, and if you&amp;rsquo;ve only one device (like me), there doesn&amp;rsquo;t seem a point to linking an account.&lt;/li&gt;
&lt;li&gt;Now if there was an option to save your registry settings &amp;ndash; effectively a Windows save point &amp;ndash; to the cloud, so when you next repave, you could restore all the control panel settings you&amp;rsquo;ve tweaked with a click of the mouse that would be great. Sign me up. But alas, no.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;New lock screen is pretty. Press any key to log in. Click-swiping with mouse doesn&amp;rsquo;t seem to work. Maybe I&amp;rsquo;m not doing it right.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Touch Apps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start screen is a bit imposing isn&amp;rsquo;t it. Sure I&amp;rsquo;ll never use some of these apps. Games, Finance, Maps &amp;ndash; goodbye.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;To uninstall a touch app, right click and select uninstall from options that appear at the bottom of the screen. They aren&amp;rsquo;t listed with desktop apps in the Programs and Features control panel.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Try the Apps Store and see what I can find.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;The most obvious thing I CAN&amp;rsquo;T find is a search box for apps &amp;ndash; just a seemingly infinite right-scrolling list of categories with three apps in each.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t know how it works for touch users, but simply typing something brings up the search dialog. Not very obvious.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Oddly enough, what I really want now is the first thing I dismissed in Win7 &amp;ndash; the demo video tour guide. All these touch apps are very in your face &amp;ndash; full screen, big fonts &amp;ndash; without much in the way of visual aids for the newcomer.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Happy to note that Alt+F4 still kills an app and Alt+Tab still cycles through your open tabs.&lt;/li&gt;
&lt;li&gt;Finally found the &amp;lsquo;help&amp;rsquo; button. Unhelpfully, it&amp;rsquo;s not F1 any more. It&amp;rsquo;s in the Settings charm for the app currently onscreen (Swipe to right edge of screen or Win+C). Also unhelpfully the help option seems to be optional and not all that helpful.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;The People app is telling me it is already connected to my live account, twitter, and linkedin. Really? When did that happen. Used the settings charm to add Google+, Facebook.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Privacy conscious people can thus disconnect accounts as required.&lt;/li&gt;
&lt;li&gt;Search for people in three ways: start typing, scroll right, or click the little minus button in the bottom right of the app to &amp;lsquo;zoom out&amp;rsquo; and group all contacts under the letters of their first names. Home, End, Page Up and Page Down also work.&lt;/li&gt;
&lt;li&gt;The What&amp;rsquo;s New view is a great, clean amalgam of Facebook wall and twitter feed.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s obvious how to reply to someone&amp;rsquo;s update on Twitter or Facebook but not how to send a Tweet or update your own Facebook wall. App has an oddly read-only feel to it as a result.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;The Mail app is also pretty to look at and useful to set up so your lock screen tells you how many emails you have without needing to check, but I&amp;rsquo;ll stick to Outlook.&lt;/li&gt;
&lt;li&gt;Worth noting the &amp;lsquo;Change PC Settings&amp;rsquo; option at the bottom of the Charms window (Win+C). Probably the best part of the touch-half of Win8 I&amp;rsquo;ve found so far.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;ll be nice to get a Surface RT. At the moment, from a desktop users perspective, I think I&amp;rsquo;ll save the touch apps for use as a read-only, non-work view on things. And also figure out what all the sharing options do &amp;ndash; especially when facebook keeps changing it&amp;rsquo;s definition of privacy and resetting our privacy settings. It&amp;rsquo;s hard enough for one hand to know what the other is doing without there being six hands to keep track of and one speaking in tongues.&lt;/p&gt;
&lt;h2&gt;Desktop Apps&lt;/h2&gt;
&lt;p&gt;Huzzah, the desktop. Feeling safer. Win8 has been appealing for several reasons, not the least of which are the apps I don&amp;rsquo;t need to install any more:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Virtual Clone Drive : ISOs are now supported as folders natively by Win8. Yes!!&lt;/li&gt;
&lt;li&gt;Start Killer : Because there&amp;rsquo;s no start button now anyway.&lt;/li&gt;
&lt;li&gt;Slickrun, Teracopy, and Foxit PDF Reader : For now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And also the new features in Win8 are straight to install as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hyper-V on the client. Huzzah!&lt;/li&gt;
&lt;li&gt;IIS8&lt;/li&gt;
&lt;li&gt;WebSocket protocol for IIS8. (Under WWW Services \ App Dev Features)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sadly there&amp;rsquo;s no native support for eBook formats still, so that&amp;rsquo;s still the Kindle desktop app to install. Or whatever you use.&lt;/p&gt;
&lt;p&gt;Scott Hanselman blogged a great list of &lt;a href="http://www.hanselman.com/blog/Windows8ProductivityWhoMovedMyCheeseOhThereItIs.aspx"&gt;keyboard shortcuts to get around the Win8 desktop&lt;/a&gt;. These will help your comfort level greatly for a while. Write them down until they are in your subconscious.&lt;/p&gt;
&lt;p&gt;Here are some more thoughts on my desktop experience so far.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desktop apps don&amp;rsquo;t talk to their touch equivalents. Sadly. I&amp;rsquo;m not sure if it&amp;rsquo;s possible to do so, but it would seem beneficial if it was.&lt;/li&gt;
&lt;li&gt;Hitting the Windows key to start a new app is a big lurch. I really miss SlickRun \ Launchy right now for the lack of desktop disturbance they caused. I used to use Winkey to bind apps to Win+number before slickrun but again the UX shift of having something pinned to the taskbar which isn&amp;rsquo;t running so you can start it with Win+1, 2,3, etc is again a bit lurchy.&lt;/li&gt;
&lt;li&gt;Installing apps on the desktop is very &amp;ldquo;quiet&amp;rdquo;. On Win7 , you installed something and the start menu would shout at you the next time and highlight it so you could find it. Not in Win8. The new start menu tile is buried somewhere to the right in tile view and there&amp;rsquo;s sadly no &amp;lsquo;just installed&amp;rsquo; group in the list view of the start menu either.&lt;/li&gt;
&lt;li&gt;Theming seems to have gone awry. You can change window border and taskbar colours to black (my preference in Aero) with no means of changing the font colour from black. In fact, the whole &amp;lsquo;advanced colors&amp;rsquo; dialog of earlier windows seems to have disappeared and the &amp;lsquo;automatic color&amp;rsquo; option is a bit odd, keying off the main color of the current desktop background.&lt;/li&gt;
&lt;li&gt;The Win+X menu is a great addition. Must figure out the registry settings to add\remove entries from there. Hyper-V \ IIS would be useful additions.&lt;/li&gt;
&lt;li&gt;Even though I&amp;rsquo;ve switch the display scaling down from 125% to 100%, all the window title fonts are still the same size taking up way more space than they need to and screwing up other things like Outlook&amp;rsquo;s nav pane.&lt;/li&gt;
&lt;li&gt;Oddly, I was surprised to find that the VS2012 installer does not include an option for SQL 2012 Express as previous editions of VS did. Oddly, it&amp;rsquo;s not an option in the Web Platform Installer either.&lt;/li&gt;
&lt;li&gt;Windows Live Photo Gallery is broken in Win8 at the moment. Sadly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So there we have it. Currently my head is still adapting to the Win8 way of doing things as well as its look and feel. Intuitively it feels like the way to run Win8 as a desktop machine is either to ignore touch apps completely or to use them as a read-only view of your online profile. Most of them just don&amp;rsquo;t feel customizable enough to tweak them as I want at the mo. And also, to use local accounts rather than live accounts if you haven&amp;rsquo;t a compelling reason to do so.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=9EVfSHn4DIg:btVCkgdFkfw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=9EVfSHn4DIg:btVCkgdFkfw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=9EVfSHn4DIg:btVCkgdFkfw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=9EVfSHn4DIg:btVCkgdFkfw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=9EVfSHn4DIg:btVCkgdFkfw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=9EVfSHn4DIg:btVCkgdFkfw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DansArchive?a=9EVfSHn4DIg:btVCkgdFkfw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DansArchive?i=9EVfSHn4DIg:btVCkgdFkfw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DansArchive/~4/9EVfSHn4DIg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/DansArchive/~3/9EVfSHn4DIg/post.aspx</link>
      <author>danm@hmobius.com</author>
      <comments>http://blog.hmobius.com/post/2012/09/04/Windows-8-First-Thoughts-And-Notes.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.hmobius.com/post.aspx?id=ab33c6e8-1d75-44dd-95f4-6a87200659fd</guid>
      <pubDate>Tue, 04 Sep 2012 10:53:00 +0100</pubDate>
      <category>Geek Stuff</category>
      <dc:publisher>Obiwan</dc:publisher>
      <pingback:server>http://blog.hmobius.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.hmobius.com/post.aspx?id=ab33c6e8-1d75-44dd-95f4-6a87200659fd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.hmobius.com/trackback.axd?id=ab33c6e8-1d75-44dd-95f4-6a87200659fd</trackback:ping>
      <wfw:comment>http://blog.hmobius.com/post/2012/09/04/Windows-8-First-Thoughts-And-Notes.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.hmobius.com/syndication.axd?post=ab33c6e8-1d75-44dd-95f4-6a87200659fd</wfw:commentRss>
    <feedburner:origLink>http://blog.hmobius.com/post.aspx?id=ab33c6e8-1d75-44dd-95f4-6a87200659fd</feedburner:origLink></item>
  </channel>
</rss>
