<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2653066858929843446</id><updated>2012-02-28T04:20:20.189Z</updated><category term='Entity Relationship Framework'/><category term='Resharper'/><category term='Visual Studio'/><category term='technology'/><category term='Commands'/><category term='Team Foundation Server'/><category term='Microsoft'/><category term='MVC'/><category term='nInject'/><category term='Standards'/><category term='Dependency Injection'/><category term='nUnit'/><category term='Self-Study'/><category term='OLED'/><category term='Word Processor'/><category term='Mock'/><category term='Osherove'/><category term='TestDriven.net'/><category term='Windows'/><category term='Future'/><category term='IDE'/><category term='Editing'/><category term='Unity 2.0'/><category term='Telerik RADControls'/><category term='3.5'/><category term='JQuery'/><category term='DIP'/><category term='TFT'/><category term='IEnumerator'/><category term='Metabolite Libraries'/><category term='printer'/><category term='Stylecop'/><category term='Work'/><category term='Windows Azure'/><category term='Communication'/><category term='LED'/><category term='NAnt'/><category term='transform'/><category term='and Infragistics Netvantage'/><category term='Unit Testing'/><category term='PageTypeBuilder'/><category term='Ghostdoc'/><category term='Grid Computing'/><category term='economist'/><category term='DevExpress DXPerience'/><category term='web.config'/><category term='xml'/><category term='nHibernate'/><category term='Plugin'/><category term='IoC'/><category term='Kinect'/><category term='Cloud Computing'/><category term='Javascript'/><category term='ERF'/><category term='Enhancement'/><category term='IEnumerable'/><category term='Xbox'/><category term='DOJO'/><category term='2010'/><category term='Developer'/><category term='Tips'/><category term='MSBuild'/><category term='television'/><category term='2005'/><category term='publishing'/><category term='Tool'/><category term='DI'/><category term='Integration Test'/><category term='C#'/><category term='PHP'/><category term='Development'/><category term='3D'/><category term='Agile'/><category term='namespace'/><category term='Castle Windsor'/><category term='TeamCity'/><category term='2.0'/><category term='demonstration'/><category term='CMS'/><category term='EPiServer'/><category term='Prediction'/><category term='ASP.Net'/><category term='app.config'/><category term='.NET'/><category term='Books'/><title type='text'>The Life and Times of A Busy Developer</title><subtitle type='html'>My interests are all versions of Visual Studio - using C# primarily but historically being a VB6, VBA and VB.NET convert.  I work with EPiServer CMS - and in my spare time I am passionate about coding standards and the new discoveries surrounding the Xbox Kinect and its application in software development. Just as science fiction influences science fact, so games influence practical applications. We live in one of the true Golden Ages for computing.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-8869706623513914359</id><published>2012-02-21T14:44:00.000Z</published><updated>2012-02-21T16:52:41.241Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web.config'/><category scheme='http://www.blogger.com/atom/ns#' term='namespace'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='transform'/><category scheme='http://www.blogger.com/atom/ns#' term='publishing'/><category scheme='http://www.blogger.com/atom/ns#' term='app.config'/><title type='text'>Transforming app.config files</title><content type='html'>&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: large;"&gt;Transforming your app.config file using XML namespace transforms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most of the projects I work on always tend to suffer from the lack of XML transforms in the web.config file. For those of you who are not familiar with the concept of transforms, they automate changes to the web.config file when publishing a solution. This is invaluable when using continuous integration on Web Applications. For those who are using a non-web project - it is worth checking out &lt;a href="http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx"&gt;SlowCheetah.vsix.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;This Visual Studio extension will extend 2010 so that the same parser that reads the web.config and produces a new version - depending on the build settings - will also read the app.config file! Genius! This is valuable because as most of you will know, the app.config is simply the web.config for application assemblies. It is an XML file, that has many of the same settings found in web.config. &amp;nbsp;Read more about it on &lt;a href="http://stackoverflow.com/questions/1431742/what-is-app-config-for" target="_blank"&gt;this useful StackOverflow page&lt;/a&gt;. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Note: Although its location is usually the root folder of the application, this can be determined using the C# Compiler Options &lt;i&gt;/appconfig:filename&lt;/i&gt; where &lt;i&gt;filename &lt;/i&gt;is the full path to the file. See &lt;a href="http://msdn.microsoft.com/en-us/library/ee523958.aspx" target="_blank"&gt;this link&lt;/a&gt; for more details.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-8869706623513914359?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/8869706623513914359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2012/02/transforming-appconfig-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8869706623513914359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8869706623513914359'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2012/02/transforming-appconfig-files.html' title='Transforming app.config files'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-2270433480371672296</id><published>2011-12-04T19:05:00.001Z</published><updated>2012-01-02T16:11:39.530Z</updated><title type='text'>Programming Problems</title><content type='html'>Every now and then, I get the urge to code just for the sake of coding. &amp;nbsp;However I often lack the situation for inspiration in coming up with relatively simple problems that just need a good bit of problem solving skill (perhaps it is only logical as we dedicate our lives to solving problems, not creating new ones). I was delighted to see &lt;a href="http://stackoverflow.com/questions/277106/looking-for-some-interesting-c-sharp-programming-problems" target="_blank"&gt;someone over at StackOverflow.com posting&lt;/a&gt; about sites that specialise in programming problem creation.&lt;br /&gt;&lt;br /&gt;I found &lt;a href="http://projecteuler.net/" target="_blank"&gt;the Project Euler site &lt;/a&gt;to be very interesting. Check it out for more example tasks to try out, in a language-agnostic format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-2270433480371672296?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/2270433480371672296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/12/programming-problems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2270433480371672296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2270433480371672296'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/12/programming-problems.html' title='Programming Problems'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-5689140808892123139</id><published>2011-11-16T19:20:00.001Z</published><updated>2011-11-16T19:29:38.222Z</updated><title type='text'>Minecraft</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Despite all of the other amazing games out there, Skyrim, Saints Row 3 and Modern Warfare 3 amongst many of the titles, I have been bitten by one of the most amazing-yet-simple games to hit the market. &amp;nbsp;Minecraft is due to be released this Friday, but having already sold well over 4 million licences already, and having 12 million registrations, all despite not yet reaching full release status.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;This is amazing for a beta piece of software, yet this never stopped Mojang AB, the Dutch producers, from releasing an amazing piece of software. &amp;nbsp;The graphics are amazingly simplistic, but the gameplay is something else to experience. Where most games end with simplistic design but over-developed resources (graphics, music and storyline), Minecraft opts for configurable worlds which allow administrators to control what happens within them. Developers can produce artifacts that perform functions. For example on my local server, Hollowworld, they have boats that sail to other locations, farms, shops, and other things like this.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;If you haven't experienced it yet, head on over to www.minecraftforums.com for more information. The only thing you'll regret is that you hadn't found it sooner, and perhaps the amount of time dedicated to it.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-5689140808892123139?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/5689140808892123139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/11/minecraft.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5689140808892123139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5689140808892123139'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/11/minecraft.html' title='Minecraft'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-2256411234985246315</id><published>2011-09-23T17:11:00.002+01:00</published><updated>2011-09-23T17:35:20.286+01:00</updated><title type='text'>MVC 3</title><content type='html'>&lt;span class="Apple-style-span" &gt;After being exceptionally busy the last month or two, complete with a death in the family, I've not been finding the time to blog as much as I wanted to. However, at work we've moved onto an ASP.NET MVC 3 application.  &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;The first task to do was to migrate a working MVC 1 application into MVC 3.  This was unfortunately only realised halfway through a sprint, after I found myself with yet another bug caused by me trying to create a partial view. Seems that the MVC framework improved its support for such a feature with version 2.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I found that the Razor view-engine is an absolute pleasure to work with. It is fast, and although intellisense is not what it could be (similar to the intermittently faulty nature of the jQuery support through the use of vsdoc files). Yet the rewards for persevering are many. I get interpreted C# in my View - meaning that I can insert snippets of code and just save, then refresh my browser - and I can see the effects.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;a href="http://nuget.org/"&gt;NuGet &lt;/a&gt;is another extension to Visual Studio 2010 that allows me to install new applications with out much of a problem.  So far, I've managed to change the version of the jQuery library through using the packages.config file. Very impressed with this degree of automation that seems to be an attempt for Microsoft to become more of a Content-Delivery Network (CDN) such as the likes of Google, Yahoo, etc are known to be.  Many people might wonder what the business model of being a CDN is - but of course the real money comes from the money generated from the ability to know exactly who is using what at a point in time.  How many people are using what technology?  Microsoft can of course then shift their corporate strategy to support those technologies that the data support as being the most popular.I had to uninstall version 1.0 to install the latest update, after getting error messages in Visual Studio.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Updating NuGet allowed me to install the latest extension for reading the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/872d27ee-38c7-4a97-98dc-0d8a431cc2ed/"&gt;version 1.5 of the jQuery vsdoc reader&lt;/a&gt;, complete with the new &lt;para&gt; tag which allows paragraphs in the summary.  I didn't  even know that the vsdoc file would read your own comments on your own functions, but apparently doing the following will cause your function to show up with comments in intellisense:&lt;/para&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;function MyFunction(){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;/// &lt;summary&gt;All about MyFunction&lt;para&gt;Blah blah blah&lt;/para&gt;&lt;/summary&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;alert('It works!');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;} &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I seriously recommend anyone switching to MVC 3 now. It can be a problem converting an existing application to MVC 3 without the use of the MVC 3 ASPX to Razor converter application, as well as the actual MVC 2 to 3 project update tool.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Additionally, I corrected the mis-spelling of the user details for the Visual Studio 2010 splash screen. Someone with fat fingers had made a mash up of this (along with a number of other issues that come with my inherited Virtual Machine for development that I reluctantly use at work).  An explanation of how to do this can be found over &lt;a href="http://t800t8.blogspot.com/2010/04/how-to-change-registered-owner-and.html"&gt;here at T800T8's blog&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt; It's the weekend and I'm heading home now...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-2256411234985246315?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/2256411234985246315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/09/mvc-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2256411234985246315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2256411234985246315'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/09/mvc-3.html' title='MVC 3'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-6709636504586522996</id><published>2011-07-18T08:49:00.006+01:00</published><updated>2011-07-18T09:24:25.945+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='LED'/><category scheme='http://www.blogger.com/atom/ns#' term='Future'/><category scheme='http://www.blogger.com/atom/ns#' term='TFT'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='printer'/><category scheme='http://www.blogger.com/atom/ns#' term='demonstration'/><category scheme='http://www.blogger.com/atom/ns#' term='television'/><category scheme='http://www.blogger.com/atom/ns#' term='economist'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><title type='text'>The Days of The TFT are Numbered</title><content type='html'>The future is bright. The future appears to be organic too.  Not content with producing every consumable food product in organic variants, it now appears that those brilliant people over at Samsung have produced organic LED's (OLED's) at a width of a jaw-dropping 0.9mm. Check out the video of it over at the &lt;a href="http://www.pcadvisor.co.uk/videos/105280/sony-unveils-a-prototype-oled-tv-thats-just-09mm-thin/"&gt;PC Advisor website&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Things are getting smaller, and less power-hungry than ever it seems. There is even talk of using OLED as wallpaper, lighting, and &lt;a href="http://www.youtube.com/watch?v=J30r2y-HuBs"&gt;a number of other wondrous applications&lt;/a&gt;.  Back in 2008, Samsung showcased their new OLED at the &lt;a href="http://www.youtube.com/watch?v=7HbXzSdResM&amp;amp;feature=related"&gt;Computer Entertainment Show  2008&lt;/a&gt;.  As the CES spokesperson said, the OLED is produced using natural materials.  This means that the light that it emits is closer to the way nature intended it to be - rather than the artificial light generated by say thin-film transistor (TFT) televisions. However, the downside is that colours such as blue - which (coincidentally perhaps) do not occur often in nature - degrade rapidly and are proving a huge factor in reducing the overall longevity of the new technology.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;IF (this.oled.price  &amp;lt;=  this.newspaper.price) ... &lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The fact that the OLEDs are cheap to produce, could lead to a scenario whereby everyone around us picks up the latest free newspaper on their disposable OLED  viewer.  In the same ubiquitous manner that we notice Smartphones at the moment, so too will we notice an increase in the use of OLED devices. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Advertising would change its definition from that of a content provider to that of a delivery mechanism when we see OLED devices combined with 3D printers. These devices use a special kind of resin that can be hardened in fine layers (a few millimetres across and decreasing all the time as research progresses in this area) meaning that anything with an appropriate model can be printed.  As &lt;a href="http://www.economist.com/node/18114327"&gt;the article in The Economist &lt;/a&gt;heralds - the need to transport goods over a large distance will be removed - and so (hopefully I feel) freeing us from our insatiable demand for fuel for transportation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are indeed exciting times to live in. The future of development is very bright indeed. We just need a way of inspiring more young people to come into the world of development. Without these bright young minds - our future is not so certain.  Let us hope that inventions such as these inspire them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-6709636504586522996?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/6709636504586522996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/07/days-of-tft-are-numbered.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/6709636504586522996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/6709636504586522996'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/07/days-of-tft-are-numbered.html' title='The Days of The TFT are Numbered'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-4988927781695888700</id><published>2011-03-25T04:52:00.003Z</published><updated>2011-03-25T05:29:32.634Z</updated><title type='text'>More Fun With The Kinect</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;The Day of the Xbox&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Being a lifelong pauper, I've always preferred to hunt around for second hand electronic goods rather than pay the full amount.  It allows me to follow that old adage of "buy the best you can afford" thus I get more for my money. The lack of second hand Xbox Kinect's put my in somewhat of a frustrated state.  On the one-hand, I love the fact that it is taking so long for people to separate from their beloved Xbox goods, but on the other hand it means that I don't get to own one!&lt;br /&gt;&lt;br /&gt;However, on Wednesday this week I passed the local game exchange shop and saw one of these lovely devices for sale!  Sure I had seen the non-PSU versions - designed for the new generation of black Xboxes - but not this version.  I nearly pushed past the surprisingly large number of customers to get served.  However, I remembered reading reviews on some of the games out there.  I managed to find a copy of the &lt;a href="http://www.play.com/Games/Xbox360/4-/13952556/Kinect-Get-Fit-With-Mel-B/Product.html?searchtype=gameall&amp;amp;searchsource=0&amp;amp;searchstring=Get+Fit+With+Mel+B&amp;amp;urlrefer=search&amp;amp;strefer=gameall&amp;amp;searchfilters=s{Get+Fit+With+Mel+B}%2bc{362}%2b"&gt;Get Fit With Mel B&lt;/a&gt; game, along with &lt;a href="http://www.play.com/Games/Xbox360/4-/15570098/EA-Sports-Active-2/Product.html?searchtype=gameall&amp;amp;searchsource=0&amp;amp;searchstring=ea+sports+active+2+(kinect&amp;amp;urlrefer=search&amp;amp;strefer=gameall&amp;amp;searchfilters=s{ea+sports+active+2+(kinect}%2bc{362}%2b"&gt;EA Sports Active 2&lt;/a&gt; - which comes complete with its own heart rate monitor.  This would be a good day.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I spent the remainder of the day sweating and straining in front of the television.  And that was just setting the Kinect up!  Once this tricky little device is set up it is fairly straight forward to launch the games. The moves are a different thing since the latency of the units (i.e. the time taken for the Xbox to realise you have moved) and the difficulty of getting some of the moves just right, both combine to make the learning curve steeper than with some games out there. Sure they are probably simple to some out there, but I keep realising I am no longer a spritely teen who can tackle new learning tasks like this relatively easily!&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;b&gt;Outside the Gaming World&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There has been a huge amount of research done since my post in which I fantasised about using the Kinect for software development.  It seems some adventurous, brave and clever (not to mention quicker and more motivated than me) people have devised an idea of how to program the Xbox to control commands in Visual Studio.  Over at &lt;a href="http://www.dotnetrocks.com/"&gt;DotNetRocks &lt;/a&gt;on &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=643"&gt;one of their podcasts&lt;/a&gt; (I would say "latest" but we know how ridiculous any statement about times is in the digital age are) is a conversation about this field of research.  The researchers are &lt;a href="http://community.devexpress.com/blogs/markmiller/default.aspx"&gt;Mark Miller &lt;/a&gt;(a multi-platform and language developer with over a decade of experience in software development) and &lt;a href="http://www.sethjuarez.com/"&gt;Seth Juarez&lt;/a&gt; (Tech Evangelist over on DevExpress and a PhD student in Computer Science and Artificial Intelligence).  I highly recommend reading the comments section of this article for some interesting, if slightly impossible with current technology, ideas such as using sign language to allow us to type (one of the problems with development of any kind given our historical dependency on text-based development environments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Although incredibly busy, if we look further afield - outside of the pure Microsoft remit - we see lots of work being done by some incredible people. YouTube is rapidly becoming the showcase for all things Kinect - with many hacks showing just what is possible. An article on Extreme Tech shows a bunch of MIT students hacking JavaScript so that it can recognise Kinect movements and commands.  The article includes a video of them interacting with the device to operate a web browser. Truly awesome stuff and the article comes with many done-to-death jokes about Minority Report.  Yack yack yack!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now all I need is my monitors implemented on contact lenses - using 3D technology - and I will be a happy bunny.  I predict that within the next 5 years we will see this kind of technology being used for everyday purposes as a form of miniature heads up display - or goggles. The technology is actually already available since 2008 so perhaps we are closer than we realise...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-4988927781695888700?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/4988927781695888700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/03/more-fun-with-kinect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/4988927781695888700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/4988927781695888700'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/03/more-fun-with-kinect.html' title='More Fun With The Kinect'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-7129995808676036950</id><published>2011-03-11T21:42:00.003Z</published><updated>2011-03-11T21:57:50.703Z</updated><title type='text'>New Codebase</title><content type='html'>It has been a while since my last post.  I've recently started a new contract and thus my hours are more constrained than they were. The recent EPiServer project I am working with uses the Model-View-Presenter pattern.  In the world of EPiServer, few sites are implemented in ways other than the norm of ASP.NET Forms.  The one problem I've found seems to be in registering events, and making them all successfully fire.  The codebase is mature and undocumented.  My least favourite type of code and the lack of standards shines through.  An example is whereby some developers have produced viable MVP classes (Views and Presenters plus an Interface) in order to implement the page.  These are great but only when &lt;i&gt;the rest of the code is &lt;b&gt;not&lt;/b&gt; asp.net web forms&lt;/i&gt;. Yes - the new inheritance has disappointed with its lack of correctly scoped architecture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-7129995808676036950?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/7129995808676036950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/03/new-codebase.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7129995808676036950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7129995808676036950'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/03/new-codebase.html' title='New Codebase'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-5068028645009385711</id><published>2011-01-26T03:36:00.003Z</published><updated>2011-01-26T03:58:51.774Z</updated><title type='text'>Studying and Education in Career Development</title><content type='html'>Having found myself this week leaving one work position, and beginning another, it is that time whereby I spend many a late night studying.  It is with bleary eyes and sallow complexion that I ask "what things can be done to improve ones study ability"? &lt;br /&gt;&lt;br /&gt;Malcolm Gladwell quotes no less than 10,000 hours as the statistical average number of hours that it takes for one to become an expert at something.  There may be some people who learn quickly - and others who will need to reinterpret something many times over in order to comprehend.&lt;br /&gt;&lt;br /&gt;The area of epistemology is enormous - and growing all the time.  Much like psychology, it is a field that relies on a fairly subjective matter. Some learn by doing things, some by reading, others by watching, discussing or a number of other things.  I always remember being surprised when I was at university that I learnt that I was a reader as much as a doer. It meant that I had to being approaching my learning processes with structure and planning. Very easy when you are between lectures, and lounging around doing little or nothing, but much more demanding when you have to work as well as study.&lt;br /&gt;&lt;br /&gt;This is one of the reasons that I love contract work so much. It gives me those little breaks in between roles that most permanent staff members get as holidays.  At 20 - 28 days a year, this time is often spent with family or friends.  However if you &lt;br /&gt;choose this, and do not cram at least some study into the day, your work is going to suffer.&lt;br /&gt;&lt;br /&gt;It should all be worth it in the end when you get that dream job. Only when you find your calling should a contractor consider permanent work - and then only with a company that helps with costs for books, and study materials. &lt;br /&gt;&lt;br /&gt;At the moment I am investigating a nice little virtual book (not really an e-book) collection over at &lt;a href="www.safaribooksonline.com"&gt;Safari Book Online&lt;/a&gt;.  They have a surprising collection of technical reference books online.  A little pricier than buying the originals, this kind of collection is regarded as for the more serious student - such as a small to medium sized business - or a group of students who want to take up the $22.99 a month it costs to have up to 10 books a month.  At first I thought "woah - I would be paying the cost of a book a month!" before I realised that actually most of the books are A) very new, and B) very expensive to buy.  It makes sense to take advantage of a service like this if you want to learn your subject matter well. &lt;br /&gt;&lt;br /&gt;The only thing that money cannot buy (okay apart from happiness) is motivation.  You need to keep yourself geared up when being studious. For this reason, I am researching the techniques to keep one focused.  Again, this is a subjective topic.  There are some of us who require absolute quiet to get work or study done. Then there are those (like me) who have to have some music on in the background. Not too bad when it is something like the electronic synthesiser music (think Sim City music or Jean Michel Jarre) - without a catchy hook to it because then you could end up becoming absorbed by the music.  Additionally, there are those in the middle who need lots of conversation around them to have words flowing into their ears and thoughts.  This is one of the reasons some writers prefer coffee shops.  The background noise of caffeinated individuals means that we are stimulated by snippets of conversations drifting to our lug-holes.&lt;br /&gt;&lt;br /&gt;One more thing that can affect study time - writing blog posts. Time to sign off!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-5068028645009385711?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/5068028645009385711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/01/studying-and-education-in-career.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5068028645009385711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5068028645009385711'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/01/studying-and-education-in-career.html' title='Studying and Education in Career Development'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-2032534086256379371</id><published>2011-01-21T12:05:00.003Z</published><updated>2011-01-26T04:00:13.055Z</updated><title type='text'>New Year, New Tab. Period</title><content type='html'>Thank goodness all that festive rigmarole is over.  Call me "the slightly meaner cousin of Ebeneezer Scrooge" but  do not like Christmas.  I see it as a commercial marketing ploy intended to increase our sense of dissatisfaction with our current belongings. However, it is an essential one for the success of most businesses.  &lt;br /&gt;&lt;br /&gt;One of the things that did appear on my radar is the Samsung Galaxy Tab. This is the new "iPad killer" from a company not exactly known for their software as much as their hardware.  Luckily the Tab gets past this by stocking Android OS on-board. WiFi, 3MP camera, microphone, touch-screen, and many other functions make this one of the few devices I have ever truly wanted to own.  The iPhone was alien to me. I didn't want to sell out everything I know about software and phones in exchange for Apple's take on it.  Sure the iWhatever has a large market - but these are mostly non-technical users.  Yes, I include designers in this bunch.  The same guys who tell us how wonderful the iPhone is now, were telling us 20 years ago how great Apples were over PC's or Amiga's or any other computer.  Anyone who knew a little bit about them could see that a single mouse button, two colours and a physical design that stuck out like a sore thumb was not desirable.  Apple cleaned up the physical design of their products, as well as pushing a technology that people hadn't noticed (touchscreens have been around before Apple brought them to the mainstream you know?).&lt;br /&gt;&lt;br /&gt;Anyway there is an interesting video on YouTube regarding the abilities of the Tab.  Bearing in mind the integration with Google Streetview, Goggles, and Maps, there are some amazing abilities to find locations using just the Tab.  It also has an impressive ebook reader, and whilst the resolution is a fraction less in height than the iPad (600 pixels for the Tab versus 768 for the iPad), the screen is slightly smaller which gives the same effective resolution.        &lt;br /&gt;&lt;br /&gt;Anyway - the end of this month will see me give in to temptation and buy one.  I simply cannot resist the shiny plastic and lovingly crafted casing. Yes, she will be mine...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-2032534086256379371?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/2032534086256379371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2011/01/new-year-new-tab-period.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2032534086256379371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2032534086256379371'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2011/01/new-year-new-tab-period.html' title='New Year, New Tab. Period'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-5497621708138438950</id><published>2010-12-29T10:33:00.002Z</published><updated>2010-12-29T10:36:58.523Z</updated><title type='text'>Oh The Joy of SQL 2008 and EPiServer</title><content type='html'>So there goes another wasted few hours that culminated in me un-installing SQL Server 2008. Never again will I rush head long into another version of SQL 2008 just because it looks nice and shiny. &lt;br /&gt;&lt;br /&gt;Microsoft have b0rked the installer!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-5497621708138438950?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/5497621708138438950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/12/oh-joy-of-sql-2008-and-episerver.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5497621708138438950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5497621708138438950'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/12/oh-joy-of-sql-2008-and-episerver.html' title='Oh The Joy of SQL 2008 and EPiServer'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-5359045242141090072</id><published>2010-12-09T20:35:00.005Z</published><updated>2010-12-12T04:18:36.635Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Future'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Kinect'/><category scheme='http://www.blogger.com/atom/ns#' term='Xbox'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Virtual Visual Studio 2015 - Kinect Required</title><content type='html'>In one of my &lt;a href="http://latoamsdev.blogspot.com/2010/10/episerver-visuabl-studio-and-cloud.html"&gt;previous posts&lt;/a&gt; I ventured the idea of a cloud-based development environment. Looking back at this posting, I started to wonder about my sanity.  Today I have a similar sensation of being irked by an idea that refuses to go away.  &lt;br /&gt;&lt;br /&gt;My colleagues and me were discussing some of the videos that are currently available on YouTube covering the hacks that the community has made of the recent cracking of the Microsoft Kinect.  It is a while since I have expressed genuine excitement over a new technology.  The iPhone proved uninteresting beyond its marketing strategy, sales of the new consoles over the last decade have caused maybe an eyebrow to raise, yet there it was in front of me - a video of someone using the Kinect camera to view himself in 3D.  You may know that the device has a depth sensor built in, as well as a microphone.  It uses a VGA mode camera (at 640x480 pixels) but manages to capture the image using the same resolution depth camera and combines the image using its software. These two data sources are combined into a 3D representational model within the Xbox 360.  Physical movements are translated into game instructions, meaning that there is no need for a controller.&lt;br /&gt;&lt;br /&gt;These data model avatars have been hacked so that the instructions can do anything the programmers want them to. Showing a person on a webcam now has additional functions, such as allowing the rotation of real-world objects inside the virtual 'transmission'. 28MB per second is the cost of each data stream, making it difficult (at present) to transmit or persist the information.  Multiple Xboxes allow for even greater detail in the 3D world, allowing complete 360 degree rotation. Single Kinects only permit slight rotation since only what the two cameras can see will be rotated.  There are &lt;a href="http://www.kinecthacks.net/"&gt;sites&lt;/a&gt; that demonstrate these hacks.&lt;br /&gt;&lt;br /&gt;Taking this to its logical conclusion means that it could be possible to move anything around in this world.  I began to speculate whether one day we will lose the mouse/controller altogether for human-computer interactions. This could be useful for development.  In an Integrated Development Environment such as Visual Studio,  where part of a developers job is interpreting and comprehending the data model, a 3D version would revolutionise programming.  Imagine if we could juggle data objects - pull in database links; we could delete code with a swipe of our hands, and development in general would be quicker. Development would be a stream of movements - meaning that other attributes would become&lt;br /&gt;&lt;br /&gt;It is truly an exciting time for development - and over the next few decades we are likely to see many different revolutions in the world of programming. Hard to imagine how things will turn out, but I enjoy guessing.  Chances are that the Kinect has set in motion events that will prove more revolutionary to development (in around ten years time) than Agile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-5359045242141090072?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/5359045242141090072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/12/virtual-visual-studio-2015-kinect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5359045242141090072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5359045242141090072'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/12/virtual-visual-studio-2015-kinect.html' title='Virtual Visual Studio 2015 - Kinect Required'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-7901110750654779767</id><published>2010-12-03T20:34:00.007Z</published><updated>2010-12-03T21:32:55.478Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stylecop'/><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Word Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='Editing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Communication'/><title type='text'>Team Communication Standards</title><content type='html'>"'I' before 'E' except after 'C'", was one of the formative poems that filled my head as a child.  As someone who has always attempted to maintain traditional grammar, I'm a keen believer in the idea that in order to be taken seriously by their readers, a writer must enforce a disciplined approach to their writing. Punctuation and grammar, syntax and semantics, all form the modern written English language. &lt;br /&gt;&lt;br /&gt;There are many of my personal friends who say that English is easy to learn, but that other European languages are harder.  It has been stated by numerous Portuguese friends that their language is very difficult to learn, but I wonder if this is because they rarely write anything in English? &lt;br /&gt;&lt;br /&gt;I always attempt to write as I would speak.  Where I take a breath, I put a comma. A pause, a full stop.  Speaking louder becomes italics or bold (or both), and so on. The rules are so intricate that many people despair of learning them - expressing frustration at having to use such seemingly pointless artefacts and tools to hamper the flow of words.  &lt;br /&gt;&lt;br /&gt;Yet, as with most skills; those who are reasonable at it will find poor use annoying.  A sign of stupidity or at least a lower intelligence than their own. These kind of bigoted views are inherent in our classrooms, where those who struggle at a topic become the cause for contempt and ridicule, whereas the best become elevated in the minds of their peers. &lt;br /&gt;&lt;br /&gt;Software is no different.  Written documents are often poorly constructed, with ambiguous prose affecting the interpretation of a decision or plan.  In my opinion, this is one of the reasons that Unified Modelling Language (UML) became so widely accepted. No longer were people at the mercy of an architect's hand-writing, but they could in fact all maintain a similar standard of communication more, more efficiently and quicker, than writing would enable them to.&lt;br /&gt;&lt;br /&gt;Just as Word Processors have syntax checkers, Visual Studio has StyleCop.  As I mentioned &lt;a href="http://latoamsdev.blogspot.com/2010/04/developer-enhancements.html"&gt;back in April&lt;/a&gt;, this is one of the (often underrated) tools for Visual Studio.  It allows a developer to control which exceptions are shown by the IDE, using the squiggly lines that we get when we write code errors. This is simply a functionality of the IDE, and all we are doing is configuring it to behave differently.  There are many possibly configurations and at its simplest, we can make critical errors become warnings - permitting the execution of the code.  This can come in handy when we are taking over an unmanaged code-base, and need to run the application without debugging it first.   At it's best, we can have it detecting the naming conventions used, and warning about the incorrect usage thereof. &lt;br /&gt;&lt;br /&gt;This enforcing of standards is vital if you want code that looks clean and tidy.  Without it, code often degenerates into a mess of deprecated assets and bugs waiting to be cause problems.  It is a steep learning curve when learning to configure, but once it is working it can be reused between projects and development teams.  A company can decide on a set of coding standards that are not just optional, but that actual present as compile-time errors instead of becoming benign bugs.&lt;br /&gt;&lt;br /&gt;Stylecop is installed when installing Visual Studio.  It is part of the MSBuild Tools option of the installer, and anyone who is interested in learning more should check out the following links.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/sourceanalysis/archive/2008/08/22/stylecop-4-2-msbuild-integration.aspx"&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/sourceanalysis/archive/2008/05/25/sharing-source-analysis-settings-across-projects.aspx"&gt;Sharing Standards&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/cs/StyleCop.aspx"&gt;CodeProject Tutorial&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-7901110750654779767?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/7901110750654779767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/12/team-communication-standards.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7901110750654779767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7901110750654779767'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/12/team-communication-standards.html' title='Team Communication Standards'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-1573869454128989076</id><published>2010-11-23T10:50:00.003Z</published><updated>2010-11-23T11:52:52.750Z</updated><title type='text'>Virtualisation</title><content type='html'>There are several products on the market that can be used to host a Virtual Machine (VM) on a local development machine. In an ideal scenario, I prefer to do all my development within such an environment, maintaining a virgin desktop - uncorrupted by any degree of &lt;a href="http://en.wikipedia.org/wiki/DLL_hell"&gt;DLL Hell&lt;/a&gt;. Such a system can be quickly swapped out for another instance, or restored to an earlier one, providing the kind of flexibility that is needed for complicated development requirements.  If I want to do some .NET development, then I load one instance.  If I need to work with a &lt;a href="http://en.wikipedia.org/wiki/XAMPP"&gt;XAMPP&lt;/a&gt; set-up, then this is equally easier to do.  I can be assured that the systems will not affect each other, as well as having a form of &lt;a href="http://en.wikipedia.org/wiki/Multiboot"&gt;multiboot&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;At the current moment in time, there seems to be an ongoing war between Microsoft - with their Virtual PC 2003, 2007 and Windows Virtual PC (used on Windows 7 platforms) - and other manufacturers such as Oracle's &lt;a href="http://www.virtualbox.org"&gt;Virtualbox&lt;/a&gt;, EMC's &lt;a href="http://www.vmware.com/products/"&gt;VMWare&lt;/a&gt;, and several other lesser known VM applications.&lt;br /&gt;&lt;br /&gt;Although they all appear to offer the same functionality, the actual reality is very different.  Microsoft have made a product that has the benefit of integrating easily with Windows, so long as you are not running Windows 7 as your host OS. If you are, you will not be able to use Virtual PC and instead have to use &lt;span style="font-style:italic;"&gt;Windows &lt;/span&gt;Virtual PC (WVPC), replete with bugs and issues.  For starters, there is the limited number of supported operating systems. In fact WVPC only supports Windows 7, Vista and XP SP3! Thinking that this was some kind of an oversight - or a "we don't want to support calls from people trying to install &lt;insert OS here&gt;" kind of opinion - I've spent the past few days trying to get various OS's working with it but sadly to no avail.&lt;br /&gt;&lt;br /&gt;The other VM's provide more of an open, hardware-oriented approach by creating a snapshot of the current machine within itself.  In theory, this means that you can install just about any OS that can be installed on a new instance of your machine (Linux, Windows, or Solaris).  Unfortunately VMWare - one of the most advanced - proves rather expensive and complicated to use fully.  There is no simple application on the site for you to download, configure and use.  Instead you must decide from a plethora of products which one best suits your needs. True - Microsoft do have a Virtual Server - but VMWare has been operating at the client-server architecture level for some considerable time now.&lt;br /&gt;&lt;br /&gt;VirtualBox is my favourite since it is free for personal or experimental use, installs relatively painlessly, and works well with most OS's.  Only time will tell me if there will be any issues surrounding using this particular VM.  So far so good - and Windows 2003 is installing nicely.&lt;br /&gt;&lt;br /&gt;In terms of the level of user these products should be aimed at (considering ease-of-use and features) I think that newbies and amateurs should use Microsoft's (possibly Windows) Virtual PC.  Mid level Small-Medium Enterprises should use Microsoft Virtual Server or VirtualBox.  Corporations will usually opt for VMWare - which is the reason for the array of solutions available.&lt;br /&gt;&lt;br /&gt;As time goes along, it will make more and more sense to use this kind of solution.  For now - I'll continue to wish that more employers will utilise this technology - for it offers great rewards to those who persevere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-1573869454128989076?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/1573869454128989076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/11/virtualisation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/1573869454128989076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/1573869454128989076'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/11/virtualisation.html' title='Virtualisation'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-6249668924499999528</id><published>2010-11-20T15:35:00.006Z</published><updated>2010-11-20T15:54:08.281Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Self-Study'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>I Am Reading About Unit Testing</title><content type='html'>The strength of many developers depends upon their experience with a technology - and how studious or thoughtful that person is of their respective vocation.  To that end, I often attempt to get started on a book or two.  &lt;br /&gt;&lt;br /&gt;My employers Valtech London (UK) have started this brilliant scheme whereby they will purchase any training materials we need for a subject.  The only requirement is that we study it to the best of our ability, and so I jumped at the chance to order a book that has always maintained its presence in my consciousness since I became aware that its author - Roy Osherove - a unit testing guru whom I both admire and respect (because he codes &lt;span style="font-style:italic;"&gt;and &lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;plays the guitar!) since I started following his Tweets. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Art of Unit Testing&lt;/span&gt; is an interesting look at (the previously considered science of) Unit Testing (some of you may have known that as soon as you read the title).  It goes through the various reasons why you should learn to unit test, and then looks at the techniques for unit testing in .NET with different patterns and frameworks. There are code examples, and the book closes with a look at design considerations such as legacy code testing.  In short - this is a book that is light years ahead of the rest of the market. Whilst others still look at Unit Testing as being unimportant or "someone else's problem", Roy manages to convey the importance of this subject. With various anecdotes of projects failing because of lack of proper testing support out there, unit testing is more important than ever. Buy this book - now!&lt;br /&gt;&lt;br /&gt;So I've always loved the smell and feel of a new book (yes I am strange like that) so it came as a real bonus when the other book I'd requested arrived yesterday. I am like a child with a new toy - looking at it and admiring the shiny plastic coated covers (since the book is a hardback).  It's &lt;span style="font-style:italic;"&gt;Agile Practices, Patterns, and Practices in C#&lt;/span&gt; by Robert C. Martin and Micah Martin. This is pretty much a textbook for any developer working in an Agile software development environment - and let's face it - if a software Project Manager doesn't implement Agile practices then they should probably be fired.  Or the Developer should look elsewhere for a job... This book is awesome and it looks at the many scenarios where Agile practices are enforced - and gives codes examples where applicable.  &lt;br /&gt;&lt;br /&gt;These two books have definitely made me feel Christmas has come early.  Does anyone else out there share the same passion for books - even if you don't read them - they still make attractive paperweights!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-6249668924499999528?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/6249668924499999528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/11/i-am-reading-about-unit-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/6249668924499999528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/6249668924499999528'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/11/i-am-reading-about-unit-testing.html' title='I Am Reading About Unit Testing'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-2193019357695878595</id><published>2010-10-11T16:59:00.005+01:00</published><updated>2010-10-11T17:24:48.209+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ERF'/><category scheme='http://www.blogger.com/atom/ns#' term='nUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='DIP'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='nHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Relationship Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='DI'/><category scheme='http://www.blogger.com/atom/ns#' term='nInject'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Castle Windsor'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Dependency Injection with Unity 2.0</title><content type='html'>There seems to be a lot going on in the world of Microsoft recently.  Around fifteen years ago , I would have struggled to find enough new Microsoft projects to count on two hands.  Now I would need more fingers than Captain Bird's Eye to keep track of the mammoth number of releases that go on behind-the-scenes.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently I have been spending more time toying with dependency injection.  There is a veritable feast of possible options for performing this most essential of tasks.  nInject, then Castle Windsor, and now Microsoft's own Unity 2.0 offers me the same kind of features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First thing I must say is that it is a lot more powerful than some of the other IoC containers out there.  It's possible to configure it using either the web.config, app.config or using code (plus many others I suspect). However, the amount of options that exist mean that it appears to be  a little more complicated than expected - the learning curve is much steeper behind the technology.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, the one thing I've learnt over my relatively short Object Oriented Development career is that the best technologies are the ones that you have to persist with.  Only time will tell me if I am to choose Unity 2.0 over the myriad of  other possibilities.  It is Microsoft however, so some people will make that decision based on this fact alone.  I am of the persuasion that a developer should be able to cherry-pick their favourite technologies - but the fact that Microsoft did so well recently with their Pex and Moles projects in order to replace nUnit and Visual Studio 2010 replacing ReSharper, and the Entity Framework replacing nHibernate...&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.kevinwilliampang.com/wp-content/uploads/2009/11/1.jpg" alt="Dependency Injection in a Nutshell" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;Okay, so don't flame me. It's all about personal choice, right?  At the end of the day, as I always think when it comes to coding-standards implementation within an organisation - it does not matter what standards you choose as long as you actually choose some.  The Internet is merely a guideline, in much the same way that the Data Protection Act is actually an impotent example of enforcing standards in data handling, or Ashley Cole is an example of the perfect gentleman.  Okay, so one of those is wrong, but I think I've surmised my point. :-)  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-2193019357695878595?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/2193019357695878595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/10/dependency-injection-with-unity-20.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2193019357695878595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2193019357695878595'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/10/dependency-injection-with-unity-20.html' title='Dependency Injection with Unity 2.0'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-387612886779352611</id><published>2010-10-07T13:20:00.006+01:00</published><updated>2010-10-07T13:46:30.227+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Grid Computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Prediction'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Computing'/><title type='text'>EPiServer, Visual Studio and Cloud Computing</title><content type='html'>Everything in recent EPiServer development advances seems to be along the lines of automating the implementation of content provision.  Taking this to its logical conclusion, after meeting with Rikard Ljungman of EPiServer - I had a vision about a utopian society whereby all technologies are centralised in the Cloud.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Picture this: the year is 2030, and Joe the Lead Developer arrives at work and fires up his computer. It is an old system - with the hardware not being updated much in the last decade. It has the standard 16 gig of memory, 32 x 4 Ghz processors and it crashes almost as much as it reboots.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After about five seconds, his machine is booting from the Web.  His company's ISP provides all the licences for the software that they use. Due to an excellent agreement with G-ISP  (Google's own ISP), they pay peanuts for their licences.  These days it's all about the processor cycles - so he selects that they are going to need around a petabyte of bandwidth for the company's weekly usage.  There are always a few gigabytes remaining on a Friday - which they can trade on e-Bay if necessary.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The new version of the operating system has been updated over the weekend, so Joe selects "I Agree" to update his machine.  He'll roll out the update across the company network as soon as he's tried it.  All it takes is a gesture with his hand on the screen to open the administrator menu - and a click of the mouse to deploy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The client's change-request has dropped into his Inbox.   They want to try out the new conceptual layout of a site in tandem with the live site, and find out the statistics.   Joe loads EPiServer with a wave of the hand along with some other arcane gestures.  These days, machines utilise the ideas first conceived of with the XBox Kinect and the Nintendo Wii, plus the iPhone.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now starts the hard part.  He wants to copy the existing layout to a new site.  Checking what servers are available from the list, he realises he needs a new server instance.  On the corporate hosting site, he sees that there is a local (i.e. same country) server instance available.  It's another Virtual Machine but comes with a good specification - plus it has been verified independently of its metrics - costing slightly more but is well worth it when it comes to assuring management of "money well spent". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After another 30 seconds, the new server instance fires up. Selecting the EPiServer CMS, he selects that they want the developer version.  This means that new components will be developed "in the cloud" and can be controlled without any risk of losing data.  The local hardware infrastructure is so archaic that it would be a major problem to host a developer specification environment on it.  Best build the site in the cloud.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Roger the Junior Developer rolls in late (as usual) and Joe informs him of the IP address of his development environment.  Roger signs in using his work credentials and is presented with an EPiServer interface - along with a Visual Studio 2020 and Hosting tab.  Clicking these - he verifies that the correct values have been set up.  He knows Joe looks at the architecture level - whereas Roger deals with the details.  Correcting the site name, he then writes some sample content, defines what the editors can or cannot do, and then publishes the site.  He forwards the details to one of the testers who fires up the site, signs in with his editor credentials, and sees an interface much like Roger's - only without the Visual Studio and Hosting tabs.  He expands the content further before forwarding to the testing guys...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Later in the day there is a hiccup.  The build checker informs Roger that there is an error in the code.  He rolls the site back to an earlier version, checks his code, corrects the offending section, and publishes his changes again.  Anything he cannot figure out will be handled by G-ISP Technical Support.  Looking at the picture of his father on his desk, he laughs as he remembers when people still developed software on a local machine level.  &lt;i&gt;Insane days&lt;/i&gt;, he thinks... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-387612886779352611?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/387612886779352611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/10/episerver-visuabl-studio-and-cloud.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/387612886779352611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/387612886779352611'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/10/episerver-visuabl-studio-and-cloud.html' title='EPiServer, Visual Studio and Cloud Computing'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-2103925991347826278</id><published>2010-08-29T00:32:00.003+01:00</published><updated>2010-08-29T01:33:41.933+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DevExpress DXPerience'/><category scheme='http://www.blogger.com/atom/ns#' term='and Infragistics Netvantage'/><category scheme='http://www.blogger.com/atom/ns#' term='Telerik RADControls'/><title type='text'>Advanced Development Elements</title><content type='html'>Being a developer means learning to develop with the language of your choice, and once you've mastered one of the DotNet languages such as Visual Basic, C# or C++ (or IronPython, etc), there is a levelling out of the learning curve.  The concepts in each of these languages are very logical, and the syntax then the framework's namespaces are the main skill of being a developer.&lt;div&gt;&lt;br /&gt;Afterwards comes a need to learn about third party tools.  Loc and Dependency Injection, Unit Testing, Content Management Systems, and Database Connection (e.g. LINQ to SQL, Entity Framework, etc) are the first level.  Some are Microsoft and some are true third party tools.  They each have their own requirements of developers for their use. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My personal favourite are the third-party user controls - used for enhancing existing framework controls.  There will be many times in coding when it becomes necessary to use another component in order to prevent the danger from &lt;i&gt;reinventing the wheel.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;This week has seen me working more and more with WPF, MVVM, Mocking and charting technologies.  In general, they've been very smooth to use.   I've worked with WPF before but on a small scale.  My personal opinion is that if you have worked with WinForms, it is not much of a step to then develop with WPF (I hope this will not be a case of &lt;i&gt;famous last words&lt;/i&gt;!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MVVM (Model - View - ViewModel) is another version of MVP (Model  - View - Presenter) &lt;i&gt;Design Pattern &lt;/i&gt;which in turn is another version of the MVC (Model - View - Controller) pattern. I find that they differ in terms of their learning curves but they each have their own advantages and disadvantages.  MVC is a long established pattern that has been debated longer than I've been around - but has only recently been adopted by Microsoft as a response to the difficulty of making the Web Forms and Win Forms projects similar despite the fact that they are completely different underneath.  From a practical perspective, all three of these patterns are great because they allow multiple developers to work on the same project without overlapping too much of each other's work (the common scenario with Forms is that two or more developers conflict because they cannot check out the latest version of the same file from source control.  The only option is often to merge files afterwards.  MVVM seems to be the best for WPF  - and is certainly a lot simpler that the others.   There are less specific controls in MVVM than there are in MVC and MVP.    &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mocking is brilliant for unit testing from an integration (as opposed to interactive) perspective - allowing us to ensure that specific classes all share common mock objects.  In summary, it is a way of enforcing the use of certain rules using interface objects - an object oriented programming practice recommended by teachers and proponents of this style of development for many years now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we move onto the prettier side of things - that of the visual components.  There are many single controls out there that do different things.  My first third party DotNet component was Nevron Chart and Dundas Chart.  These controls were added to a page or form, handed multi-dimensional array of data, and by setting various properties, they would render that data in all manner of different styles (e.g. pie chart, scatter diagram, etc).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whilst I am familiar with Telerik's RADControls from previous work I've done with them - I know how aesthetic they can appear.  There are many different controls with all manner of gradients, borders, fonts and effects applied to them (more so with WPF due to its flexible nature).  My personal gripe is that they are very expensive and don't seem to have a diverse range of pricing plans.  If money is no obstacle, I would probably choose this library for anything that needed to impress visually.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next option we looked at was DevExpress' DXPerience library.  They have an enormous range of properties and configuration stylings.  Performing faster than the others, they are often favoured because they also offer fantastic support for their products.  Couple these with the fact that they support many different pricing structures (you buy a handful of controls for very little).  These were my favourite choice but development politics being what they were, we could not use these beauties...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Due to vendor buy-in, we are using Infragistics' Netvantage suite of controls.  They are a powerful set of controls.  The main one that we are interested in using is the XamDataGrid.  After being initially disappointed at many of the reviews dotted around on the net, I was wary of this package.  There was also the fact that the installation seems to include a solution and project updater with the latest version - however neither option would work.  Every time I tried to upgrade the application, a null reference was generated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the end though, it was the fact that the client has given us the Netvantage library that has caused us to begin working with it.  It is very simple to get a basic grid up and running, which can read from many different types of data source (XML, Database, file, etc) but it is unclear whether the flexibility of the package comes from the fact that it is being build in WPF  using MVVM, or from the component itself.  MVVM allows us to hook the View (the grid control and window) to be hooked up to a ViewModel - which the Model updates.  This scenario makes it increasingly easier to reflect changes in what is rendered simply by changing the data in the Model.   This package is around the middle in terms of pricing structure.  It has more features than Telerik in most cases, but needs a lot more hard work to enhance its appearance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If a thousand or so isn't an option, then I would recommend possibly using RADControls.  The savings in terms of development time would be great enough to justify it.  However, for smaller projects, the best is going to be the DevExpress suite.  This is well recommended by many developers - with almost everyone else going for Telerik.   In terms of pricing, the NetVantage seems to work best for some management as it is not the cheapest, nor the most expensive. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In any case, the old days I remembered fondly have come flooding back!  I'm spending much of my own time actually testing these tools.  The results do not mirror the pricing tables.  Expensive does not always mean best.  I know which one I'm going with in the future.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To summarise - it is always best to test them for yourselves...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-2103925991347826278?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/2103925991347826278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/08/advanced-development-elements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2103925991347826278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/2103925991347826278'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/08/advanced-development-elements.html' title='Advanced Development Elements'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-340665910935690764</id><published>2010-08-23T19:18:00.005+01:00</published><updated>2010-08-23T19:56:04.890+01:00</updated><title type='text'>Microsoft.Web.Administration</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;This is one of my favourite recent discoveries from the Microsoft Dot Net Framework.  This is one of the recent 3.5 / 4.0 additions - being as it was released to provide an API with which to access Internet Information Services (IIS) version 7.0 and later 7.5.  Modelled around Vista, it saw a few minor changes with the damp squib that was Vista (two 'The IT Crowd' references there no less!), this is one of the most exciting collections I've seen recently.  &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;If you are similar to me (poor you) then you will dislike IIS 7.0's interface.  Granted - it is superior in just about every respect compared to version 6 but it still obfuscates a lot of the core functionality.  Microsoft.Web.Administration means that we can now write our own methods and user interfaces to perform the administration tasks that we previously had to do by hand.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;There are several ways to create a site.  The most basic is a straight forward site in IIS. To create this, let us explore the &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;ServerManager&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; class with the following snippet...  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ServerManager iisManager = new ServerManager();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;iisManager.Sites.Add("NewSiteName", "http", "80", "c:\\inetpub\wwwroot\mysite");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;iisManager.Update();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Those quick thinkers amongst you will see that this will create a site called &lt;b&gt;NewSiteName&lt;/b&gt;, using the &lt;b&gt;http&lt;/b&gt; protocol (or &lt;i&gt;https&lt;/i&gt;) on port &lt;b&gt;80&lt;/b&gt; which points to the physical drive location &lt;b&gt;c:\inetpub\wwwroot\mysite&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Application&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;If you want to set up a site as an application, the code is identical except we change the second line to the following: &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;iisManager.Sites["NewSiteName"].Applications.Add("/AppSite", "c:\\inetpub\wwwroot\mysite");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt; &lt;/i&gt;that we are referencing an existing site using an indexer for the &lt;b&gt;ServerManager.Sites&lt;/b&gt; class.  Note also the double backslash after the physical drive mapping letter, and the forwards-slash prefixing the Application name.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;Virtual Directory creation&lt;/b&gt; is similar, except we need to replace line two with two lines this time.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Application app = iisManager.Sites["NewSiteName"].Applications["/AppSite"];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;app.VirtualDirectories.Add("/VirtualDirectoryName", "c:\VirtualDirectories\VirtualDirAppSite");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;There are a number of other common functions that are explained on the Microsoft blog &lt;a href="http://blogs.msdn.com/b/carlosag/archive/2006/04/17/microsoftwebadministration.aspx"&gt;here&lt;/a&gt; including:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;Runtime State and Control&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;Recycling an Application Pool&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;Get The List of Executing Requests&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; You can also &lt;a href="http://www.c-sharpcorner.com/UploadFile/dhananjaycoder/2647/Default.aspx"&gt;Display A Site Running In A Specific Application Pool&lt;/a&gt; using LINQ,  &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.administration.sitelimits.maxconnections(VS.90).aspx"&gt;Limit The Number of Connections to a Site&lt;/a&gt;, or &lt;a href="http://mvolo.com/blogs/serverside/archive/2008/05/26/Accessing-IIS-7.0-configuration-remotely-and-on-server-core.aspx"&gt;Access the IIS Interface Remotely&lt;/a&gt; using MWA (Microsoft.Web.Administration).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;This last option is interesting because DCOM access is required to the server that you are connecting to - reminding us that most of what we see in Dot Net is actually just various wrapper classes with cleaner names and comments.  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Personally, I'd rather battle with a million C# libraries than wade through C++ code writing common functionality again and again. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-340665910935690764?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/340665910935690764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/08/microsoftwebadministration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/340665910935690764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/340665910935690764'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/08/microsoftwebadministration.html' title='Microsoft.Web.Administration'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-4601260044318694483</id><published>2010-08-13T20:53:00.002+01:00</published><updated>2010-08-13T20:55:45.354+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mock'/><category scheme='http://www.blogger.com/atom/ns#' term='Integration Test'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Osherove'/><title type='text'>Roy Osherove Talks About Mock Objects</title><content type='html'>He also gives some important differences between Unit Tests and Integration Tests (basically that unit tests are simple enough to exist in-memory and do not touch external resources).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://osherove.com/videos/2009/8/25/tdd-understanding-mock-objects.html"&gt;Here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-4601260044318694483?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/4601260044318694483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/08/roy-osherove-talks-about-mock-objects.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/4601260044318694483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/4601260044318694483'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/08/roy-osherove-talks-about-mock-objects.html' title='Roy Osherove Talks About Mock Objects'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-7833046577449045719</id><published>2010-07-26T07:38:00.007+01:00</published><updated>2010-07-26T08:10:15.181+01:00</updated><title type='text'>Back to Basics - Design Patterns for C#</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Taken from the O'Reilly book &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;C# Design Patterns, &lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;there are a number of different patterns that are fit for a variety of situations.  I'm listing them here to serve as a reminder but they are explored further in the above-mentioned book, which I recommend taking a look at...&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Adapter&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;Match incompatible interfaces&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Bridge&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Develop the interface and a module separately&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Select or switch class implementation during runtime&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Composite&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Single and composite objects are treated the same&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Decorator&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Dynamically adds new functionality to existing classes&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal; "&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Facáde&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal; "&gt;&lt;div style="display: inline !important; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Change multiple subsytems within a system into layers with distinct entry points&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal; "&gt;&lt;div style="display: inline !important; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Simplify a subsystem interface&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Flyweight &lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="display: inline !important; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Work with a large number of objects at a lesser resource cost&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;u&gt;Proxy&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Controls access to an object&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;On demand object creation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;This is clearly not an exhaustive list. There are many more reasons for implementing a specific pattern but often this is dependant upon the business needs. It is more of an art that a science - relying on the architect being able to use their crystal  ball to see which areas need designing a certain way. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-7833046577449045719?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/7833046577449045719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/07/back-to-basics-design-patterns-for-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7833046577449045719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7833046577449045719'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/07/back-to-basics-design-patterns-for-c.html' title='Back to Basics - Design Patterns for C#'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-7094134817728175142</id><published>2010-07-23T00:36:00.002+01:00</published><updated>2010-07-23T00:46:11.163+01:00</updated><title type='text'>EPiServer 6 Site Setup</title><content type='html'>When starting a new EPiServer 6 site on IIS 7.0, there are a few important pointers that should be memorised. Most important of these is the following:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Integrated Mode - Application Pool works fine&lt;/li&gt;&lt;li&gt;Your default.aspx page should have the highest priority in Default Documents.&lt;/li&gt;&lt;li&gt;It's best to bind each EPiServer version to their own server - e.g. don't mix a v5 and v6 of EPiServer on the same server.&lt;/li&gt;&lt;li&gt;Don't use a host name if you are only hosting on a local dev machine.&lt;/li&gt;&lt;li&gt;Ensure that you have granted all correct permissions to all files accessed.&lt;/li&gt;&lt;li&gt;Reorganise the folders the way you want them. So VPP folder should be in a standard location of your choosing. I personally dislike the initial install to Program Files/EPiServer x/VPP/ folder.&lt;/li&gt;&lt;li&gt;Install Joel Abrahamsson's &lt;a href="http://pagetypebuilder.codeplex.com"&gt;Page Type Builder&lt;/a&gt; before creating any templates.&lt;/li&gt;&lt;li&gt;Reuse existing code libraries where you can. I like Stuart Blackburn's &lt;a href="http://metabolite.codeplex.com"&gt;Metabolite Enterprise Libraries&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Visit EPiCode for other new user functions such as custom editor mode icons.&lt;/li&gt;&lt;li&gt;Visit world.episerver.com and check out the existing sites out there for what can be achieved using EPiServer.&lt;/li&gt;&lt;li&gt;Back up your web.config before doing anything and learn it off by heart.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-7094134817728175142?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/7094134817728175142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/07/episerver-6-site-setup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7094134817728175142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/7094134817728175142'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/07/episerver-6-site-setup.html' title='EPiServer 6 Site Setup'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-8613055008846149092</id><published>2010-07-19T06:35:00.003+01:00</published><updated>2010-07-19T07:02:57.186+01:00</updated><title type='text'>The Beautiful Team</title><content type='html'>Having just finished watching the inimitable Roy Osherove (pronounced osh-err-of) in his latest posting, I've just spend probably the most enlightening hour (in the code-oriented sense) of this July, learning some very important tips about being a team leader. &lt;a href="http://www.viddler.com/explore/RoyOsherove/videos/34/3.343/"&gt;Click here &lt;/a&gt;to check it out.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Okay, so I am not - and have never been - a team leader as such. Having contracted for almost the entire duration of my coding career and having always preferred being a follower than a leader.  Yet there are many things that make me think I should make the step. All developers have specific weaknesses that must be addressed by Team Leaders, and yet some companies do not even class team leaders as integral parts of the development staff.  Often there is a bottleneck (a development teams bane) in the progress caused by the Project Managers having little or no direct experience of technical issues.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Being as my education was in Business Information Technology, and not Computer Science, I am painfully aware of how businesses can change - and in fact &lt;i&gt;should &lt;/i&gt;change. But a humble developer - particularly a contract one - becomes aware of an unspoken rule of business: never stick your head above the parapet when you are in the trenches.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As Osherove points out - Team Leaders need courage - and bags of it. There is no room on a team for those who blame others for problems.  Instead, the point of a daily stand-up is for progress to be checked. Those ten minutes highlight issues that are present.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He is brave enough to also describe a situation  I know is familiar to almost every contractor - that of reaching a seemingly unsolvable problem.  Perhaps it is that the code is too hard to understand because this legacy code writer put too much inside a single method (so break it into several smaller private methods) but you just cannot spot the answer.  Maybe Google is not giving the answer, and your friend from the last place is unreachable.  This is the point whereby a really good developer communicates this fact to their leader.  &lt;/div&gt;&lt;div&gt;At this point they may either sack you (bad leader) or they can grow you.  This latter idea is the one that Osherove explains.  Team Leaders have to challenge the other developers - producing &lt;i&gt;internal growth &lt;/i&gt;as well as external.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another interesting point is to &lt;i&gt;build by feature&lt;/i&gt; and not layer. Design concerns can be spotted early on rather that rearing up when trying to demo to a customer. These features can be very small or large, depending on the iteration time.  He also explains that &lt;b&gt;peer review&lt;/b&gt; and &lt;b&gt;automation &lt;/b&gt;are two essential tools.  The reviewing not only prevent bad code causing problems to other people who may work on your code later on, but also shares knowledge between the team.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Automation reduces the time spent doing unproductive tasks.  I've noticed that Visual Studio - along with many other IDE's is the common tool that everyone uses, and yet the main characteristic of each new release (once the new amazing framework design-type features are removed) is that of saving time.  In other words - this is the benchmark of all good programmers. Learning short-cuts is a much overlooked skill for developers. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well written code, broken down into its own logical members reduces the need for transiently important comments.  Learning the tool off-by-heart is twice as productive.  Peer review (including the unit tests) shares knowledge. This guy just seems to churn out these kind of gems. I sincerely recommend familiarising yourselves with his work, and his books too, that he talks about in the video.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-8613055008846149092?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/8613055008846149092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/07/beautiful-team.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8613055008846149092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8613055008846149092'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/07/beautiful-team.html' title='The Beautiful Team'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-8526808645601770977</id><published>2010-06-06T06:05:00.005+01:00</published><updated>2010-06-06T07:23:00.275+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='IEnumerable'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='IEnumerator'/><category scheme='http://www.blogger.com/atom/ns#' term='2005'/><category scheme='http://www.blogger.com/atom/ns#' term='3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Commands'/><title type='text'>ASP.Net Yield Keyword</title><content type='html'>There are many hidden gems amongst the gigantic collection of Microsoft.Net Framework libraries, and occasionally I stumble across one that makes me pause until I understand it a little better. These are usually the commands or keywords that are rarely used.  The advent of the MVC Framework generated a number of these recently. Each release of the Framework has caused more and more of these. Release 3.5's LINQ and Lambda expressions, etc. are more general groupings of these commands.&lt;br /&gt;&lt;br /&gt;I was reading &lt;a href="http://stackoverflow.com/questions/39476/what-is-the-yield-keyword-used-for-in-c"&gt;an article&lt;/a&gt; recently on my favourite site &lt;a href="http://stackoverflow.com/"&gt;StackOverflow.com&lt;/a&gt; and learned of the &lt;em&gt;yield&lt;/em&gt; command. This is an interesting and often misunderstood keyword with some very useful applications.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;I Yield To You!&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;(several times actually)&lt;/h3&gt;&lt;br /&gt;At a high strategic design level, the purpose of this command is the implementation of the &lt;em&gt;Iterator&lt;/em&gt; pattern.  At the runtime level, it generates an IL stub method which returns an object of a type implementing IEnumerator.  At an actual design-time level, this command can produce an IEnumerable object of any generic type. Take the following code, borrowed from the &lt;a href="http://nerddinnerbook.s3.amazonaws.com/Intro.htm"&gt;Nerd Dinner&lt;/a&gt; tutorials. Those of you following closely will notice this code is also analysed on Stackoverflow.com:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;br /&gt;public IEnumerable&lt;ruleviolation&gt; GetRuleViolations() {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (String.IsNullOrEmpty(Title))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("Title required", "Title");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (String.IsNullOrEmpty(Description))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("Description required","Description");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (String.IsNullOrEmpty(HostedBy))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("HostedBy required", "HostedBy");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (String.IsNullOrEmpty(Address))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("Address required", "Address");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (String.IsNullOrEmpty(Country))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("Country required", "Country");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (String.IsNullOrEmpty(ContactPhone))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("Phone# required", "ContactPhone");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (!PhoneValidator.IsValidNumber(ContactPhone, Country))&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;yield return new RuleViolation("Phone# does not match country",&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;"ContactPhone");&lt;/ruleviolation&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="back-color:light-green;color:black;"&gt;&lt;ruleviolation&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;yield break;&lt;br /&gt;}&lt;br /&gt;&lt;/ruleviolation&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Basically, in this MVC-based method, we are performing several validation checks. Although the uninitiated will think of the return statement as being the end of the execution path, putting a &lt;em&gt;yield&lt;/em&gt; prefix will cause this to be returned as part of a collection.  Therefore, anything between none and all of these &lt;em&gt;RuleViolation&lt;em&gt; objects will be returned in a collection. Of course , this allows us to use the returned object and perform the usual collection actions (e.g. a &lt;em&gt;foreach&lt;/em&gt; loop, etc.)&lt;br /&gt;&lt;br /&gt;This means that we no longer have to have static integers to detect how many times the current property or member has been accessed in order to return the next result each time (as in the Iterator pattern), or produce a lot of code for an IEnumerable dependant class.&lt;br /&gt;&lt;br /&gt;This is a quick, and once understood - very useful command that not many people use these days due to the popularity of the newer classes that return collections of almost any object we want (e.g. List, ArrayList, etc). I intend to use it a lot more in my projects...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-8526808645601770977?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/8526808645601770977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/06/aspnet-yield-keyword.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8526808645601770977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8526808645601770977'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/06/aspnet-yield-keyword.html' title='ASP.Net Yield Keyword'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-994059371040463484</id><published>2010-06-05T20:44:00.008+01:00</published><updated>2010-06-05T21:24:25.379+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TeamCity'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='NAnt'/><title type='text'>Visual Studio 2010 and EPiServer 6</title><content type='html'>Firstly, I was reluctant to test these two applications on Windows XP.  Not only is XP considered legacy by many developers today, but it doesn't like to host  many sites on one machine.  However, after losing another machine to the recent heat wave we've been experiencing in the UK, I still wanted to explore these two further. For the most part, they play well with XP. Still - Windows Server 2003 would be a better minimal option for developing. &lt;br /&gt;&lt;br /&gt;First thing that I did was follow on from &lt;a href="http://latoamsdev.blogspot.com/2010/05/reducing-webconfig-size.html"&gt;my previous post&lt;/a&gt; in which I talked about the configuration file XML attribute  &lt;em&gt;configSource&lt;/em&gt;.  This allows portions of the web.config to be placed in separate files with the &lt;em&gt;.config&lt;/em&gt; extension.  &lt;br /&gt;&lt;br /&gt;Now although the default web forms web.config file is somewhat smaller with ASP.Net 4, EPiServer 6 negates a lot of the hard work that the Microsoft boys have put in.  A default Public or Demo Templates website will create a web.config file around 500 lines long, around ten times longer than a default web forms one. &lt;br /&gt;&lt;br /&gt;However one of the blessings with Visual Studio 2010 is the ability to have certain files depend on others - meaning they appear in the Solution Explorer &lt;em&gt;below&lt;/em&gt; the dependable file.  &lt;br /&gt;&lt;br /&gt;This is clearly demonstrated in the Public Templates EPiServer 6 project.  We have a web.config file - somewhat larger than it should be - but it is rendered as a tree!  When we expand the file, we can view the &lt;em&gt;episerver.config&lt;/em&gt; and &lt;em&gt;EPiServerFramework.config&lt;/em&gt; below it.  This is in the same style as the code-behind and designer files of a web form are hidden by default until someone expands all of the files - usually when editing the code or they are about to.&lt;br /&gt;&lt;br /&gt;Now although I haven't found the file property or Visual Studio option that performs this linking, I have noticed something interesting when looking at the project (.proj) file in a text editor.  We have the following code structure:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Content Include="Web.config"&gt;&lt;br /&gt;      &amp;lt;SubType&gt;Designer&amp;lt;/SubType&gt;&lt;br /&gt;    &amp;lt;/Content&gt;&lt;br /&gt;    &amp;lt;Content Include="episerver.config"&gt;&lt;br /&gt;      &amp;lt;DependentUpon&gt;Web.config&amp;lt;/DependentUpon&gt;&lt;br /&gt;      &amp;lt;SubType&gt;Designer&amp;lt;/SubType&gt;&lt;br /&gt;    &amp;lt;/Content&gt;&lt;br /&gt;    &amp;lt;Content Include="EPiServerFramework.config"&gt;&lt;br /&gt;      &amp;lt;DependentUpon&gt;Web.config&amp;lt;/DependentUpon&gt;&lt;br /&gt;    &amp;lt;/Content&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now I would recommend reading about these elements and attributes if you don't already know.  They can really neaten up your projects and are as useful as MSBuild IMHO. &lt;br /&gt;&lt;br /&gt;The main element &lt;b&gt;Content&lt;/b&gt; denotes the Build Action property in the IDE. This can be File, Page, Resource, etc.  The &lt;span style="font-weight:bold;"&gt;Include &lt;/span&gt;attribute indicates that the file is included in the project, whilst the &lt;span style="font-weight:bold;"&gt;SubType &lt;/span&gt;element indicates the correct icon to use for this file.  &lt;br /&gt;&lt;br /&gt;The most important one for us to look at is the &lt;span style="font-weight:bold;"&gt;DependentUpon &lt;/span&gt;element which is what gives us the expandable and collapsible parent that the current file is to appear below (i.e. what is the parent file?).&lt;br /&gt;&lt;br /&gt;For those of us who like to have a very neat solution structure inside Visual Studio - especially for default generic projects that we use as a starting point for any new projects, this is ideal. It is well worth playing around with the various settings inside the project file.  MSBuild is a very powerful piece of kit - and when complemented with TeamCity or Team Foundation Server, and NAnt, we can have high levels of automation within our development environment that can do away with many of the time wasting tasks that consume a large percentage of our development lives.  Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-994059371040463484?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/994059371040463484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/06/visual-studio-2010-and-episerver-6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/994059371040463484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/994059371040463484'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/06/visual-studio-2010-and-episerver-6.html' title='Visual Studio 2010 and EPiServer 6'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-1969940971128876628</id><published>2010-06-03T16:57:00.005+01:00</published><updated>2010-06-03T17:58:26.516+01:00</updated><title type='text'>Password Hacking or How Security and Technology Evolution Curves Do Not Correlate</title><content type='html'>In the days before I first started using the World Wide Web, back when Bulletin Boards were the only viable way of sending emails or reading "Web pages" (they were simple ASCII files), I was uninitiated in the ways of hacking except for a few experiments that showed how the older analogue phone systems were vulnerable to tone dialling attacks.  In these, the caller would play a serious of multi-frequency tones down the phone line, triggering specific events inside the telephone exchange. Although I never took advantage of these exploits, I thought of how simple it was to break into these systems.  All one needed was a reasonable recording device, a few escape codes (tones), and a lack of appreciation for corporate ethics.&lt;br /&gt;&lt;br /&gt;Fast forward ten years, and it struck me that although we have hurtled ahead in terms of the technologies we have at our disposal (e.g. CSS3 and HTML 5 at the time of writing this, JavaScript, not to mention the hundreds of other major frameworks and technologies available in computing), we have never reduced the number of security vulnerabilities present in our realm of computers. With most virus scanners requiring databases that would rival most medium to large sized service-oriented businesses, the picture is all too clear - we have never resolved the larger issues.  &lt;br /&gt;&lt;br /&gt;We have got better at identifying and categorising the types of exploits that hackers use, but the solutions are only ever as effective as the individuals who implement them.  Take passwords for example - they are a major weakness in most people security regimes.&lt;br /&gt;&lt;br /&gt;Many passwords consist of relatively simple combinations of nouns that reflect the user's life. Names of family members, pets, car registrations, etc. are regularly used.  When these are discarded in favour of computer-generated, hashed passwords, these too can be deduced either by discovering the hash key and reversing the password, or by observing the keystrokes as the user enters the word or phrase.&lt;br /&gt;&lt;br /&gt;One of the most vulnerable exploits comes from Phishing. Unscrupulous designers produce pages that look identical to existing login pages of banks or another institute's Website.  The user then logs into these after receiving an apparently innocuous email, and enters the same password they always use.  After receiving an error message, and giving up, the recorded password is saved to a database for usage later.  Alternatively a keystroke logger will install itself to monitor for the password. &lt;br /&gt;&lt;br /&gt;Finally, the one that many people fall victim to recently is the reuse of passwords over many different sites.  Take Bill - our hapless protagonist is a typical computer-literate individual who is too busy to think of multiple passwords.  Bill typically checks the "remember me" box on computers he uses in order to expediate his login attempts to his favourite sites.  Facebook proves a more pleasant experience for him when he is automatically logged in after clicking his bookmark, and using the same password on his Twitter account means that he doesn't forget it.  That nuisance of a CAPTCHA box that appeared last time confused him because that curvy writing is too slow when he is in a hurry to login to his webmail account. Bill doesn't have time to login - he has too little time left after updating his Facebook homepage every day for all his friends to view.&lt;br /&gt;&lt;br /&gt;Along comes Bob who develops a website that provides free statistics for all of Bill's webpages so that Bill and his friends can see who visited what when and why. Very important for Bill's social-networking circles! All that's required is that the members login once, and the site monitors the member's activities through various methods (to be discussed).  The site is a hobby for Bob, and he doesn't have time to employ a security expert or auditor.  &lt;br /&gt;&lt;br /&gt;Now along comes Fred -(okay, I am sorry about these names but these are the usual suspects in many given scenarios!) - who manages to connect to the server for Bob's website, and access the database. After decoding the emails, usernames and passwords for Bob's members, Fred performs a search using a combination of Bing, Google and Yahoo, for the email addresses.  He finds Bill listed on Facebook, and realising it is the same individual, begins the final stage of the hack.&lt;br /&gt;&lt;br /&gt;Upon logging-on the next day, Bill is horrified to find a lot of angry emails from his (now ex) friends, asking why Bill sent those nasty messages last night. Trying to log into the sites proves fruitless as all of his passwords seem to have changed.  His social life in ruins, Bill fires off a potentially fruitless email to the technical support for each site...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What Happened?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fred used a combination of what is called Social Engineering, and basic hacking techniques.  Much like spam, these were useless against the majority of the users on Bob's site because they used a different password for each site.  &lt;br /&gt;&lt;br /&gt;Fred simply realised that Bill used the same password over and over again for each site.  It was simple to hack Bill's accounts. Fred doesn't worry about the side-effects.  He used a proxy server to disguise his IP address. He also changed the source code on Bob's site so it will log other users passwords as they access the site.  It was easy. &lt;br /&gt;&lt;br /&gt;Even if the passwords were different.  Fred could have ended up using a computer that Bill had used. He would be able to &lt;span style="font-style:italic;"&gt;undelete&lt;/span&gt; the cookies that Bill's website usage had created, and be able to decrypt it apart. The remember-me option created a cookie in the users browser which was not encrypted, so it was easy to decode and reuse for another session by Fred - which made him appear to be Bill when using Bob's site.  No expiry was set for the cookie - which caused it to always be reusable.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;You Are The Weakest Link - Goodbye!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is a saying that something is only as strong as its weakest link. This is shown conclusively in Information Technology. The rule here is always have a basic security policy to use for different type of site.  Personally I have used passwords that have no actual words in them - but a combination of many different letters. For my main passwords, this is the case (I have three main ones) but I have a password that is less secure, for sites I am not (as) concerned about.&lt;br /&gt;&lt;br /&gt;Even multiple passwords are vulnerable. Forget one and the general reaction is to try one of the other ones.  The means that I've possibly revealed one of my valid passwords used on another site, to the current site. If this failed attempt was logged accurately (with the guess noted down), I would be exposed to any hackers. &lt;br /&gt;&lt;br /&gt;The best answer is to change the password regularly.  Despite the extra work, the other saying is drawn to mind:&lt;br /&gt;&lt;br /&gt;Prevention is better than the cure!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-1969940971128876628?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/1969940971128876628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/06/password-hacking-or-how-security-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/1969940971128876628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/1969940971128876628'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/06/password-hacking-or-how-security-and.html' title='Password Hacking or How Security and Technology Evolution Curves Do Not Correlate'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-4415320347799459332</id><published>2010-05-26T20:40:00.004+01:00</published><updated>2010-05-26T20:58:36.635+01:00</updated><title type='text'>Reducing the web.config size</title><content type='html'>Although ASP.Net features a streamlined web.config, In ASP.Net 3.5, we have always suffered from an extraordinary amount of redundant code. I was working on a project recently, and we managed to lessen the unreadable sections of the file by splitting them into their own unique files, and putting these inside their own folder.&lt;br /&gt;&lt;br /&gt;Another concept we used to smarten up the project root folder, whilst highlighting that this new folder was important was to mark it with square brackets - meaning that it would appear above the other files, especially when viewing the project in Visual Studio or Windows Explorer. The other option is to prefix it, ASP.Net 1.1 style, with the "App_" prefix - e.g. "[Config]" or "App_Config".&lt;br /&gt;&lt;br /&gt;So lets explore the file and see what can be removed. Firstly, we must remember an attribute that causes the ASP.Net Common Language Runtime (CLR) to look elsewhere for the current  XML attribute's contents. This is the keyword &lt;span style="font-style:italic; color:red;"&gt;configSource&lt;/span&gt; that indicates where the file is located. Consider the following portion of a normal web.config&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;&amp;LT;appsettings configsource="[Config]\appSettings.config"&amp;GT;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The above allows us to move the contents of the appSettings element of the web.config, to its own file called appSettings.config, located in the folder named [Config].&lt;br /&gt;&lt;br /&gt;There are a number of other sections that can be moved out.  These include:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;appSettings&lt;/li&gt;&lt;br /&gt;&lt;li&gt;connectionStrings&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some cannot be extracted, but the compiler and Visual Studio will give you a warning about these ones.  Try it out for yourself. Happy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-4415320347799459332?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/4415320347799459332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/05/reducing-webconfig-size.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/4415320347799459332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/4415320347799459332'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/05/reducing-webconfig-size.html' title='Reducing the web.config size'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-5989995909093107141</id><published>2010-05-22T21:37:00.001+01:00</published><updated>2010-05-22T21:56:31.706+01:00</updated><title type='text'>Personal Development</title><content type='html'>There are few fields that require so much training and re-training, as the field of Information Technology, and in particular Software Development.  Aside from perhaps Medicine and Legal Services, many other people spend less time learning than they do actually working.  In development, this seems to be the other way around. &lt;br /&gt;Technology changes at such a rapid pace.  I spend a large amount of my free time learning about new technologies, or older ones that I missed first time around. But this can involve some pretty hefty time investment, leaving little time for important things like, I don't know say, a social life or relationship.&lt;div&gt;Anyway, I believe in the old adage that it is better to be a Jack-of-All-Trades, but a Master-of-(at least)-One.  This involves smart learning, to ensure that time isn't wasted rehearsing unimportant activities, yet remaining aware of them.&lt;/div&gt;&lt;div&gt;One of my key performance indicators for developers is their overall awareness of the technologies in the marketplace at present. For example, if I was asked to name some newer skills that a developer should have, I'd say:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Continuous Integration&lt;/li&gt;&lt;li&gt;Dependency Injection&lt;/li&gt;&lt;li&gt;Test Driven Design&lt;/li&gt;&lt;li&gt;Unit Testing&lt;/li&gt;&lt;li&gt;JavaScript Libraries (e.g. JQuery, DOJO Toolkit, etc)&lt;/li&gt;&lt;li&gt;Mock Frameworks (Rhino-mocks, Moq, etc)  &lt;/li&gt;&lt;li&gt;SQL Server 2008&lt;/li&gt;&lt;li&gt;Visual Studio 2010 (LINQ, Lambda, Generic, Delegates, etc)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviously there are many others such as alternative languages (Ruby is a brilliant alternative and its benefits over PHP and ASP.Net are many-fold given other technologies like RESTful data). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I pay particular attention to the job boards, and read the forums and training manuals  once I have the names of the technologies.  This is the path I've chosen, and for better or worse, it is one that I must keep on until the day I can work no longer.  It's the price I pay for being passionate about programming.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-5989995909093107141?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/5989995909093107141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/05/personal-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5989995909093107141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5989995909093107141'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/05/personal-development.html' title='Personal Development'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-3989955849810086056</id><published>2010-05-09T13:56:00.000+01:00</published><updated>2010-05-09T14:56:04.814+01:00</updated><title type='text'>Choose Your Own Programming Adventure</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Reading today about the Choose Your Own Adventure series of books published during my (often mispent) childhood, which Jeff Atwood talks about &lt;/span&gt;&lt;a href="http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;over at Coding Horror&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;, I'm reminded of why I got into programming. &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;You see, these kinds of books had a logical, procedural programming oriented framework.  Each page was visited only once, and the paths you could choose would often diverge or merge based on whichever option you chose.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;The logic went along the links of :&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;If you choose to do A, go to page &lt;i&gt;x. &lt;/i&gt;If you choose the other option, go to page &lt;i&gt;y&lt;/i&gt;.&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;This provided a great influence in guiding me towards my chosen career path as a Microsoft C# Developer using ASP.Net.  It's the experiences we have as a child that ultimately make the person we become.  For me, it was the joy of reading a book in a different manner than others, and having some kind of flexibility.   I recognised this ability when I started coding back in the days of the Spectrum 128k (yes kilobytes!), or more importantly the Commodore Amiga.  There were no words to describe the fun I had spending days typing out lengthy blocks of code in order to produce simple effects on the screen.  You could even programmatically generate sound effects.  Yes it was crude, especially compared to today's standards. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;Although the capabilities of the software tools that we use to produce the modern software has evolved, the time investments versus rewards are still relatively equal.  The tools have got more finite in what they can do, but the basic premise is still very similar to modern day IDE's such as Visual Studio - i.e. you can spent a few minutes knocking together a prototype, or many days producing a more aesthetically pleasing result.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; Later would come Steve Jackson and Ian Livingstone's &lt;a href="http://en.wikipedia.org/wiki/Fighting_Fantasy"&gt;Fighting Fantasy&lt;/a&gt; series.  Incidentally, these were the two men who founded The Games Workshop. These had a few more rules regarding concepts such as combat. They were essentially a lightweight version of the Dungeons and Dragons games.  I can recall persuading my friends into allowing me to try out one of the multi-player books of the series ( ), and having lots of fun asking them "Okay, so you go north and see the last room you visited. What do you want to do now?".   Riotous fun, and it had the worthwhile side-effect of starting me in a craft that I love and adore working at.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-3989955849810086056?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/3989955849810086056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/05/choose-your-own-adventure-fighting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/3989955849810086056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/3989955849810086056'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/05/choose-your-own-adventure-fighting.html' title='Choose Your Own Programming Adventure'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-1839741542955463066</id><published>2010-04-22T00:01:00.000+01:00</published><updated>2010-04-22T00:09:51.135+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Metabolite Libraries'/><category scheme='http://www.blogger.com/atom/ns#' term='PageTypeBuilder'/><title type='text'>Metabolite Enterprise Libraries</title><content type='html'>Work with any tool for long enough and you begin to comprehend it in ways you would never have dreamt of.  EPiServer 5 has some issues that are only just being appreciated by their developers over in Stockholm, with the release of version 6 marking a serious milestone.  It's a sign that EPiServer is reaching new levels of acceptance.  In the local job website, there are a plethora of vacancies for developers with the right combination of skills.  &lt;br /&gt;&lt;br /&gt;Recently whilst using the best-thing-since-sliced-bread tool PageTypeBuilder for EPiServer, I also was advised to look at the Metabolite Enterprise Libraries.  What a powerful combination these tools make to the whole area of CMS website development.  The Metabolite Libraries give me examples of common functionality, tested and documented, so never again will I have to think "how did I do that before?" when encountering a specific design pattern within the development lifecycle. There are extension methods for all the most important classes, and the package is not even finalised yet.  &lt;br /&gt;&lt;br /&gt;The only downside is that this library could do with being made available to the wider public.  It's a great reference for "how-to" complete specific tasks - as well as demonstrating why EPiServer without PageTypeBuilder is a sorry looking beast indeed... &lt;br /&gt;&lt;br /&gt;Can't wait to see how this little package develops.  Take a look at it now over at &lt;a href="http://metabolite.codeplex.com"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-1839741542955463066?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/1839741542955463066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/metabolite-enterprise-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/1839741542955463066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/1839741542955463066'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/metabolite-enterprise-libraries.html' title='Metabolite Enterprise Libraries'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-9073201734493903526</id><published>2010-04-17T16:50:00.000+01:00</published><updated>2010-04-17T17:17:54.148+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='Stylecop'/><category scheme='http://www.blogger.com/atom/ns#' term='Enhancement'/><category scheme='http://www.blogger.com/atom/ns#' term='Ghostdoc'/><category scheme='http://www.blogger.com/atom/ns#' term='TestDriven.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='Resharper'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Developer Enhancements</title><content type='html'>Speaking to a colleague this week, I was talking about how a good programmer has a good arsenal of tools - as per &lt;a href="http://www.google.co.uk/search?hl=en&amp;source=hp&amp;q=scott+hanselman+tools&amp;aq=f&amp;aqi=g-sx2&amp;"&gt;Scott Hanselman&lt;/a&gt; of Microsoft fame - and I got to talking about Jetbrain's Resharper which is primarily a code-formatting and optimisation tool for Visual Studio 2005, 2008 and 2010 (as of version 5.0).  Apart from the ease by which it spots logic errors, it will also enforce renaming of all references to a renamed member of a class.  I always thought that apart from CodeRush - another tool about which the general consensus (at the time of writing) is that it is quicker than Resharper (also known as R#), but lacks many of the features of it. &lt;br /&gt;&lt;br /&gt;Resources&lt;br /&gt;&lt;br /&gt;There is a definite problem with regards to the memory consumption of R#.  The fact is that this tool performs lots of small compiles during design time.  This allows exceptions to be generated and the deficient code highlighted.  The only problem is that this consumes a lot of processor power and a relatively enormous amount of memory.  Too much considering how many developers still only develop with 4 GB of the stuff.&lt;br /&gt;&lt;br /&gt;So it was with great pleasure that I was introduced to StyleCop.  Apparently this tool is already enabled - a claim I was sceptical about to start with.  But - after copying across a .stylecop (configuration) file into my project root,  editing the XML document that makes up the .csproj file for the project in a few places to show Stylecop Warnings as errors, and Rebuilding the solution, I realised that there were many, many things I could do better in my code!&lt;br /&gt;&lt;br /&gt;Move aside R# - there's another bad boy in town! &lt;br /&gt;&lt;br /&gt;One of the issues that I like is to XML document all my class members.  Of course, in multiple-developer environments this is not always possible. Therefore, the addition of Stylecop allows me to break the build until a time when all the Stylecop Warnings are showing.  Even just using Ghost Doc is an idea.  This tool will create its own comments for you!  No it isn't psychic magic - it's because GhostDoc will look at the base class or indeed at the member name itself.  So if I have a class with a method e.g: MyClass.SortResults() and I use GhostDoc to comment this, the comments will read&lt;br /&gt;&lt;br /&gt;/// &lt;remarks&gt;&lt;br /&gt;/// Sort the Results&lt;br /&gt;/// &lt;/remarks&gt;&lt;br /&gt;&lt;br /&gt;Although that's good - it can feel moronic to rename the most clearly named member  in our classes.  If it does, I recommend you leave developing to people who actually care about the quality of their work and its extensibility.&lt;br /&gt;&lt;br /&gt;We'll rarely become millionaires through developing.  Sure the money can be good but there are too many 12 year old's in Pakistan who know how to throw things together just as quick as you.  Care about what you do, and you'll always find things become easier. There are still a lot of 1990's developers who can't understand that the money shouldn't be the end - it should be a side effect of doing something that you enjoy!  Honestly!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-9073201734493903526?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/9073201734493903526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/developer-enhancements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/9073201734493903526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/9073201734493903526'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/developer-enhancements.html' title='Developer Enhancements'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-8034489197171842247</id><published>2010-04-11T20:17:00.000+01:00</published><updated>2010-04-11T20:30:34.828+01:00</updated><title type='text'>UK Digital Rights Bill</title><content type='html'>What on Earth are the Labour Party trying to do with the latest ruling, called the Digital Rights Bill, it effectively ruins our use of the Internet.  &lt;br /&gt;&lt;br /&gt;As  &lt;a href="http://www.bit-tech.net/blog/2010/04/10/the-government-is-clueless/"&gt;some authors&lt;/a&gt; are commenting, there is an alarming lack of knowledge, and even apathy, towards the Internet by a lot of MP's.  Their ignorance is the worst kind.  Everyone seems to think that these morons are the best to run the country.  As a life-long Labour supporter, the last few years have seen some incredulously stupid rulings.  Things like the 2003 Criminal Justice Act did more damage than good - locking people away for ever more convoluted crimes.  There are approximately 2,300 more offences since Labour came to power, and I see more Abso-earning kids around than ever before, bullying older people who are too scared to retaliate lest they be burned out of the neighbourhood.  There is now less money to rehabilitate, because it is all spent on locking us all up.&lt;br /&gt;&lt;br /&gt;And this last bill was the final straw - sure they had the right idea trying to encourage more expenditure on the likes of a super-fast Internet broadband infrastructure.  This idea was again rebuked by many internal party members who claimed the higher taxation would damage their reputation.  &lt;br /&gt;&lt;br /&gt;Labour have also made some effort with the whole e-voting issues.  This is a good thing.  I think that if we all disagree with something, it shouldn't get done.  The easiest way to test this is to allow people to vote online as well as through the ballot box.  Though the latter method is once an election, the former can be used for all bills to decide (intelligently) which ones are right for us.&lt;br /&gt;&lt;br /&gt;Time to wisen up MP's.  Learn better filing systems for expenses, and learn a little about the things you are voting for or against - well - a little more than you currently do.  Thank you!&lt;br /&gt;&lt;br /&gt;Read a summary about the Digital Rights Bill &lt;a href="http://paidcontent.co.uk/article/419-digital-economy-bill-quick-guide-to-all-45-measures/"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-8034489197171842247?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/8034489197171842247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/uk-digital-rights-bill.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8034489197171842247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/8034489197171842247'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/uk-digital-rights-bill.html' title='UK Digital Rights Bill'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-3483790709820955403</id><published>2010-04-02T20:44:00.000+01:00</published><updated>2010-04-02T20:49:09.339+01:00</updated><title type='text'></title><content type='html'>Restarting my blog for once.  Time to start trying to shape the new developers out there.  Particularly the EPiServer ones!  Taking over another project shows me how many people overuse encapsulation.  &lt;br /&gt;The reason I love JetBrain  Resharper is that they allow you to quickly discover which other classes have references to the one you are currently viewing. I often do these sort of checks when learning another codebase, and am continually surprised by this phenomena.  It can only be caused by one thing - "absence of design".&lt;br /&gt;If we don't at least draft up a Class Diagram, then it's hard to identify which classes are likely to be reusable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-3483790709820955403?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/3483790709820955403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/restarting-my-blog-for-once.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/3483790709820955403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/3483790709820955403'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2010/04/restarting-my-blog-for-once.html' title=''/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2653066858929843446.post-5892218213026756395</id><published>2009-10-23T22:20:00.000+01:00</published><updated>2009-10-23T22:48:36.029+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='DOJO'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer'/><title type='text'>I Want To Be A Developer</title><content type='html'>Firstly - thanks for checking out my blog and if you want to get in touch - please do leave a message.&lt;br /&gt;&lt;br /&gt;My background is basically in Microsoft C# and VB.Net using both Windows and Web architecture.  If you are wanting to get into Microsoft development - let me advise you this golden rule: Choose a different language.  &lt;br /&gt;&lt;br /&gt;It's been said before (somewhere) that there are many issues with ASP.Net. Microsoft tried to keep it in line with their Windows application development - with elements having similar events and indeed names such as Forms, Labels and such.  However they often behave very differently.  Someone coming straight into ASP.Net from a Windows background will find it familiar, and it is this familiarity and indeed "ease of use" that tricks people into thinking that the web controls will behave exactly the same.  But just like a lot of the drag-and-drop features of Visual Studio and the way it creates superfluous and unnecessary code, so too will a lot of controls have problems when a person tries to perform tasks.  For example, they try to update a label with a string value when a user presses a button. However, because browsers work using postback from the client browser, the page will refresh, and the functionality will not occur the way it should do.&lt;br /&gt;&lt;br /&gt;Better to choose a language such as Ruby on Rails or a scripting language such as PHP which despite often being compared to ASP.net - it is a scripting language and doesn't have its own IDE, or run holding values in memory or executing dll's like Microsoft does. ASP.Net is more akin to an architecture with the use of Object Oriented Procedures, whereas PHP doesn't enforce such structure at all.&lt;br /&gt;&lt;br /&gt;It would be better to learn Java (preferably version EE) because there are more small firms using Java still to develop. This means you are more likely to find yourself as the single developer for a company.  Software houses that use Microsoft tend to be Microsoft Gold Partners (basically a way of getting the software cheaper than paying the full price) and the majority of the development that a MS developer does involves being sat in a cubicle working with a codebase that many others have worked on.  If the company is good, they will enforce policies that ensures the code conforms to certain standards.  Comments are always good for a developer who takes over a new project.  This applies in all languages, but because of the many technologies implemented in Dot Net, it is more important.&lt;br /&gt;&lt;br /&gt;I would advise staying away from PHP because of a number of reasons. The first one I find is that there is little way to tell if a command line is executing a PHP core command, or a third party development. At least Dot Net uses namespaces well and the development IDE allows intellisense so a dev knows a little about the objects they have at their disposal and exactly what they do.&lt;br /&gt;&lt;br /&gt;So saying, PHP will get you a decent job. Just learn the various Javascript libraries such as JQuery, the DOJO toolkit, etc. These will give you the fancy graphical effects seen on the likes of Twitter, Facebook, etc. where "windows" open for things like registration. Prior to the latest version of Javascript, these nice effects were not available.  Opening a window or a banner on a page meant actually opening another browser session.&lt;br /&gt;&lt;br /&gt;All in all, Ruby on Rails is something I'm spending time on at the moment. Python is another - mainly because a few developers I've spoken to have used it.  However, I've learned that in time a programming language is forgotten if it's not used regularly - much like a spoken language it needs practice.  Whatever you decide (hey prove me wrong and take up the Microsoft approach) just make sure you are trying to be the best at it, and be in it for the love of development. Nobody makes a fortune from in-house development these days - contractors excluded.  You have to love development and gain a personal sense of satisfaction from finishing your code.  It's a big world out there so identify what you want to study - and get researching now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2653066858929843446-5892218213026756395?l=latoamsdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://latoamsdev.blogspot.com/feeds/5892218213026756395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://latoamsdev.blogspot.com/2009/10/i-want-to-be-developer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5892218213026756395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2653066858929843446/posts/default/5892218213026756395'/><link rel='alternate' type='text/html' href='http://latoamsdev.blogspot.com/2009/10/i-want-to-be-developer.html' title='I Want To Be A Developer'/><author><name>Chris Ashton</name><uri>http://www.blogger.com/profile/12005610696838043205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
