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

<channel>
	<title>FatLemon</title>
	<atom:link href="http://www.fatlemon.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fatlemon.co.uk</link>
	<description>Contemplations on software development and human factors, by Andrew Freemantle</description>
	<lastBuildDate>Sun, 29 Jan 2012 13:45:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Gravatar HtmlHelper for ASP.Net MVC</title>
		<link>http://www.fatlemon.co.uk/2012/01/gravatar-htmlhelper-for-asp-net-mvc/</link>
		<comments>http://www.fatlemon.co.uk/2012/01/gravatar-htmlhelper-for-asp-net-mvc/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 20:00:55 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASP.Net-MVC]]></category>
		<category><![CDATA[Gravatar]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=252</guid>
		<description><![CDATA[Update: This implementation is now linked from the official Gravatar website! Inspired by a recent project at work, here&#8217;s a complete implementation of the Gravatar image request API, as an ASP.Net MVC 3 / MCV4 HtmlHelper. It includes the help and documentation from the Gravatar API page, and automatically does HTTPS/SSL requests if included on [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> This implementation is now linked from <a title="Gravatar.com - Libraries, Plugins, Applications, HOWTOs, etc" href="http://en.gravatar.com/site/implement/images/libraries/">the official Gravatar website!</a></p>
<hr />
<p>Inspired by a recent project at work, here&#8217;s a complete implementation of the <a title="Gravatar - A Globally Recognized Avatar" href="http://www.gravatar.com/">Gravatar</a> <a title="Gravatar image request API documentation" href="http://en.gravatar.com/site/implement/images/">image request API</a>, as an ASP.Net MVC 3 / MCV4 HtmlHelper.</p>
<p>It includes the help and documentation from the Gravatar API page, and automatically does HTTPS/SSL requests if included on a page that is served securely (secure requests can be forced too).</p>
<h4>Getting Started</h4>
<ol>
<li>Head over to the <a title="Gravatar-HelpHelper - GitHub" href="https://github.com/AndrewFreemantle/Gravatar-HtmlHelper">project page on GitHub</a>, and save the single file <span class="inline-code">GravatarHtmlHelper.cs</span> into your project</li>
<li>Start using it with the HtmlHelper sytax, like so:</li>
</ol>
<pre>
@Html.GravatarImage("user.name@email.com")
</pre>
<p>or</p>
<pre>
@Html.GravatarImage(
    "user.name@email.com",
    32,
    GravatarHtmlHelper.DefaultImage.Identicon,
    false,
    GravatarHtmlHelper.Rating.G)
</pre>
<p>&nbsp;</p>
<p><a href="http://www.fatlemon.co.uk/wp-content/uploads/gravatar-list.png"><img class="alignnone size-full wp-image-266" title="Gravatars" src="http://www.fatlemon.co.uk/wp-content/uploads/gravatar-list.png" alt="gravatar image examples" width="410" height="86" /></a></p>
<p>and that&#8217;s it!  The helper method is progressively overloaded, so you need only supply the minimum parameters to get the Gravatar you&#8217;re after.</p>
<p>&nbsp;</p>
<p>Comments and suggestions are welcome here or on the <a title="Gravatar-HtmlHelper - Issue tracker at GitHub" href="https://github.com/AndrewFreemantle/Gravatar-HtmlHelper/issues">projects issue tracker over at GitHub</a>. I hope you find it useful <img src="http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif" alt=":)" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2012/01/gravatar-htmlhelper-for-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WTV: Automatic date-based version numbering for .Net with WhenTheVersion</title>
		<link>http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/</link>
		<comments>http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 22:00:12 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SubVersion]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WTV]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=101</guid>
		<description><![CDATA[There&#8217;s a trend towards using the software build date as part of the software version number, you know the sort of thing I mean: &#8216;2011.11.4.xyz&#8216;, like in the footer over at StackOverflow.com, or MyLetts.com.. Wouldn&#8217;t it be great if we could get Visual Studio to do this for us automatically on build?  I thought so [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a trend towards using the software build date as part of the software version number, you know the sort of thing I mean: &#8216;<span class="inline-code">2011.11.4.xyz</span>&#8216;, like in the footer over at <a title="StackOverflow.com - Q&amp;A for Programmers" href="http://www.stackoverflow.com">StackOverflow.com</a>, or <a title="MyLetts.com - Lettings management for private landlords" href="http://www.myletts.com">MyLetts.com</a>..</p>
<p><a href="http://www.fatlemon.co.uk/wp-content/uploads/wtv-date-version-example-myletts-com1.png"><img class="alignnone size-full wp-image-214" title="WTV Date-version example: www.MyLetts.com" src="http://www.fatlemon.co.uk/wp-content/uploads/wtv-date-version-example-myletts-com1.png" alt="" width="337" height="113" /></a></p>
<p>Wouldn&#8217;t it be great if we could get Visual Studio to do this for us automatically on build?  I thought so too, so I&#8217;ve written a little app to do it <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>Getting set up with &#8220;When The Version&#8221;</h4>
<ol>
<li>Go get a copy of &#8220;When The Version&#8221; (<span class="inline-code">WTV.exe</span>) from <a title="WhenTheVersion - Download page at GitHub" href="https://github.com/AndrewFreemantle/When-The-Version/downloads">the GitHub download page</a> (or you can <a title="When The Version - Source on GitHub" href="https://github.com/AndrewFreemantle/When-The-Version">build it from the source</a> if you prefer)</li>
<li>Drop it somewhere on your PC</li>
<li>Now, in your Visual Studio project, expand the Properties and duplicate the <span class="inline-code">AssemblyInfo.cs</span> / <span class="inline-code">.vb</span> file &#8211; I rename the duplicate to be <span class="inline-code">AssemblyInfo.Template.cs</span>:</li>
</ol>
<p><a href="http://www.fatlemon.co.uk/wp-content/uploads/wtv-date-version-solution-explorer.png"><img class="size-full wp-image-212 alignnone" title="AssemblyInfo.Template.cs - Solution Explorer" src="http://www.fatlemon.co.uk/wp-content/uploads/wtv-date-version-solution-explorer.png" alt="" width="288" height="148" /></a></p>
<ol start="4">
<li>Edit the <span class="inline-code">AssemblyInfo.Template.cs</span> file, putting in the placeholders for the date parts like so:</li>
</ol>
<pre>

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("{YYYY}.{MM}.{DD}.0")]
[assembly: AssemblyFileVersion("{YYYY}.{MM}.{DD}.0")]
</pre>
<p>The following values are currently supported:</p>
<ul>
<li><span class="inline-code">{YYYY}</span> &#8211; the year</li>
<li><span class="inline-code">{MM}</span> &#8211; the month</li>
<li><span class="inline-code">{DD}</span> &#8211; the day</li>
<li><span class="inline-code">{SVN}</span> &#8211; SubVersion revision number (more on this a bit later)</li>
</ul>
<p>&nbsp;</p>
<ol start="5">
<li>Now, open up the Project Properties &gt; Build Events, and add the following Pre-build event command line (on a single line):</li>
</ol>
<pre>

"C:\Path\To\wtv.exe"
  "$(ProjectDir)Properties\AssemblyInfo.Template.cs"
  "$(ProjectDir)Properties\AssemblyInfo.cs"
</pre>
<p>&nbsp;</p>
<ol start="6">
<li>Finally, set the Build Action for the new <span class="inline-code">AssemblyInfo.Template.cs</span> file to &#8216;None&#8217; and Build!</li>
</ol>
<p>&nbsp;</p>
<p>If you get stuck, pop open a Command Prompt and run <span class="inline-code">WTV.exe</span> without any parameters:</p>
<p><a href="http://www.fatlemon.co.uk/wp-content/uploads/wtv-date-version-command-prompt-usage1.png"><img class="alignnone size-full wp-image-223" title="WTV: Command prompt usage" src="http://www.fatlemon.co.uk/wp-content/uploads/wtv-date-version-command-prompt-usage1.png" alt="" width="632" height="342" /></a></p>
<h4>SubVersion support</h4>
<p>If you&#8217;re using SubVersion for your source control, <span class="inline-code">WTV</span> can also put the projects SVN revision number into the application version.</p>
<p><em><strong>There&#8217;s only one caveat</strong></em> &#8211; .Net Application version number values are limited to a maximum of 32,767 (i.e. they&#8217;re Int16&#8242;s). Therefore, if your SVN revision is higher <span class="inline-code">WTV</span> will only use the last 4 digits: e.g.: 32768 -&gt; 2768.</p>
<p>To use the SVN revision number, simply add the <span class="inline-code">{SVN}</span> placeholder to your <span class="inline-code">AssemblyInfo.Template.cs</span> file like so:</p>
<pre>

[assembly: AssemblyVersion("{YYYY}.{MM}.{DD}.{SVN}")]
[assembly: AssemblyFileVersion("{YYYY}.{MM}.{DD}.{SVN}")]
</pre>
<p>&nbsp;</p>
<p>.. and then add a couple of extra parameters to the Pre-build event command line so <span class="inline-code">WTV</span> knows where <span class="inline-code">SubWCRev.exe</span> is, something like this (again, on a single line):</p>
<pre>

"C:\Path\To\WTV.exe"
  "$(ProjectDir)Properties\AssemblyInfo.Template.cs"
  "$(ProjectDir)Properties\AssemblyInfo.cs"
  "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe"
  "$(SolutionDir)."
</pre>
<p>&nbsp;<br />
And because the <span class="inline-code">AssemblyInfo.cs</span> is generated, you can remove it from source control (but don&#8217;t remove it from your project!)</p>
<p>&nbsp;</p>
<h4>Finally</h4>
<p>Comments and suggestions are welcome here or on the <a title="WhenTheVersion - Issue tracker at GitHub" href="https://github.com/AndrewFreemantle/When-The-Version/issues">projects issue tracker over at GitHub</a>. I hope you find it useful  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><script src="/wp-content/syntax-highlighter/Scripts/shCore.js"></script> <script src="/wp-content/syntax-highlighter/Scripts/shBrushVb.js"></script></p>
<p><script type="text/javascript">// <![CDATA[
  dp.SyntaxHighlighter.ClipboardSwf = '/wp-content/syntax-highlighter/Scripts/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code');
// ]]&gt;</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using SquishIt with Razor &#8211; ASP.Net MVC3 and MVC4</title>
		<link>http://www.fatlemon.co.uk/2011/11/using-squishit-with-razor-asp-net-mvc3-and-mvc4/</link>
		<comments>http://www.fatlemon.co.uk/2011/11/using-squishit-with-razor-asp-net-mvc3-and-mvc4/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 08:00:02 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASP.Net-MVC]]></category>
		<category><![CDATA[Razor]]></category>
		<category><![CDATA[SquishIt]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=194</guid>
		<description><![CDATA[I&#8217;ll assume you already know the reasons why you should minify and combine your CSS and Javascript. My favourite of the tools available for .Net is SquishIt by Justin Etheredge &#8211; here&#8217;s how I hook it up in my ASP.Net MVC4 (and MVC3) Razor projects.. Get the bits, either directly or find it in NuGet [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll assume you already know the <a title="Yahoo! Web developer performance rules - Minify" href="http://developer.yahoo.com/performance/rules.html#minify">reasons why you should minify and combine your CSS and Javascript</a>.</p>
<p>My favourite of the tools available for .Net is <a title="SquishIt - Download from GitHub" href="http://github.com/jetheredge/SquishIt/downloads">SquishIt</a> by <a title="About Justin Etheredge" href="http://www.codethinked.com/about">Justin Etheredge</a> &#8211; here&#8217;s how I hook it up in my ASP.Net MVC4 (and MVC3) Razor projects..</p>
<ol>
<li>Get the bits, either <a title="SquishIt - Download from GitHub" href="http://github.com/jetheredge/SquishIt/downloads">directly</a> or find it in NuGet</li>
<li>Add a Project Reference to the SquishIt.Framework.dll</li>
<li>Add SquishIt to the namespaces section in the Views/Web.config:</li>
</ol>
<pre>

&lt;system.web.webPages.razor&gt;
  &lt;pages pageBaseType="System.Web.Mvc.WebViewPage"&gt;
    &lt;namespaces&gt;
      ..
      &lt;add namespace="SquishIt.Framework" /&gt;
      ..
    &lt;/namespaces&gt;
  &lt;/pages&gt;
&lt;/system.web.webPages.razor&gt;
</pre>
<ol start="4">
<li>Replace any <span class="inline-code">&lt;link /&gt;</span> and <span class="inline-code">&lt;script /&gt;</span> references with the following*:</li>
</ol>
<pre>

&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;

  ..

  @MvcHtmlString.Create(
    Bundle.Css()
      .Add("/Content/Styles.css")
      .Add("/Content/MoreStyles.css")
      .Render("/Cache/Styles-combined.css"))

  @RenderSection("css", false)

  @MvcHtmlString.Create(
    Bundle.JavaScript()
      .Add("/Scripts/SomeScript.js")
      .Add("/Scripts/SomeOtherScript.js")
      .Add("/Scripts/YetAnotherScript.js")
      .Render("/Cache/Scripts-combined.js"))

  @RenderSection("js", false)

  ..

&lt;/head&gt;
</pre>
<p><em style="font-size:0.85em;">*I&#8217;m loading the <span class="inline-code">&lt;script /&gt;</span>&#8216;s in the <span class="inline-code">&lt;head /&gt;</span> here for brevity, but there&#8217;s nothing stopping us moving these two JavaScript statements (lines 15 &#038; 22) to the bottom of our page so they&#8217;re just above the closing <span class="inline-code">&lt;/body&gt;</span>, as is generally recommended.</em></p>
<ol start="5">
<li>Finally, as you&#8217;ll have noticed in lines 11 &#038; 20, we&#8217;re generating the squished files to a <span class="inline-code">/Cache</span> directory, so we need to create it and grant the IIS AppPool our site is running under create and modify permissions on it</li>
</ol>
<p>&nbsp;</p>
<p>As I&#8217;m usually working with Layout pages, I&#8217;m sure you&#8217;ll have also noticed the <span class="inline-code">@RenderSection()</span>&#8216;s in the example (lines 13 &#038; 22) &#8211; that let&#8217;s me inject page-specific Squished CSS and/or Javascript as needed like so:</p>
<pre>

@section css {
  @MvcHtmlString.Create(
    Bundle.Css()
      .Add("/Content/PageSpecificStyle.css")
      .Render("/Cache/PageSpecificStyle-combined.css"))
}

@section js {
  @MvcHtmlString.Create(
    Bundle.JavaScript()
      .Add("/Scripts/PageSpecificScript.js")
      .Add("/Scripts/AnotherPageSpecificScript.js")
      .Render("/Cache/PageSpecificScript-combined.js"))
}
</pre>
<p>&nbsp;</p>
<p>Thank you Justin  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2011/11/using-squishit-with-razor-asp-net-mvc3-and-mvc4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Announcing MyLetts.com &#8211; Online Accounts and Lettings Management for Private Landlords</title>
		<link>http://www.fatlemon.co.uk/2011/05/announcing-myletts-com-online-accounts-and-lettings-management-for-private-landlords/</link>
		<comments>http://www.fatlemon.co.uk/2011/05/announcing-myletts-com-online-accounts-and-lettings-management-for-private-landlords/#comments</comments>
		<pubDate>Wed, 25 May 2011 08:00:42 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MyLetts]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=114</guid>
		<description><![CDATA[&#8220;No man acquires property without acquiring with it a little arithmetic also.&#8221; - Ralph Waldo Emerson (1803 &#8211; 1882) &#160; In 2003 I placed offers on two almost identical semi-detached houses in adjoining estates, at the same time, thinking that if one offer wasn&#8217;t accepted, the other one would be. Both offers were accepted. And [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-182 post-image" title="To Let and For Sale Billboards" src="http://www.fatlemon.co.uk/wp-content/uploads/to-let-no-shadow.png" alt="" width="263" height="263" /></p>
<blockquote style="padding-top: 60px;"><p><span style="font-family: georgia,bookman old style,palatino linotype,book antiqua,palatino,trebuchet ms,helvetica,garamond,sans-serif,arial,verdana,avante garde,century gothic,comic sans ms,times,times new roman,serif;">&#8220;No man acquires property without acquiring with it a little arithmetic also.&#8221;</span></p>
<p><span style="font-family: georgia,bookman old style,palatino linotype,book antiqua,palatino,trebuchet ms,helvetica,garamond,sans-serif,arial,verdana,avante garde,century gothic,comic sans ms,times,times new roman,serif;">- Ralph Waldo Emerson (</span>1803 &#8211; 1882)</p></blockquote>
<p>&nbsp;</p>
<p>In 2003 I placed offers on two almost identical semi-detached houses in adjoining estates, at the same time, thinking that if one offer wasn&#8217;t accepted, the other one would be.</p>
<p>Both offers were accepted.</p>
<p>And both completed in the same fortnight.</p>
<p>Skip forward a bit to the end of 2004, and, well, if acquiring property also got you a little arithmetic in the 19th century, it gets you <em>a lot of arithmetic in the 21st</em>. It took me two weekends to sort and compile the receipts, mileage and details of mortgage payments into a spreadsheet needed to calculate my Self Assessment Tax Return.</p>
<p>Yes, you read that right.. <strong>4 days to fill in a spreadsheet</strong>.</p>
<p>The arithmetic itself isn&#8217;t complicated, <a title="VisiCalc - the first personal computer spreadsheet application - Wikipedia" href="http://en.wikipedia.org/wiki/Spreadsheet#VisiCalc">and anyway, calculations are what spreadsheet were designed for</a>. No, what took the time was categorising and entering the details of the expenses into the spreadsheet. Even though I knew a few keyboard shortcuts, entering property expense information involved finding the right expense column to enter the cost against, or copying a similar row of income or expense and changing the date. It was laborious and took a lot of checking to make sure I hadn&#8217;t missed or miss-categorised anything.</p>
<p>&nbsp;</p>
<p>I remember thinking that there must be an easier, faster way to compile my property accounts &#8211; there must be a computer application that made the entry of income and expenses really easy, one that could then calculate or summarise the necessary information for my Tax Return. What did other Landlords do? <em>What were they using? <strong>Did they know something I didn&#8217;t?</strong></em></p>
<p><em><strong><br />
</strong></em></p>
<p>So I asked a around at seminars and property auctions: turns out that everyone who rented or renovated a handful of properties also used a spreadsheet to collate their accounts. And <strong>they also found it to be a time-consuming chore</strong>.</p>
<p>&nbsp;</p>
<p><strong>And so, an idea was born.</strong></p>
<p><strong><br />
</strong></p>
<p>The idea that, as a private landlord, <a title="About the author" href="http://www.fatlemon.co.uk/aboutme/">whose passion is creating software</a>, I could make something that would benefit not only me, but also <strong>benefit other small private landlords</strong>, and it&#8217;s an idea that I&#8217;ve been thinking about, refining, and working on ever since.. and now..</p>
<p>&nbsp;</p>
<p style="font-size: 1.6em;">it is my great pleasure to announce <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts.com</a> -<br />
Online Accounts and Lettings Management for Private Landlords</p>
<p><a href="http://www.myletts.com/"></a><img class="alignleft size-full wp-image-185 post-image" title="MyLetts.com - Online Accounts and Lettings Management  for Private Landlords" src="http://www.fatlemon.co.uk/wp-content/uploads/myletts-screenshot-oct-2011-no-shadow.png" alt="" width="577" height="291" /></p>
<p><strong>Software for Landlords, built by Landlords.</strong></p>
<p>&nbsp;</p>
<p style="font-size: 1.3em; padding-top: 20px;"><strong>So what does it do?</strong></p>
<ul>
<li><strong>It takes the pain and time away from compiling your year-end self-assessment tax return.</strong></li>
</ul>
<p><em>Yep, it really does</em> &#8211; I&#8217;ve been using it for the last two years, and what had previously taken me between 3 and 4 days each year, <strong>now takes a single afternoon</strong> &#8211; the first year I used it: tax year-ending 2009  &#8211; <strong>I filed my Property accounts in the second week of April, instead of November</strong>.</p>
<p>Much to the surprise (and delight, I might add), of my accountant.</p>
<p>But you don&#8217;t <em>need</em> an accountant &#8211; the beauty of <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts</a> is that it summarises the income and expenditure into a spreadsheet for you, a spreadsheet that mirrors the SA105 UK Property Tax Return form. Complete with box reference numbers. <em>It&#8217;s genius</em> (even if I do say so myself).</p>
<p>If you do have an accountant and you don&#8217;t know what an SA105 form looks like, don&#8217;t worry &#8211; just hand them the spreadsheet <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts</a> generates for you, sit back, and expect their fee&#8217;s to be cheaper as they&#8217;ll have less work to do for you.</p>
<p>&nbsp;</p>
<ul>
<li> <strong>Shows you how each Property is doing financially, and summarises your portfolio.</strong></li>
</ul>
<p>I&#8217;ve worked on accounting software professionally for the last 7 years, so I understand numbers, but I&#8217;m a visual person &#8211; I love graphs and pictures, so <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com">MyLetts</a> shows you each income and expense visually. At a glance you can see which properties are profitable, which years are better than others &#8211; even see a trend.</p>
<p>I have more insight into my property business because of <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts</a>. <strong>I know how my properties are doing at any given moment, rather than just once a year</strong>, after I&#8217;ve compiled my Tax Return.</p>
<p><strong>It&#8217;s like having always up-do-date Profit and Loss statement for your lettings at your finger-tips.</strong></p>
<p>&nbsp;</p>
<p style="font-size: 1.3em; padding-top: 20px;"><strong>So what&#8217;s planned?</strong></p>
<p><a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts</a> will always be about making it as easy as possible for you to compile your Property Rental Tax Return.</p>
<p>As a busy Landlord, there are other things I could do with some help on, so I&#8217;ll be constantly adding to <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts</a> to make it the best possible Property Management software for private UK landlords.</p>
<p>Here are a few things I&#8217;ve thought of so far:</p>
<ul>
<li><strong>Reminders for Gas Safety and Electrical Safety checks</strong><br />
- Including details of who you used last time, and how much they charged</li>
<li><strong>Tenant Management</strong><br />
- Start and End dates, with automatic totalling of repairs incurred during their tenancy, so you can decide if you need to withhold any bond or deposit monies<br />
- This will also gives you actual void rates (per property, and in total) so you can better plan for the future</li>
<li><strong>Interest Rate &#8216;what if&#8217;s'?</strong><br />
- Play about with Mortgage Interest Rates, and see how changes affect your property income</li>
<li><strong>Custom Income and Expense Types</strong><br />
- Don&#8217;t like the 4 categories from the tax man, or the 13 included by default in <a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">MyLetts</a>?  Create your own, then..</li>
<li><strong>Income and Expense reporting</strong><br />
- Graph or Pie chart your income and expenditure by type &#8211; e.g. &#8220;How much did I spend on repairs this year?&#8221;</li>
</ul>
<p>&nbsp;</p>
<p>And that&#8217;s just a few things on my list &#8211; if you&#8217;ve got an idea, <strong>I&#8217;d love to hear it</strong> &#8211; there is always something to learn from how other Landlords manage their business, properties and tenants. Please sign up (it&#8217;s free for the first month) and get in touch.</p>
<p>&nbsp;</p>
<p><a title="MyLetts.com - Online Accounts and Lettings Management for Private Landlords" href="http://www.myletts.com/">Sign up now, and make your Landlord life easier</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2011/05/announcing-myletts-com-online-accounts-and-lettings-management-for-private-landlords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Securing ASP.Net Web Services with Forms Authentication</title>
		<link>http://www.fatlemon.co.uk/2010/04/securing-asp-net-web-services-with-forms-authentication/</link>
		<comments>http://www.fatlemon.co.uk/2010/04/securing-asp-net-web-services-with-forms-authentication/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 07:00:33 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=44</guid>
		<description><![CDATA[My first article for Dot Net Slackers on Securing ASP.Net Web Services with Forms Authentication is up! Have a read and let me know what you think &#8211; any feedback about the content, the writing style, the amount of code, or anything else (!) is greatly appreciated ]]></description>
			<content:encoded><![CDATA[<p>My first article for <a title="Securing ASP.Net Web Services with Forms Authentication" href="http://dotnetslackers.com/articles/aspnet/Securing-ASP-Net-Web-Services-with-Forms-Authentication.aspx" target="_blank">Dot Net Slackers on Securing ASP.Net Web Services with Forms Authentication</a> is up!</p>
<p>Have a read and let me know what you think &#8211; any feedback about the content, the writing style, the amount of code, or anything else (!) is greatly appreciated  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2010/04/securing-asp-net-web-services-with-forms-authentication/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SSD, Visual Studio and improving developer productivity</title>
		<link>http://www.fatlemon.co.uk/2010/02/ssd-visual-studio-and-improving-developer-productivity/</link>
		<comments>http://www.fatlemon.co.uk/2010/02/ssd-visual-studio-and-improving-developer-productivity/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 16:00:28 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[SSD]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=49</guid>
		<description><![CDATA[After reading lots of reviews, articles and watching a few youtube videos comparing Solid State Drives to Hard Disk Drives, I was unsure that&#8217;d see a beneficial improvement in my day-to-day developer tools of Visual Studio, such as building and spinning up desktop and web applications. I was unsure because there is a consensus of [...]]]></description>
			<content:encoded><![CDATA[<p>After <a title="Windows SSD Performance - www.tomshardware.com" href="http://www.tomshardware.com/reviews/windows-ssd-performance,2518.html">reading</a> <a title="Why cheap SSD sucks for Visual Studio - www.exdream.com" href="http://www.exdream.com/Blog/post/2009/02/25/Why-cheap-SSD-sucks-for-Visual-Studio.aspx" target="_blank">lots</a> <a title="Corsair X64 SSD Customer Reviews - www.overclockers.co.uk" href="http://www.overclockers.co.uk/showproduct.php?prodid=HD-004-CS&amp;tool=3&amp;groupid=1657&amp;catid=1660&amp;subcat=1668" target="_blank">of</a> <a title="Corsair P128 SSD Customer Reviews - www.eBuyer.com" href="http://www.ebuyer.com/product/167203/show_product_reviews" target="_blank">reviews</a>, <a title="SSD and Programming question - www.stackoverflow.com" href="http://stackoverflow.com/questions/499889/ssd-and-programming" target="_blank">articles</a> and watching a <a title="SSD vs 7200rpm HDD - www.youtube.com" href="http://www.youtube.com/watch?v=Dt6VbOY3xE0" target="_blank">few</a> <a title="MacBook HDD vs SSD boot time - www.youtube.com" href="http://www.youtube.com/watch?v=LCBfsfzHPeY" target="_blank">youtube</a> <a title="HDD vs SSD, Windows Vista tests - www.youtube.com" href="http://www.youtube.com/watch?v=Pf_QS3mZsyU" target="_blank">videos</a> comparing Solid State Drives to Hard Disk Drives, I was unsure that&#8217;d see a beneficial improvement in my day-to-day developer tools of Visual Studio, such as building and spinning up desktop and web applications.<strong> </strong></p>
<p>I was unsure because there is a <a title="SSD Disadvantages - www.wikipedia.org" href="http://en.wikipedia.org/wiki/Solid-state_drive#Disadvantages" target="_blank">consensus of small writes to SSDs aren&#8217;t as breathtaking</a> as the reads and writes of larger files:</p>
<blockquote><p>SATA-based SSDs generally exhibit much slower write speeds. As erase  blocks on flash-based SSDs generally are quite large (e.g. 0.5 &#8211; 1  megabyte), they are far slower than conventional disks during small writes (<em>write  amplification</em> effect) and can suffer from write fragmentation.</p>
<p>- Wikipedia</p></blockquote>
<p>But these things are fast at everything else, and while mulling over the idea of upgrading for a few months, I started to notice my usage patterns of switching between lots of different supporting applications. <strong>Given that&#8217;d I&#8217;d get improvements elsewhere if not in Visual Studio, I decided to try it out for myself.</strong></p>
<p>The SSD I chose is the Corsair CMFSSD-64D1, otherwise known as the <a title="Corsair Extreme Series X64 - www.amazon.co.uk" href="http://www.amazon.co.uk/gp/product/B002HQ2JXG?ie=UTF8&amp;tag=fatl-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B002HQ2JXG" target="_blank">Corsair Extreme Series X64</a>:</p>
<p><img class="alignnone size-medium wp-image-57" title="Corsair Extreme X64 Solid State Disk" src="http://www.fatlemon.co.uk/wp-content/uploads/corsair-x64-300x267.png" alt="" width="300" height="267" /></p>
<p>Here are the timings I took with the original Samsung 80GB 7,200rpm drive, and the timings from the <a title="Corsair Extreme Series X64 - www.amazon.co.uk" href="http://www.amazon.co.uk/gp/product/B002HQ2JXG?ie=UTF8&amp;tag=fatl-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B002HQ2JXG" target="_blank">Corsair Extreme X64</a>:<br />
(all timings are in seconds, so lower numbers are better)</p>
<table class="hdd-vs-ssd">
<thead>
<tr>
<td></td>
<td>boot</p>
<div class="table-subheading">from cold to login prompt</div>
</td>
<td>logging in</p>
<div class="table-subheading">pressing enter to ready*</div>
</td>
<td>starting outlook</p>
<div class="table-subheading">to &#8216;All folders up to date&#8217;</div>
</td>
<td>loading VS2008</p>
<div class="table-subheading">to news feed loads</div>
</td>
<td>loading solution</p>
<div class="table-subheading">8 project web solution</div>
</td>
<td>rebuild solution</p>
<div class="table-subheading">until build status says &#8216;build complete&#8217;</div>
</td>
</tr>
</thead>
<tbody>
<tr class="hdd">
<td>Samsung HDD</td>
<td>42.3</td>
<td>190.8</td>
<td>14.7</td>
<td>25.2</td>
<td>72.0</td>
<td>79.0</td>
</tr>
<tr class="ssd">
<td>Corsair X64 SSD</td>
<td>32.6</td>
<td>75.8</td>
<td>5.5</td>
<td>7.9</td>
<td>19.1</td>
<td>52.5</td>
</tr>
</tbody>
<tfoot>
<tr>
<td></td>
<td>22.8%</td>
<td>60.3%</td>
<td>63.0%</td>
<td>68.4%</td>
<td>73.5%</td>
<td>33.5%</td>
</tr>
</tfoot>
</table>
<h2>Conclusion</h2>
<p><strong>Overall, the SSD performs 53.6% faster &#8211; that means my machine is twice as responsive as it was.<br />
</strong></p>
<p>However, the most important savings to me are loading, and building solutions &#8211; I&#8217;ve only been running the SSD for a couple of days, but already I have shaken the reflexive pause I felt before closing or restarting Visual Studio, or opening up different solutions.</p>
<p>Granted, building or compiling decent sized projects in Visual Studio on an SSD is not as impressively fast as spinning up applications (Outlook, Paint.Net or Dreamweaver for example), or the improvement in general system responsiveness.</p>
<p>I now get 3 complete builds for 2..  <strong>put simply, it&#8217;s almost fast enough to remove the build waiting tax</strong>. It&#8217;s fast enough that <a title="&quot;long compile time leads to distraction&quot; - answer on www.stackoverflow.com" href="http://stackoverflow.com/questions/499889/ssd-and-programming/499959#499959" target="_blank">I don&#8217;t lose my train of thought and context switch to something else</a> &#8211; which makes me more productive.</p>
<h2>Method</h2>
<p>Timings were taken manually with a stop-watch, and averaged over 3 data points on different days.</p>
<p>* The Windows logging in timings include a start-up anti-virus scan.</p>
<p>System Specification and software versions:</p>
<ul>
<li>Intel Pentium 4 HT, 3.0 GHz</li>
<li>3 GB RAM</li>
<li>Windows XP 32bit (HDD timings), Windows 7 32bit (SSD timings)**</li>
<li>Outlook 2007</li>
<li>Visual Studio 2008 Team System Developer Edition</li>
<li>The 8 project web solution is the <a title="Invoice Management Software - Scan Notify Approve and Pay (SNAP) - www.snapsystems.co.uk" href="http://www.snapsystems.co.uk/" target="_blank">fantastic invoice management software called SNAP</a>, written in C# .Net 3.5</li>
</ul>
<p>** yes, I&#8217;d have loved to have done an apples-to-apples comparison by copying the exact same Windows XP installation over to the SSD, and I was all set to do so, except the Samsung HDD had a series of faults around the ~36GB mark that resulted in an XP installation that would only boot into Safe Mode.</p>
<p>I had taken the timings the week before I found this out, and with a clean SSD it seemed crazy not to take the opportunity to upgrade to Windows 7.  I suspect that had I stayed on Windows XP, the speed improvements would have been more impressive.</p>
<p>Fortuitously, the Corsair SSD arrived the same morning that the Samsung HDD exhibited the fault. (I know what you&#8217;re thinking, and no, it definitely wasn&#8217;t sabotage.. the SSD was on order for 2 weeks prior, and wasn&#8217;t due to arrive for another 3 days)</p>
<p>The Solid State Drive upgrade is a definite improvement, and I don&#8217;t think I&#8217;ll be buying Hard Disk Drives any more  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2010/02/ssd-visual-studio-and-improving-developer-productivity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Increasing Processes, Sessions and Transactions in Oracle XE</title>
		<link>http://www.fatlemon.co.uk/2009/06/increasing-processes-sessions-and-transactions-in-oracle-xe/</link>
		<comments>http://www.fatlemon.co.uk/2009/06/increasing-processes-sessions-and-transactions-in-oracle-xe/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 20:00:29 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Oracle XE]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=29</guid>
		<description><![CDATA[Disclaimer: following my technical advice has been known to scratch cars, void lottery tickets and confuse guide dogs &#8211; proceed at your own risk.. Out of the box, Oracle Datatbase 10g Express Edition RDBMS is fast and powerful. The stated limitations of 2GB of maximum RAM usage and 2GB of total datafile management are plentiful [...]]]></description>
			<content:encoded><![CDATA[<div class="post-body-disclaimer">Disclaimer: following my technical advice has been known to scratch cars, void lottery tickets and confuse guide dogs &#8211; proceed at your own risk..</div>
<p><img class="alignnone size-full wp-image-126 post-image" title="Oracle Express Edition (XE)" src="http://www.fatlemon.co.uk/wp-content/uploads/oraclexe.png" alt="Oracle Express Edition (XE)" width="252" height="194" /></p>
<p>Out of the box, Oracle Datatbase 10g Express Edition <abbr title="Relational Database Management System">RDBMS</abbr> is fast and powerful. The stated limitations of 2GB of maximum RAM usage and 2GB of total datafile management are plentiful for it to easily run as the back-end for a small to medium-sized office application. However, we soon hit a connection limit as characterised by the following Oracle Errors:</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;">ORA-12516: TNS:listener could not find available handler with matching protocol stack</span></p>
<pre>
ORA-00020: maximum number of processes (%s) exceeded</pre>
<p><img class="alignnone size-full wp-image-127 post-image" title="ORA-00020: maximum number of processes (%s) exceeded" src="http://www.fatlemon.co.uk/wp-content/uploads/ora-00020.png" alt="ORA-00020: maximum number of processes (%s) exceeded" width="677" height="342" /></p>
<p>We can get this second message because Oracle creates Operating System processes to handle Connections (or Sessions) &#8211; which means Processes, Sessions (and as we&#8217;ll soon see..) Transactions are all related.</p>
<p>The default values in Oracle XE for these parameters are:</p>
<ul>
<li>Processes =40</li>
<li>Sessions = 49</li>
<li>Transactions = 53</li>
</ul>
<p>I was able to generate the above error message (ORA-00020) from about ~30 connections on a vanilla Oracle XE installation (on Windows 7).</p>
<p>So, let&#8217;s increase these limits to allow more connections to our Oracle Server..</p>
<h3>1. Log in as SYSDBA</h3>
<p>From the menu &#8216;Oracle Database 10g Express Edition&#8217;, find and select &#8216;Run SQL Command Line&#8217;, then type:</p>
<pre>connect sys as sysdba</pre>
<p>&nbsp;</p>
<p>and enter your SYS, or SYSTEM password at the prompt</p>
<p><img class="alignnone size-full wp-image-124 post-image" title="Oracle XE - Connected as SYSDBA, showing default values for processes, sessions and transactions" src="http://www.fatlemon.co.uk/wp-content/uploads/oraclexe-default-processes-sessions-transactions.png" alt="oraclexe-default-processes-sessions-transactions" width="677" height="414" /></p>
<h3>2. ALTER SYSTEM commands</h3>
<p>The Oracle 10g Documentation states that <a title="TRANSACTIONS - Oracle 10g Documentation" href="http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams219.htm">TRANSACTIONS</a> is derived from <a title="SESSIONS - Oracle 10g Documentation" href="http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams191.htm#sthref587">SESSIONS</a>, which in turn is derived from <a title="PROCESSES - Oracle 10g Documentation" href="http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams169.htm#sthref521">PROCESSES</a>, thus:</p>
<p>PROCESSES = 40 to Operating System Dependant</p>
<p>SESSIONS = (1.1 * PROCESSES) + 5</p>
<p>TRANSACTIONS = 1.1 * SESSIONS</p>
<p>So, what to start with for PROCESSES?  Trebling it is as good a start as any, then I&#8217;d add a few more for good measure..  Here are the values I recommend:</p>
<ul>
<li>PROCESSES = 150</li>
<li>SESSIONS = 300</li>
<li>TRANSACTIONS = 330</li>
</ul>
<p>type the following commands:</p>
<p>&nbsp;</p>
<pre>
alter system set processes = 150 scope = spfile;

alter system set sessions = 300 scope = spfile;

alter system set transactions = 330 scope = spfile;
</pre>
<p>&nbsp;</p>
<p>then to make the settings take effect, we need to bounce the database..</p>
<pre>
shutdown immediate;

startup;
</pre>
<p>&nbsp;</p>
<p><img class="alignnone size-full wp-image-123 post-image" title="OracleXE - alter system commands and restarting the database" src="http://www.fatlemon.co.uk/wp-content/uploads/oraclexe-alter-system-commands.png" alt="oraclexe-alter-system-commands" width="677" height="414" /></p>
<h3>3. Verify the new parameters</h3>
<p>with this simple select statement..</p>
<pre>
select name, value
from v$parameter
where name in ('processes', 'sessions', 'transactions');
</pre>
<p>&nbsp;</p>
<p><img class="alignnone size-full wp-image-125 post-image" title="OracleXE - showing updated processes, sessions and transactions" src="http://www.fatlemon.co.uk/wp-content/uploads/oraclexe-updated-processes-sessions-transactions.png" alt="oraclexe-updated-processes-sessions-transactions" width="677" height="318" /></p>
<p>And we&#8217;re done &#8211; a free, light and powerful Oracle RDBMS that&#8217;s able to serve more connections</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2009/06/increasing-processes-sessions-and-transactions-in-oracle-xe/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>On StackOverflow.com.. the founders dilemma</title>
		<link>http://www.fatlemon.co.uk/2009/05/on-stackoverflow-com-the-founders-dilemma/</link>
		<comments>http://www.fatlemon.co.uk/2009/05/on-stackoverflow-com-the-founders-dilemma/#comments</comments>
		<pubDate>Sun, 31 May 2009 20:00:30 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[StackOverflow.com]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=27</guid>
		<description><![CDATA[StackOverflow.com is a the programming Question and Answer resource. It combines elements of a forum where anyone can ask a Question or Answer one, elements of Digg and Reddit where anyone can vote on anything (thereby creating credibility), elements of a blog where anything can be commented on, and elements of a wiki because the [...]]]></description>
			<content:encoded><![CDATA[<p><a title="StackOverflow - Programming Q&amp;A" href="http://stackoverflow.com"><img title="StackOverflow.com" src="http://www.fatlemon.co.uk/wp-content/uploads/stackoverflow_logo1.png" alt="StackOverflow.com" width="296" height="88" /></a></p>
<p><a title="StackOverflow - Programming Q&amp;A" href="http://stackoverflow.com">StackOverflow.com</a> is <span style="text-decoration: line-through;">a</span> <em><strong>the</strong></em> programming Question and Answer resource.</p>
<p>It combines elements of a forum where anyone can ask a Question or Answer one, elements of Digg and Reddit where anyone can vote on anything (thereby creating credibility), elements of a blog where anything can be commented on, and elements of a wiki because the Questions, Answers and Comments can be edited to keep it up to date.</p>
<p><img class="alignnone size-full wp-image-103" title="Joel Spolsky and Jeff Atwood" src="http://www.fatlemon.co.uk/wp-content/uploads/3366372222_3491d6e065.jpg" alt="Joel Spolsky and Jeff Atwood" width="375" height="249" /></p>
<p>Founded by Joel Spolsky (of <a title="Joel on Software - by Joel Spolsky" href="http://www.joelonsoftware.com/">JoelOnSoftware.com</a>) and Jeff Atwood (of <a title="Coding Horror - by Jeff Atwood" href="http://www.codinghorror.com/">CodingHorror.com</a>), the quality and sheer speed of answers on StackOverflow was due initially to their existing readerships getting involved as early adopters, helping them and each other share their knowledge on day-to-day programming problems.</p>
<p>But therein lies a dilemma..</p>
<p><strong>The readerships of JoelOnSoftware and CodingHorror are also interested in the wider Software Development topics for which Joel and Jeff write about.</strong></p>
<p>The kind of questions that concern code quality, or best practice, or what makes a good developer.</p>
<p>The kind of questions that draw on experience to debate or answer.</p>
<p><strong>The kind of questions that Jeff has asked the community not to ask on StackOverflow.</strong></p>
<p>And I understand his reasons &#8211; StackOverflow isn&#8217;t really built for discussion or debatable questions because it orders responses by votes instead of time (by default), which makes conversational threads difficult to follow, and also that the &#8216;correct&#8217; answer will be different for different situations. As Jeff points out, ultimately all of these questions can be answered with the same, simple reply &#8211; &#8216;it depends&#8217; &#8211; the synonym for &#8216;it depends&#8217; on StackOverflow has become the &#8216;subjective&#8217; tag.</p>
<p>The &#8216;answer&#8217; to the subjective style of question is a combination of the answers &#8211; and that combination will be different for each person reading, and that combination could well be different each time it is read with a different perspective. The discussion around the various elements of &#8216;it depends&#8217; answers the question. <strong>And the consideration of the depending elements of any subjective programming question is a huge part of improving as a software developer</strong>.</p>
<p>Unfortunately for Jeff, StackOverflow is in many ways a honey-pot for subjective questions. Like mini blog-posts, the poster gets to start the debate with an established, skilled, experienced and knowledgable community. It&#8217;s like Joel and Jeff handing them the attention and contributions of their combined blogging traffic &#8211; all the better to get everyone considering topics they hadn&#8217;t yet thought about.</p>
<p>Subjective questions have a much broader readership appeal than narrow focussed niche questions &#8211; more readers means more answers, comments and votes &#8211; collectively called &#8216;activity&#8217;. Activity keeps the question on the home-page and visible to more readership potential, which in turn means more readers, and more activity. Broader appeal also means greater rewards for the original poster in terms of Badges &#8211; from people simply reading the question, and of Reputation &#8211; from people liking the question and voting it up.</p>
<p>But, fundamentally, the JoelOnSoftware and CodingHorror readerships are already predisposed to the public deliberation of wider Software Development topics, and those discussions will take place wherever those readerships congregate. The Badges and Reputation are icing on the real rewards for this group &#8211; that consideration and discussion with their programming peers helps everyone improve.</p>
<p>Is StackOverflow the home for those subjective questions and their discussion?  Well, I guess &#8216;it depends&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2009/05/on-stackoverflow-com-the-founders-dilemma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My favourite gadget of 2008 &#8211; the Synology DS107</title>
		<link>http://www.fatlemon.co.uk/2009/03/my-favourite-gadget-of-2008-the-synology-ds107/</link>
		<comments>http://www.fatlemon.co.uk/2009/03/my-favourite-gadget-of-2008-the-synology-ds107/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 14:00:19 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Synology]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=25</guid>
		<description><![CDATA[Yep, I know it&#8217;s March already but back in December I picked up one of these because I was after some Network Attached Storage, and it has impressed me ever since.  This isn&#8217;t a review as such, more a highlight of my favourite features and possibly some tips and tricks I&#8217;ve found.. My main reason [...]]]></description>
			<content:encoded><![CDATA[<p>Yep, I know it&#8217;s March already  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   but back in December I picked up one of these because I was after some Network Attached Storage, and it has impressed me ever since.  This isn&#8217;t a review as such, more a highlight of my favourite features and possibly some tips and tricks I&#8217;ve found..</p>
<p><img class="alignnone" title="Synology DS107e" src="/images/synology-ds107.png" alt="Synology DS107e" width="286" height="312" /></p>
<p>My main reason for picking up the Synology DS-107+ was to have a large, always on, networked disk for multiple computer backups. It was easy to drop in a <a title="Samsung 1TB Spinpoint Disk - eBuyer.com" href="http://www.ebuyer.com/product/143288">Samsung Terrabyte disk</a> (as the box itself comes without a disk), <a title="Synology - DS107 Downloads Page" href="http://synology.com/enu/support/download.php?m=DS107">download the latest firmware</a>, and follow the simple setup wizard which formatted the disk and installed itself.</p>
<p><strong>Disk Station Manager 2.0</strong></p>
<p>Having read a few <a title="SmallNetBuilder.com - Synology DS107e review" href="http://www.smallnetbuilder.com/content/view/30157/75/">reviews</a> before I decided on it, I wasn&#8217;t able to find one that talked about the new &#8216;<a title="Synology - Disk Station Manager 2.0 Features" href="http://synology.com/enu/products/features/index.php">Disk Station Manager 2.0</a>&#8216; which Synology released in March 2008 (according to the <a title="Synology - DS107 Firmware release notes" href="http://synology.com/enu/support/releaseNote/DS107.php">release notes</a>) &#8211; this is the typical web-browser-based approach to device management we&#8217;re used to seeing in ADSL routers, VoIP devices and NAS boxes.</p>
<p>Synology have included everything and the kitchen sink in thiers &#8211; it&#8217;s all easily findable and configurable, including full &#8216;root&#8217; access via telnet and ssh (the &#8216;root&#8217; password is the same as the one you&#8217;re asked for when initially setting up the &#8216;admin&#8217; account &#8211; more on this a little later).</p>
<p>First, here&#8217;s some stuff I&#8217;ve found really useful out of the box:</p>
<p><strong>Apple Time Machine backups</strong></p>
<p>I mainly use a Mac Mini at home, which I had been backing up with Time Machine to a Firewire External Hard Disk. I was pleased to find a <a title="Time Machine backup to Synology DS-107+" href="http://www.naschenweng.info/2008/07/15/os-x-time-machine-backup-to-synology-ds1">pretty straightforward guide</a> for using the Synology instead.</p>
<p><strong>Download Station 2.0 &#8211; HTTP, FTP, BitTorrent, NZB and eMule downloads</strong></p>
<p>Being able to set away downloads of fairly large files is pretty handy &#8211; I like to check out the latest enhancements to various Linux distributions so I&#8217;ve only had need for the HTTP options so far</p>
<p><img class="alignnone" title="Synology Download Station" src="/images/synology-ds107-dms-2-download.png" alt="" width="591" height="435" /><strong></strong></p>
<p><strong>Web Station</strong></p>
<p>This basically starts an Apache2 webserver, with the option of MySQL too &#8211; a LAMP stack in a small, good looking box!  PHP is enabled by default, and Synology host a <a title="PHP and MySQL Compatible Applications - Synology" href="http://www.synology.com/wiki/index.php/User_Reported_Compatible_PHP/MySQL_Applications">wiki of user confirmed compatible web applications</a>, such as <a title="phpBB - Bulletin Board" href="http://www.phpbb.com/">phpBB</a>, <a title="Joomla - Content Management System" href="http://www.joomla.org/">Joomla</a>, <a title="Drupal - Content Management System" href="http://drupal.org/">Drupal</a>, <a title="Piwigo - Web Photo Album" href="http://piwigo.org/">Piwigo</a>, <a title="SugarCRM - Contact Relationship Managment" href="http://www.sugarcrm.com/crm/">SugarCRM</a>, oh, and DIY blogging tool called <a title="Wordpress - Blogging Software" href="http://www.wordpress.org/">WordPress</a> ;o)</p>
<p>I&#8217;ve got <a title="DokuWiki - Wiki software" href="http://wiki.splitbrain.org/wiki:dokuwiki">DokuWiki</a> running at the moment as the user comments said <a title="MediaWiki - Wiki software" href="http://www.mediawiki.org/">MediaWiki</a> (which runs <a title="Wikipedia" href="http://www.wikipedia.org/wiki">Wikipedia</a>) is a bit slow on the DS-107. Backups are easier with DokuWiki too as it&#8217;s file based.</p>
<p><strong>Terminal &#8211; Telnet and SSH, getting under the hood</strong></p>
<p>Reading a few blog posts on the earlier DS-106 model, it seems there were patches that granted telnet access. Since then it seems Synology have quite rightly decided to provide simple Telnet and SSH access:</p>
<p><img class="alignnone" title="Synology Management - Terminal options page" src="/images/synology-ds107-dms-2-terminal.png" alt="" width="498" height="396" /></p>
<p>This means I&#8217;ve got an (albeit lightweight) Linux server, always on, sitting on the network..</p>
<p>With some <a title="Synology Bootstrapping and Subversion Server - Run to the Hills" href="http://rob.runtothehills.org/archives/25">trivial instructions</a>, I installed the <a title="ipkg - Wikipedia.org" href="http://en.wikipedia.org/wiki/Ipkg">Itsy Package Management System</a> (which is called &#8216;bootstrapping&#8217;), and gives access to 1,172 applications, tools and libraries!</p>
<p>And after securing SSH and poking a hole to it in my router, I can log into my Synology DS-107 from pretty much anywhere and get access not only to the files, but to the web interface via the magic of <a title="SSH Tunneling - Wikipedia" href="http://en.wikipedia.org/wiki/SSH_tunneling#SSH_tunneling">SSH Tunneling</a>.</p>
<p><strong>Subversion</strong></p>
<p>Among those applications is Subversion &#8211; the open source version control system which was a snap to install, configure and then (using the web Disk Station Manager 2.0 options) configure backups of both the Subversion repository and DokuWiki every hour to an old USB stick I plugged in the back.</p>
<p>The only thing that took me a bit of time to figure out was how to get &#8216;svnserve&#8217; to start automatically. Do <a title="Automatically starting svnserve on the Synology DS-107 - Blog comment" href="http://rob.runtothehills.org/archives/25#comment-1499">check out my comment</a> on <a title="Synology Subversion Server - Run to the Hills" href="http://rob.runtothehills.org/archives/25">Rob&#8217;s Synology Subversion post</a> if you&#8217;d like to know what I came up with  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>In summary</strong></p>
<p>It&#8217;s a fantastic peice of kit &#8211; full of features, well made, small, looks good, has a great Ajax-y web interface, and with a little tweaking there&#8217;s enough of a Linux server in there to run pretty much anything.</p>
<p>Well done Synology  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img class="alignnone" title="5 Stars!" src="/images/5-stars.png" alt="" width="64" height="16" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2009/03/my-favourite-gadget-of-2008-the-synology-ds107/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why are software developers so bad at estimating time?</title>
		<link>http://www.fatlemon.co.uk/2009/01/why-are-software-developers-so-bad-at-estimating-time/</link>
		<comments>http://www.fatlemon.co.uk/2009/01/why-are-software-developers-so-bad-at-estimating-time/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 15:00:26 +0000</pubDate>
		<dc:creator>Andrew Freemantle</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Estimating]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.fatlemon.co.uk/?p=23</guid>
		<description><![CDATA[In order to answer this question, we need to understand the term &#8220;flow&#8221;. From Peopleware: During single-minded work time, people are ideally in a state that psychologists call flow. Flow is a condition of deep, nearly meditative involvement. In this state, there is a gentle sense of euphoria, and one is largely unaware of the [...]]]></description>
			<content:encoded><![CDATA[<p>In order to answer this question, we need to understand the term &#8220;flow&#8221;. From <a title="Peopleware: Productive People and Teams - Amazon.co.uk" href="http://www.amazon.co.uk/gp/product/0932633439?ie=UTF8&amp;tag=fatl-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0932633439">Peopleware</a>:</p>
<blockquote><p>During single-minded work time, people are ideally in a state that psychologists call <em>flow</em>. Flow is a condition of deep, nearly meditative involvement. In this state, there is a gentle sense of euphoria, and one is largely unaware of the passage of time: &#8220;I began to work. I looked up, and three hours had passed.&#8221;  There is no consciousness of effort; the work just seems to, well, flow. You&#8217;ve been in this state often, so we don&#8217;t have to describe it to you.</p>
<p>Not all work roles require that you attain a state of flow in order to be productive, but for anyone involved in engineering, design, development, writing, or like tasks, flow is a must. These are high-momentum tasks. It&#8217;s only when you&#8217;re in flow that the work goes well.</p></blockquote>
<p>To paraphrase, &#8220;It&#8217;s only when you&#8217;re in flow that you&#8217;re at your most productive&#8221;.</p>
<p>The quotation is taken from chapter 10, page 65. I know that because after reading those short paragraphs, I realised something that made me stop and put the book down..</p>
<p><strong>When a software developer thinks up an estimated time to complete a development task &#8211; they&#8217;re thinking solely in &#8220;flow&#8221; time.</strong></p>
<p>That realisation is profound.</p>
<p>Sure, more experienced software developers will <em>then</em> add time to this based on their experience before giving their answer, but their first thought is based on <em>flow-time</em>, which is their best-case, uninterrupted development time.</p>
<p><strong>Why is this?</strong></p>
<p>I think it&#8217;s a combination of 2 things;</p>
<ol>
<li>The question itself.. &#8220;how long would it take you to do / fix / add / change x?&#8221;.<br />
A developers starting point is their experience of development to date, and that development is at it&#8217;s most productive in flow-time. So they&#8217;re going to answer you based on them being in productive flow-time. However, this means they&#8217;re starting their estimate based on an unaware assumption that they&#8217;re quoting flow-time.<br />
For example, if a developer responds with &#8220;it&#8217;ll take me half a day&#8221;, what they&#8217;re really saying is &#8220;with a half-day of flow-time, I can do / fix /add / change x&#8221;.</li>
<li>If you didn&#8217;t already know, <a title="Defeating optimism - CodingHorror.com" href="http://www.codinghorror.com/blog/archives/000284.html">developers are optimistic</a>. They&#8217;re optimistic about how much they can get done, and they&#8217;re optimistic about how much flow-time they&#8217;re going to have.</li>
</ol>
<p><strong>So what is the answer?!</strong></p>
<p>To quote more from <a title="Peopleware: Productive People and Teams - Amazon.co.uk" href="http://www.amazon.co.uk/gp/product/0932633439?ie=UTF8&amp;tag=fatl-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0932633439">Peopleware</a>:</p>
<blockquote><p>Chances are, your company&#8217;s present time accounting system is based on a conventional model. It assumes that work accomplished is proportional to the number of hours put in. When workers fill out their time sheets in this scheme, they make no distinction between doing meaningful work and hours of pure frustration. So they&#8217;re reporting body time rather than brain time.</p>
<p>&#8230;</p>
<p>The phenomena of flow and immersion give us a more realistic way to model how time is applied to a development task. What matters is not the amount of time you&#8217;re <em>present</em>, but the amount of time that you&#8217;re <em>working at full potential</em>. An hour in flow really accomplishes something, but ten six-minute work periods sandwiched between eleven interruptions won&#8217;t accomplish anything.</p></blockquote>
<p>The answer, then, is to take the developers estimate with a pinch of salt (the more &#8216;seasoned&#8217; the developer, the less salt required), remember that their estimate <strong>is an <a title="Estimate (noun): an approximate judgment or calculation - dictionary.com" href="http://dictionary.reference.com/browse/estimate"><em>estimate</em></a></strong>, and use it with <a title="Evidence Based Scheduling - JoelOnSoftware.com" href="http://www.joelonsoftware.com/items/2007/10/26.html">evidence based scheduling</a> (if you aren&#8217;t already).</p>
<p>The next question you may be asking of course, is how do I reduce the difference between the estimate and the actual &#8211; the &#8216;slip&#8217;.</p>
<p>That&#8217;s a topic for another day. I&#8217;ll let you know when I&#8217;ve finished <a title="Peopleware: Productive People and Teams - Amazon.co.uk" href="http://www.amazon.co.uk/gp/product/0932633439?ie=UTF8&amp;tag=fatl-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=0932633439">Peopleware</a>, or you can grab a copy for yourself  <img src='http://www.fatlemon.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fatlemon.co.uk/2009/01/why-are-software-developers-so-bad-at-estimating-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.447 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-05 16:04:36 -->

