<?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>www.hackification.com &#187; Opinion</title>
	<atom:link href="http://www.hackification.com/category/opinion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hackification.com</link>
	<description></description>
	<lastBuildDate>Sat, 05 Jun 2010 11:16:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Designing a VS2010 Color Scheme &#8211; Consistency, Consistency, Consistency</title>
		<link>http://www.hackification.com/2010/05/16/designing-a-vs2010-color-scheme-consistency-consistency-consistency/</link>
		<comments>http://www.hackification.com/2010/05/16/designing-a-vs2010-color-scheme-consistency-consistency-consistency/#comments</comments>
		<pubDate>Sun, 16 May 2010 19:05:53 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[colors]]></category>
		<category><![CDATA[highlighting]]></category>
		<category><![CDATA[syntax]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=481</guid>
		<description><![CDATA[I recently found StudioStyles, a collection of Visual Studio 2010 color schemes, and it inspired me to create my own. I&#8217;ve never bothered customizing my editor colors before, but since VS2010 has an overall darker look, I thought I&#8217;d have a bash at creating a matching dark editor scheme. Looking through some of the submissions [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-503" style="margin-right: 10px;" title="Colors" src="http://www.hackification.com/wp-content/uploads/2010/05/Colors.png" alt="" width="160" height="110" />I recently found <strong><a href="http://studiostyles.info/" target="_blank">StudioStyles</a>, a collection of Visual Studio 2010 color schemes</strong>, and it inspired me to create my own. I&#8217;ve never bothered customizing my editor colors before, but since VS2010 has an overall darker look, I thought I&#8217;d have a bash at creating a matching dark editor scheme.</p>
<p><span id="more-481"></span>Looking through some of the submissions on the site, I was struck by how&#8230; well&#8230; random most of them are. Without meaning to be rude, they just look like someone went through the list, randomly assigning colors. Many many programmers believe coding and graphic design are polar opposites &#8211; that if you&#8217;re a coder, you must necessarily suffer from &#8220;programmer art&#8221;, and hence that it&#8217;s pointless to ever try to learn better design skills. <strong>I completely disagree with this diagnosis.</strong></p>
<p>I&#8217;m going to use only one design rule for this color scheme &#8211; consistency: <strong>keep similar things similar, and make different things different</strong>.</p>
<h3>Basics</h3>
<p>I&#8217;ve already decided to create a &#8220;dark&#8221; theme, so the background will be black. I also want to highlight important or dangerous elements of the source, and downplay incidental aspects. This idea will modify each of the colors chosen, and help suggest colors where there is no clear choice. Each choice will be reflected as far as is possible across many file types &#8211; for example, a C# comment should probably be the same color as an XML one, a JavaScript one, etc.</p>
<p>I&#8217;m also going to make use of color shades. I know Visual Studio has to cater for people using low-color displays, remote desktop, and those with reduced vision, but its use of primary colors leaves it looking a little dated. Color shades can be used to bring the look a little more up-to-date, and to group related elements, while still being able to distinguish between them.</p>
<h3>Comments &#8211; Green</h3>
<p>Comments have always been green in Visual Studio, and I&#8217;m going to keep them that way &#8211; a vibrant green, made bold, to catch the eye. (If comments aren&#8217;t important, then why are you writing them?) Comment hyperlinks and the text in #region blocks also match.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-483" style="border: 8px solid #000000;" title="Comments" src="http://www.hackification.com/wp-content/uploads/2010/05/Comments.png" alt="" width="400" height="128" /></p>
<h3>Literals &#8211; Blue</h3>
<p>String literals are red in the standard Visual Studio color scheme, but I wanted to reserve that color for errors and the like. In my mind strings are blue (don&#8217;t ask me why) so I&#8217;ve chosen a light blue for strings.</p>
<p>With consistency in mind, what else should match this?</p>
<ul>
<li>String literals are blue, so why not other literals, such as integers? The common color will highlight &#8220;magic values&#8221; in code.</li>
<li>We&#8217;ll need to colorize XML and HTML, so we can make attribute values blue too.</li>
<li>JavaScript and SQL obviously have literals.</li>
<li>I&#8217;ve also chosen to see CSS values as literals &#8211; they go blue too. (You could easily argue the toss about that though).</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-485" style="border: solid 8px #000;" title="Code Literals" src="http://www.hackification.com/wp-content/uploads/2010/05/Literals1.png" alt="" width="400" height="66" /></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-486" style="border: 8px solid #000000;" title="CSS Literals" src="http://www.hackification.com/wp-content/uploads/2010/05/Literals2.png" alt="" width="400" height="34" /></p>
<h3>Keywords &#8211; Gray</h3>
<p>Since the background is black, &#8216;unadorned&#8217; text will be white &#8211; a nice easy choice. How about keywords?</p>
<p>I want to make them a different color &#8211; so I can tell when I&#8217;ve typed &#8216;retrun&#8217; for the billionth time &#8211; but I don&#8217;t consider them to be &#8220;core&#8221; code. I think of them as scaffolding around my identifiers. (Perhaps I&#8217;m a LISPer at heart). I&#8217;ve chosen to keep them a neutral color, but a dimmer shade, so they fade out &#8211; hence gray.</p>
<h3>Types &#8211; Yellow/Orange</h3>
<p>Colorizing types is handy as it again allows me to see when I&#8217;ve mis-typed something. I want them to stand out (so a dim color is out), and I don&#8217;t want them confused with anything else &#8211; so reds, greens, and blues are gone. Yellows and light oranges seem a good choice &#8211; close enough to the normal white text, but sufficiently different to catch the eye. I&#8217;ve chosen a light orange for types, and highlighted interface types as yellow. (I figure that looking at how interfaces are defined and used is often a good way to understand the structure of a body of code &#8211; hence the slightly more eye-catching color).</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-493" style="border: 8px solid #000000;" title="Types" src="http://www.hackification.com/wp-content/uploads/2010/05/Types.png" alt="" width="400" height="104" /></p>
<p>(Oddly enough, this doesn&#8217;t seem to work for types in C++ &#8211; they always seem to come out white. Not sure why.)</p>
<h3>Errors, Warnings, and Oddities &#8211; Red</h3>
<p>This was an easy color to choose &#8211; red (for me) means stop and think. There are a few code constructs that I wanted to highlight as either dangerous or needing attention:</p>
<ul>
<li>Compiler errors and warnings;</li>
<li>Preprocessor directives;</li>
<li>Breakpoints.</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-495" style="border: 8px solid #000000;" title="Errors" src="http://www.hackification.com/wp-content/uploads/2010/05/Errors.png" alt="" width="400" height="271" /></p>
<h3>Editor Overlays &#8211; Purple/Dark Blue</h3>
<p>Visual Studio now highlights parts of the source depending on where youyr cursor is &#8211; it highlights matching braces, and will also display all usages of the symbol at the caret. These display can change rapidly, so shouldn&#8217;t be too distracting. I&#8217;ve chosen a dark purple, which is subtly visible, but which blends in with the black background.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-498" style="border: 8px solid #000000;" title="Overlays" src="http://www.hackification.com/wp-content/uploads/2010/05/Overlays.png" alt="" width="400" height="113" /></p>
<p>We need a related color for the selection too, so I&#8217;ve chosen dark blue.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-510" style="border: 8px solid #000000;" title="Selection" src="http://www.hackification.com/wp-content/uploads/2010/05/Selection.png" alt="" width="400" height="71" /></p>
<h3>Omissions</h3>
<p>There&#8217;s still quite a few entries in the colors list I haven&#8217;t filled out &#8211; the main areas being:</p>
<ul>
<li>VB.NET;</li>
<li>XSLT</li>
<li>IntelliTrace</li>
<li>Test Coverage</li>
</ul>
<p>If you fancy addressing these omissions and sending me back an updated settings file, I&#8217;ll be happy to credit you.</p>
<h3>Conclusion &amp; Download</h3>
<p>So there you go. Obviously color schemes are very personal (and contentious). I think I&#8217;ve done a pretty good job; you might well think otherwise. Even if you don&#8217;t like this particular scheme, I hope you&#8217;ll agree that setting a few design principles in place before assigning colors can help you choose (and use) the colors effectively.</p>
<p>Sadly there&#8217;s no way to upload my settings to StudioStyles, and I&#8217;m too lazy to re-do all the work by hand. Until they allow that option, I&#8217;ll host the settings from here:</p>
<blockquote><p><strong>Download <a href="http://www.hackification.com/downloads/hackification.vssettings" target="_blank">hackification.vssettings</a></strong></p></blockquote>
<p>Save this file somewhere, then use Tools -&gt; Import and Export Settings&#8230; to merge them in.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2010/05/16/designing-a-vs2010-color-scheme-consistency-consistency-consistency/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Links &#8211; node.js, Processors, Microsoft, and more</title>
		<link>http://www.hackification.com/2010/02/07/weekly-links/</link>
		<comments>http://www.hackification.com/2010/02/07/weekly-links/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 12:24:33 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=422</guid>
		<description><![CDATA[Since I&#8217;m having trouble producing full-length articles at the moment, I thought I&#8217;d try a different track to at least get some value out of my blog hosting costs. I&#8217;ll try to post a handful of links that have caught my attention each week. Comet with node.js and V8 http://amix.dk/blog/post/19484 A presentation (slideshow, no audio [...]]]></description>
			<content:encoded><![CDATA[<p>Since I&#8217;m having trouble producing full-length articles at the moment, I thought I&#8217;d try a different track to at least get <em>some </em>value out of my blog hosting costs. I&#8217;ll try to post a handful of links that have caught my attention each week.</p>
<p><span id="more-424"></span></p>
<h3>Comet with node.js and V8</h3>
<p><a href="http://amix.dk/blog/post/19484" target="_blank">http://amix.dk/blog/post/19484</a></p>
<p>A presentation (slideshow, no audio or video) on node.js, a JavaScript web-server running on Google&#8217;s V8 engine. Very interesting concept &#8211; using an event-based system vastly simplifies the code needed to serve data. There&#8217;s plenty of discussion about node.js on the interwebs at the moment &#8211; hopefully it will grow and become more than just a curiosity.</p>
<h3>Gallery  of Processor Cache Effects</h3>
<p><a href="http://igoro.com/archive/gallery-of-processor-cache-effects/" target="_blank">http://igoro.com/archive/gallery-of-processor-cache-effects/</a></p>
<p>Interesting blog post about the effects that processor caches may have on performance. Examples are in C#, but really apply to any language.</p>
<h3>Microsoft’s Creative Destruction</h3>
<p><a href="http://www.nytimes.com/2010/02/04/opinion/04brass.html?pagewanted=1&amp;ref=opinion" target="_blank">http://www.nytimes.com/2010/02/04/opinion/04brass.html?pagewanted=1&amp;ref=opinion</a></p>
<p>Opinion piece from the NYTimes regarding Microsoft&#8217;s recent lack of innovation (at least, in the area of shiny gadgets). Written by an ex-vice-president of Microsoft.</p>
<h3>How Many Passes?</h3>
<p><a href="http://blogs.msdn.com/ericlippert/archive/2010/02/04/how-many-passes.aspx" target="_blank">http://blogs.msdn.com/ericlippert/archive/2010/02/04/how-many-passes.aspx</a></p>
<p>Summary article from Eric Lippert describing the differences between the C# compiler and a &#8220;traditional&#8221; compiler, and listing the various passes made over the symbol tree.</p>
<h3>A Deadlock Holiday</h3>
<p><a href="http://www.theregister.co.uk/2009/12/10/verity_stob/" target="_blank">http://www.theregister.co.uk/2009/12/10/verity_stob/</a></p>
<p>Very funny tongue-in-cheek article about the current state of parallel / multicore coding techniques, from Verity Stob of The Register.</p>
<h3>A Maturity Model for Source Control</h3>
<p><a href="http://lucas-ward.blogspot.com/2010/02/maturity-model-for-source-control-scmm.html" target="_blank">http://lucas-ward.blogspot.com/2010/02/maturity-model-for-source-control-scmm.html</a></p>
<p>Semi-opinion piece assigning levels to types of source-control systems &#8211; from &#8220;No SCM&#8221; through &#8220;Clunky&#8221; to &#8220;Speedy,  Invisible, and Highly Capable&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2010/02/07/weekly-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#039;Smart and Gets Things Done&#039; vs &#039;Done and Gets Things Smart&#039;</title>
		<link>http://www.hackification.com/2010/01/10/smart-and-gets-things-done-vs-done-and-gets-things-smart/</link>
		<comments>http://www.hackification.com/2010/01/10/smart-and-gets-things-done-vs-done-and-gets-things-smart/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 19:10:47 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[articles]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[recruitment]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=351</guid>
		<description><![CDATA[In this article I link to two excellent articles on the subject of hiring coders. They&#8217;re not new by any means, but if you haven&#8217;t read one or both of them, I thoroughly recommend them. (If you&#8217;re familiar with both these writers, then skip this article.) Smart, and Gets Things Done Joel Spolsky&#8217;s 2006 article [...]]]></description>
			<content:encoded><![CDATA[<p>In this article I link to two excellent articles on the subject of hiring coders. They&#8217;re not new by any means, but if you haven&#8217;t read one or both of them, I thoroughly recommend them. (If you&#8217;re familiar with both these writers, then skip this article.)</p>
<p><span id="more-351"></span></p>
<h3>Smart, and Gets Things Done</h3>
<p><a href="http://www.hackification.com/wp-content/uploads/2010/01/spolsky.jpg"><img class="alignleft size-full wp-image-363" style="margin-right: 10px;" title="Joel Spolsky" src="http://www.hackification.com/wp-content/uploads/2010/01/spolsky.jpg" alt="" width="130" height="87" /></a>Joel Spolsky&#8217;s 2006 article &#8220;The Guerrilla Guide to Interviewing&#8221; is a real classic that&#8217;s since been made into a book. He argues that there are two things to look for when interviewing, and that a candidate needs to have both attributes &#8211; having just one is as bad as having neither.</p>
<blockquote><p>&#8220;Everybody gives lip service to the idea that people are the most important part of a software project, but nobody is quite sure what you can <em>do</em> about it. The very first thing you have to do right if you want to have good programmers is to <em>hire</em> the right programmers, and that means you have to be able to figure out who the right programmers <em>are</em>, and this is usually done in the interview process.&#8221;</p></blockquote>
<p>Read Joel&#8217;s Article: <strong><a title="The Guerrilla Guide to Interviewing (version 3.0)" href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html" target="_blank">The Guerrilla Guide to Interviewing (version 3.0)</a></strong></p>
<h3>Done, and Gets Things Smart</h3>
<p><a href="http://www.hackification.com/wp-content/uploads/2010/01/yegge.jpg"><img class="alignleft size-full wp-image-364" style="margin-right: 10px;" title="Steve Yegge" src="http://www.hackification.com/wp-content/uploads/2010/01/yegge.jpg" alt="" width="130" height="87" /></a>Steve Yegge&#8217;s 2008 response article reminds us that recognising smarts (in ourselves and others) isn&#8217;t even necessarily possible. He suggests that the best approach to hiring is finding &#8220;seed&#8221; employees (although obviously being able to identify them is a Catch-22 situation). To find them you either need to be lucky, or perhaps home in on them via word of mouth.</p>
<blockquote><p>&#8220;How do you hire someone who&#8217;s smarter than you?  How do you <em>tell</em> if someone&#8217;s smarter than you? This is a problem I&#8217;ve thought about, over nearly twenty years of interviewing, and it appears that the answer is: you can&#8217;t. You just have to get lucky.&#8221;</p></blockquote>
<p>Read Steve&#8217;s Article: <strong><a title="Done, and Gets Things Smart" href="http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.html" target="_blank">Done, and Gets Things Smart</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2010/01/10/smart-and-gets-things-done-vs-done-and-gets-things-smart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Tip: Avoid Enums If Possible</title>
		<link>http://www.hackification.com/2009/12/01/quick-tip-avoid-enums-if-possible/</link>
		<comments>http://www.hackification.com/2009/12/01/quick-tip-avoid-enums-if-possible/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 18:16:43 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[enums]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=330</guid>
		<description><![CDATA[One of the &#8220;anti-patterns&#8221; I come across from time to time is over-use of enumerations for control flow. This article describes why I consider it an anti-pattern, and how to counteract it. Let&#8217;s suppose we want to represent an arithmetic operation on two numbers &#8211; such as plus, minus, multiply, etc. We could represent that [...]]]></description>
			<content:encoded><![CDATA[<p>One of the &#8220;anti-patterns&#8221; I come across from time to time is over-use of enumerations for control flow. This article describes why I consider it an anti-pattern, and how to counteract it.</p>
<p><span id="more-330"></span>Let&#8217;s suppose we want to represent an arithmetic operation on two numbers &#8211; such as plus, minus, multiply, etc. We could represent that operation as an enum (although to be clear &#8211; I don&#8217;t think you should):</p>
<pre>enum ArithmeticOperation
{
  Add,
  Subtract,
  Multiply,
  Divide
}</pre>
<p>We could then define a function to apply this operation to two numbers (highlighting will be explained later):</p>
<pre>int ApplyOperation(ArithmeticOperation op, int x, int y)
{
  switch(op)
  {
    <span style="color: #ffff00;">case ArithmeticOperation.Add: return x + y;</span>
    case ArithmeticOperation.Subtract: return x - y;
    case ArithmeticOperation.Multiply: return x * y;
    case ArithmeticOperation.Divide: return x / y;
    default: throw new InvalidOperationException();
  }
}</pre>
<p>That&#8217;s&#8230; sort of fine &#8211; but what happens when we want to extend it?</p>
<p><strong>Adding Operators: No Compile-Time Checking</strong></p>
<p>Let&#8217;s consider what happens if we want to add another operator &#8211; say exponentiation. If we add the enum value but forget to implement the switch case value, everything compiles fine. It&#8217;s only once we come to run the code, and actually hit that code path, that we discover the mistake, giving a run-time exception.</p>
<p><strong>Adding Methods: Bad Code Organisation</strong></p>
<p>Next, imagine what happens if we need to add more methods that switch on this enum. We might need a method returning the operator symbol, and another returning the operator precedence.</p>
<pre>string GetOperatorSymbol(ArithmeticOperation op)
{
  switch(op)
  {
    <span style="color: #ffff00;">case ArithmeticOperation.Add: return "+";</span>
    case ArithmeticOperation.Subtract: return "-";
    case ArithmeticOperation.Multiply: return "*";
    case ArithmeticOperation.Divide: return "/";
    default: throw new InvalidOperationException();
  }
}

int GetOperatorPrecedence(ArithmeticOperation op)
{
  switch(op)
  {
    <span style="color: #ffff00;">case ArithmeticOperation.Add: return 10;</span>
    case ArithmeticOperation.Subtract: return 10;
    case ArithmeticOperation.Multiply: return 20;
    case ArithmeticOperation.Divide: return 20;
    default: throw new InvalidOperationException();
  }
}</pre>
<p>I&#8217;ve highighted the relevant code for the &#8220;add&#8221; operator. Notice how it&#8217;s spread all over the place. Switch statements might group by operation, but they split by concept &#8211; and that&#8217;s the exact opposite of what&#8217;s usually intended with OO coding.</p>
<p><strong>A Better Way</strong></p>
<p>I&#8217;d suggest a better way of approaching this problem is to use an abstract class.</p>
<pre>abstract class ArithmeticOperation
{
  abstract int ApplyOperation(int x, int y);
  abstract string GetSymbol();
  abstract int GetPrecendence();
}

class AddArithmeticOperation : ArithmeticOperation
{
  override int ApplyOperation(int x, int y)
  {
    return x + y;
  }

  override string GetSymbol()
  {
    return "+";
  }

  override int GetPrecedence()
  {
    return 10;
  }
}

// ...and so forth for the other operators.</pre>
<p>That way, all the code for each operator sits in the same place, and adding any new methods for an operator requires all operators to be implemented before the code will even compile.</p>
<p><strong>When to Use Enums</strong></p>
<p>So if enums should be avoided, why do most languages include them? Personally I&#8217;d be happy without them,  but I can think of one possible reason you might want to use an enum. If you&#8217;re defining a public interface designed for consumption by other coders, you could argue that simplifying the interface at the expense of the code inside is a valid trade-off.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/12/01/quick-tip-avoid-enums-if-possible/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ten IT Concepts That Non-IT People Don&#039;t Get</title>
		<link>http://www.hackification.com/2009/09/28/ten-it-concepts-that-non-it-people-dont-get/</link>
		<comments>http://www.hackification.com/2009/09/28/ten-it-concepts-that-non-it-people-dont-get/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 20:40:24 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[it]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=243</guid>
		<description><![CDATA[Since I &#8220;work with computers&#8221; I tend to get asked to do fair amount of unofficial technical support for family and neighbours. I&#8217;ve noticed that the same confusions about IT crop up again and again. Here&#8217;s my top ten. (Note that due to my background this is going to be Windows-centric. Please don&#8217;t take this [...]]]></description>
			<content:encoded><![CDATA[<p>Since I &#8220;work with computers&#8221; I tend to get asked to do fair amount of unofficial technical support for family and neighbours. I&#8217;ve noticed that the same confusions about IT crop up again and again. Here&#8217;s my top ten.</p>
<p><span id="more-243"></span>(Note that due to my background this is going to be Windows-centric. Please don&#8217;t take this to mean that I think Windows PCs are unfriendly &#8211; it&#8217;s just I don&#8217;t know enough about other systems to be able to comment. I also don&#8217;t want to come across as elitist &#8211; if non-IT people don&#8217;t understand something, that&#8217;s not because they&#8217;re dumb &#8211; it&#8217;s because we haven&#8217;t made computer systems obvious enough.)</p>
<p><strong><img class="alignleft size-full wp-image-308" title="Click or Double-Click" src="http://www.hackification.com/wp-content/uploads/2009/09/mouse-click.jpg" alt="Click or Double-Click" width="100" height="100" />1. When to Click and When to Double-Click</strong></p>
<p>This one is a continual source of annoyance to IT people, and especially to those in support. It seems obvious to us which should be used when, but before you get mad with the user you&#8217;re helping, consider this: can you make rules for when to click and when to double-click? Why do you double-click an icon to perform the action, but only single-click a button? What if Windows is set to &#8220;single click to open an item&#8221;?</p>
<p>Add into the mix the close cousin right-clicking, together with triple-clicks in text editors, double-single-clicks to rename, and of course modified clicks (holding down control or shift), and I think confusion is the correct response.</p>
<p><strong><img class="alignleft size-full wp-image-311" title="Folder" src="http://www.hackification.com/wp-content/uploads/2009/09/folder.jpg" alt="Folder" width="100" height="100" />2. Hierarchical Folders</strong></p>
<p>Hierarchical folders are a great idea &#8211; don&#8217;t get me wrong &#8211; but they&#8217;re a good example of a neat metaphor overextended and hence confused. Most people are familiar with cardboard folders that can store bits of paper &#8211; and equally most people are happy to store their files in folders on their PC. Where it all goes wrong is with folders within folders, as this very rarely happens in the real world. Many users are simply unaware that they can create additional folders inside &#8220;My Documents&#8221; &#8211; hence the usual tendency to find hundreds or even thousands of files, all at the same folder level.</p>
<p>Making the problem even worse is the fact that &#8220;Save As&#8221; and &#8220;Open&#8221; dialogs often look nothing like the standard file explorer. This makes it more difficult to mentally link the save operation with the save location. This leads to the common problem of a user &#8220;losing&#8221; all their files &#8211; when in fact the &#8220;open&#8221; dialog has for some reason defaulted to another directory, and hence shows a different list of files to those the user was expecting.</p>
<p>(And don&#8217;t even get me started on the fact that folders like &#8220;My Documents&#8221; appear in TWO locations in the folder tree &#8211; the physical one that users can&#8217;t find or recognise, and the virtual one which isn&#8217;t supported by all applications).</p>
<p><strong><img class="alignleft size-full wp-image-313" title="Recycle" src="http://www.hackification.com/wp-content/uploads/2009/09/recycle.jpg" alt="Recycle" width="100" height="100" />3. Using Add/Remove Programs</strong></p>
<p>I need to clarify here. When a user wants to remove a program they chose to install, they head over to Add/Remove Programs &#8211; no problems. I&#8217;ve found however that when it&#8217;s software they didn&#8217;t install (or didn&#8217;t intentionally install) &#8211; there&#8217;s a problem. Messages that pop-up on start-up, unwanted system tray announcements, even auto-starting applications &#8211; these are all a source of annoyance, and often there&#8217;s no obvious way to associate the offender with the appropriate entry in Add/Remove Programs. Often trialware pops up nag screens at startup, giving the user the option to purchase it &#8211; but without an option to uninstall.</p>
<p>Even worse is the case where a user wants to keep the application, just not have it launch at startup. There are many different ways an application can hook into the startup sequence, and most of them are inaccessible unless you&#8217;re comfortable using something like msconfig (which, let&#8217;s face it, non-IT people aren&#8217;t).</p>
<p><strong><img class="alignleft size-full wp-image-315" title="Sony Vaio" src="http://www.hackification.com/wp-content/uploads/2009/09/vaio.jpg" alt="Sony Vaio" width="100" height="68" />4. Installing Bundled Software Hurts</strong></p>
<p>IT people know that bundled software (aka &#8220;crapware&#8221;) isn&#8217;t included for our benefit &#8211; it&#8217;s generally a way hardware manufactures or system builders lower costs by basically pushing unwanted adverts for unwanted products onto your machine, in the hope that you won&#8217;t be able to uninstall them, and will finally buy them (see item #3 above).</p>
<p>Unfortunately a standard user assumes that if a hardware item comes with a disk, that disk is there for a good reason &#8211; and so installs the lot. Sometimes this is just an annoyance, but sometimes it&#8217;s more sinister &#8211; bundled software often stops the PC functioning correctly. The worst offenders seem to be the software that comes with wireless network adapters. For some reason they all want to turn off Window&#8217;s standard wireless zero-configuration system, and install their own. Sadly, their own offerings often don&#8217;t work (especially if they were written pre-XP) and the user is left with a completely non-functioning wireless system. Had the user simply plugged in the hardware and let Windows do the rest, it probably would have worked. The instructions said to install the software &#8211; and possibly stung by all the geeks who kept telling them to &#8220;RTFM&#8221; &#8211; they did so.</p>
<p><strong><img class="alignleft size-full wp-image-318" title="Firefox" src="http://www.hackification.com/wp-content/uploads/2009/09/firefox.jpg" alt="Firefox" width="100" height="100" />5. That There Is A Choice Of Software</strong></p>
<p>Odds are that you&#8217;re reading this on Firefox &#8211; or if not, as a reader of a coding blog, you at least know the name of the browser you&#8217;re using. This almost certainly isn&#8217;t the case for the majority of PC users &#8211; they don&#8217;t use a <em>browser</em>, they use <em>the internet</em> (or if not the internet, then they use <em>msn, facebook, google,</em> or whatever). Most people simply use the browser as a means to an end. The same goes for music players, email clients (generally dictated by their ISP), and anti-virus (generally the one with the biggest display in the local PC shop).</p>
<p>Unfortunately this means that when things go wrong, or go expensive, or go ad-ridden, these users aren&#8217;t even aware they can change. Adverts on the web are annoying, but if you have no idea you can change your browser and install an ad-blocker, you have no choice but to suffer them. This also means that poor software can survive in the marketplace &#8211; since for correctly positioned, pushed, and marketed software, there ceases to even be a marketplace.</p>
<p><strong><img class="alignleft size-full wp-image-320" title="Windows Update" src="http://www.hackification.com/wp-content/uploads/2009/09/update.jpg" alt="Windows Update" width="100" height="100" />6. What Updates Do</strong></p>
<p>While writing this article &#8211; the first two weeks of September &#8211; my laptop has installed updates on the 1st, 4th, 9th, 11th and 14th of the month. Since this is a rather slow laptop, that means that if I choose to install them, I have to put up with bad performance, and if I don&#8217;t, I have to put up with repeated nagging. Even when I do install them, I know that in another couple of days they&#8217;ll be back.</p>
<p>I know updates are necessary &#8211; but do we need them every three days? Do they need to be quite so slow? And do they have to nag when I&#8217;m trying to use my PC &#8211; couldn&#8217;t they wait a while to see if the screensaver kicks in, as that&#8217;s likely to be a better time than now, now, now.</p>
<p><strong><img class="alignleft size-full wp-image-322" title="Money" src="http://www.hackification.com/wp-content/uploads/2009/09/money.jpg" alt="Money" width="100" height="112" />7. Software Licensing</strong></p>
<p>We need to put aside a discussion of whether software should be free or not for this one, and let&#8217;s just assume that people are happy paying for software for now.</p>
<p>The problem is that buying software isn&#8217;t really like buying other goods &#8211; what you buy isn&#8217;t the box, or the media, but a license. With normal goods, once you&#8217;ve purchased it, you keep hold it, and if it turns out to be an illegal purchase, someone (eg the police) have to come and physically remove it. With software, if the vendor decides it&#8217;s not a valid purchase, then the software magically stops working, with no easy recourse for the customer.</p>
<p>I&#8217;ve come across many cases of people who thought they were legitimately purchasing software, but in fact weren&#8217;t &#8211; either purchasing from someone who was knowingly selling illegal software, or purchasing from someone who believed they had the right to sell, but didn&#8217;t. Either way, the honest software purchasers had no immediate way of knowing the software they were buying wasn&#8217;t legit.</p>
<p>To be fair, most software vendors are taking steps to improve this &#8211; although the cynic in me says this is mainly to protect revenue streams, not customers.</p>
<p><strong><img class="alignleft size-full wp-image-324" title="RAM" src="http://www.hackification.com/wp-content/uploads/2009/09/ram.jpg" alt="RAM" width="100" height="64" />8. What Memory (RAM) Is For</strong></p>
<p>I think most computer users have a pretty good idea what disk storage is for &#8211; that&#8217;s where their files are stored. What I think users have a bigger problem with is volatile memory. It&#8217;s very difficult to describe to a non-techie what RAM actually does &#8211; just saying &#8220;it&#8217;s what running programs use&#8221; doesn&#8217;t give a full description by any means.</p>
<p>Making the problem worse is that fact that most consumer PCs are sold with the bare minimum of RAM. Users can easily see that they have a good amount of disk storage free, but it&#8217;s more difficult to get a feeling for whether they have enough RAM. Most users simply don&#8217;t realise that computers don&#8217;t have to be slow, and don&#8217;t have to spend all their time swapping virtual memory.</p>
<p><strong><img class="alignleft size-full wp-image-326" title="Network" src="http://www.hackification.com/wp-content/uploads/2009/09/network.jpg" alt="Network" width="100" height="90" />9. How To Use Networking</strong></p>
<p>As computers become cheaper, many households now have more than one. As that happens, this question is asked of me more and more often: &#8220;I&#8217;ve saved my files on the office computer; how can I get them on the laptop?&#8221;. The first couple of times, I set up a simple home network and created shortcuts to shared folders on each desktop. Unfortunately, this didn&#8217;t really cut it.</p>
<p>I think the main problem is that home networking fundamentally doesn&#8217;t fit in with most people&#8217;s work patterns &#8211; if they&#8217;re working on the laptop (say), why would the office computer be switched on? Having to leave both computers on just doesn&#8217;t fit. From the user&#8217;s point of view, sometimes the files are there (when the other computer is on), and sometimes they&#8217;re not.</p>
<p>I&#8217;ve found that solutions like <a href="http://www.getdropbox.com/" target="_blank">Dropbox</a> are much more palatable &#8211; while all the home computers might not be switched on, the internet connection almost always is. The networking in this case is transparent &#8211; the user doesn&#8217;t have to do a thing &#8211; and the files are magically up-to-date on all their computers.</p>
<p><strong><img class="alignleft size-full wp-image-327" title="Computer" src="http://www.hackification.com/wp-content/uploads/2009/09/computer.jpg" alt="Computer" width="100" height="80" />10. The Display Is Not The Computer</strong></p>
<p>For a long time, the sheer size of CRT monitors led many users to assume the monitor <em>was</em> the computer, and if they thought about the box below the desk at all, they thought it was &#8220;the hard-drive&#8221;. Now that monitors are much slimmer, people understand that the monitor is just a display mechanism, and the computer actually is under the desk.</p>
<p>Where it all goes a little confusing is when the computer in question isn&#8217;t near the display in front of the user &#8211; remote desktop, remote assistance, and the like. Even more flummoxing seems to be the notion of servers in general &#8211; for some reason a computer without a display unit doesn&#8217;t seem to be easily understandable. Despite the familiarity of the web, the idea that accessing a website involves a computer, often running a familar operating system, somewhere remote, seems a difficult one.</p>
<p><strong>Any More?</strong></p>
<p>Have I missed any other concepts that are repeatedly misunderstood? Any common problems you have to deal with? Let me know!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/09/28/ten-it-concepts-that-non-it-people-dont-get/feed/</wfw:commentRss>
		<slash:comments>76</slash:comments>
		</item>
		<item>
		<title>Debug.Assert Considered Pointless</title>
		<link>http://www.hackification.com/2009/06/10/debug-assert-considered-pointless/</link>
		<comments>http://www.hackification.com/2009/06/10/debug-assert-considered-pointless/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 20:26:24 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[assert]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=214</guid>
		<description><![CDATA[One thing I was told as a young programmer was to make good use of assertions for checking code. As time goes by however, I can see less and less use for assertions. I&#8217;m starting to think they&#8217;re pretty useless. (I&#8217;m going to use C# in my examples here: some of these points might not [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-225" style="margin-left: 10px; margin-right: 10px;" title="Debug Assert Stop" src="http://www.hackification.com/wp-content/uploads/2009/06/stop.png" alt="Debug Assert Stop" width="96" height="96" />One thing I was told as a young programmer was to make good use of assertions for checking code. As time goes by however, I can see less and less use for assertions. I&#8217;m starting to think they&#8217;re pretty useless.</p>
<p><span id="more-214"></span></p>
<p>(I&#8217;m going to use C# in my examples here: some of these points might not apply to all languages. By default, an assertion will not fire in a C# release build, and furthermore, the code inside will not even be executed).</p>
<p><em>Update 2009-06-11: I probably haven&#8217;t been clear enough, but luckily various commenters have picked up on this: I&#8217;m not advocating removing assertions and replacing them with nothing! In general, I think assertions should be replaced with a stronger check that also runs (or can run) in a release build.</em></p>
<p><strong>1. Pointless Guard Checking</strong></p>
<p>Unfortunately in my coding travels I see quite a bit of code like this:</p>
<pre>void Foo(Bar bar)
{
  Debug.Assert(bar != null);

  bar.DoSomething();
}</pre>
<p>What&#8217;s the point? If bar is null, then using it will throw an exception anyway. Why add unnecessary lines of code that make reading harder?</p>
<p><strong>2. Bad Argument Checking</strong></p>
<p>But, you&#8217;re thinking, what if the usage is separated from the assignment?</p>
<pre>class Foo
{
  public Foo(Bar bar)
  {
    Debug.Assert(bar != null);

    _bar = bar;
  }

  public void Method()
  {
    _bar.DoSomething();
  }

  private Bar _bar;
}</pre>
<p>True, you want to catch the error as it happens, not later on in the method. But shouldn&#8217;t you be throwing an ArgumentNullException instead?</p>
<p><strong>3. Difficult Detective Work</strong></p>
<p>So now you&#8217;re telling me that you&#8217;re not writing component code, and the only client of this class will be the application it&#8217;s embedded in. Why not save some effort and skimp on the checking code, and make it debug-only?</p>
<p>Fine idea&#8230; until you get a crash report from one of your users, and the stacktrace points to a NullReferenceException in Method(). Now you have to figure out where the null value got passed to the constructor&#8230; a potentially much more difficult task.</p>
<p><strong>4. Differences Between Debug and Release</strong></p>
<p>If you&#8217;re like me, you generally run the applications in debug. Your customers however, run in release. Why make the differences between these two versions any bigger? Even if you don&#8217;t intend your debug statements to change program state, it&#8217;s all too easy to accidentally do so:</p>
<ul>
<li>Running lazy-initializers or singleton constructors;</li>
<li>Loading data from the database via an ORM;</li>
<li>Moving data in or out of a cache;</li>
<li>Running static constructors.</li>
</ul>
<p><strong>5. Too-Shy Sanity-Checking</strong></p>
<p>Sometimes, despite the above warning, you really do have sanity-checking code that you&#8217;d like to run in a development or test environment to catch regressions, but which is too slow to give to general users. (I read somewhere that Excel has two computation engines: a simple, slow, reference one, and a fast, parallel, release one. Testers can run the two in parallel, and any differences are automatically flagged as errors).</p>
<p>So you might be tempted to do something like:</p>
<pre>Debug.Assert( SlowlyAndCarefullyVerifyInternalState() );</pre>
<p>The problem I have with this is that the debug/release division is way too blunt.</p>
<ul>
<li>Suppose a tester wants to test a release build, but also perform the sanity-checking?</li>
<li>Suppose a customer finds a bug in a complex calculation, and you want them to run the checks?</li>
<li>Suppose a developer wants to debug performance issues in the non-checked code?</li>
</ul>
<p>I would suggest you move the conditionals for code like this to a (possibly hidden) configuration setting. Someone wants to run in slow-and-safe mode? No problem, just tell them the registry setting (or whatever). By all means, change the splash screen or title bar or whatever so it says &#8220;test mode&#8221;.</p>
<p>The advantages of this method are:</p>
<ul>
<li>Anyone can turn it on and off;</li>
<li>Sanity-checking can be controlled at a much finer granularity than all-on / all-off.</li>
</ul>
<p><strong>6. Is It Recoverable, Or Not?</strong></p>
<p>The final argument against debug assertions concerns just exactly what an assertion means.</p>
<p>To my mind, an assertion is different to a simple flow-control test (&#8220;did the user enter a valid number?&#8221;), which is something the program can (should) handle. By definition, an assertion is checking for a disallowed state. An assertion doesn&#8217;t check for incorrect data; it checks for an incorrect program. Continuing after an assertion leads to undefined behaviour.</p>
<p>So how can you continue? More to the point, why should a user even be allowed to continue? If the state really is unrecoverable, then fail. Fail fast, log the error, and bail (possibly trying to allow the user to save work, or whatever). Having a release-build application continue after what would have been an assertion is just plain wrong.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/06/10/debug-assert-considered-pointless/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Learning? Me? But I&#039;m An Expert</title>
		<link>http://www.hackification.com/2009/05/05/learning-me-but-im-an-expert/</link>
		<comments>http://www.hackification.com/2009/05/05/learning-me-but-im-an-expert/#comments</comments>
		<pubDate>Tue, 05 May 2009 11:56:15 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[quotes]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=167</guid>
		<description><![CDATA[You&#8217;ve been a coder for a few years now, maybe even decades. You&#8217;ve got a successful job, making enough money. You know the &#8220;respectable&#8221; technologies that the recruiters look for: C++, C#, Java, whatever. There&#8217;s no need to learn anything new. Stay in your comfort zone. Take it from these guys: &#8220;I think there’s a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-176" style="margin-left: 8px; margin-right: 8px;" title="Dinosaur" src="http://www.hackification.com/wp-content/uploads/2009/05/dinosaur.png" alt="Dinosaur" width="124" height="100" />You&#8217;ve been a coder for a few years now, maybe even decades. You&#8217;ve got a successful job, making enough money. You know the &#8220;respectable&#8221; technologies that the recruiters look for: C++, C#, Java, whatever. There&#8217;s no need to learn anything new. Stay in your comfort zone. Take it from these guys:</p>
<p><span id="more-167"></span></p>
<blockquote><p><strong>&#8220;I think there’s a world market for about 5 computers.&#8221;</strong><br />
<em></em></p>
<p><em>- Thomas J. Watson, Chairman of the Board, IBM, circa 1948</em></p></blockquote>
<blockquote><p><strong>&#8220;It would appear that we have reached the limits of what it is possible to achieve with computer technology, although one should be careful with such statements, as they tend to sound pretty silly in 5 years.&#8221;</strong><br />
<em></em></p>
<p><em>- John Von Neumann, circa 1949</em></p></blockquote>
<blockquote><p><strong>&#8220;But what is it good for?&#8221;</strong><br />
<em></em></p>
<p><em>- Engineer at the Advanced Computing Systems Division of IBM, commenting on the microchip, 1968</em></p></blockquote>
<blockquote><p><strong>&#8220;There is no reason for any individual to have a computer in his home.&#8221;</strong><br />
<em></em></p>
<p><em>- Ken Olson, President, Digital Equipment Corporation, 1977</em></p></blockquote>
<p>Wise words indeed.</p>
<p>You need to learn when you know you don&#8217;t know enough, sure. It&#8217;s easy to pick up a book when you&#8217;re feeling clueless. The more dangerous time is when you think you do know enough. Coding (and computer science) is like the <a href="http://en.wikipedia.org/wiki/Red_Queen%27s_race" target="_blank">Red Queen&#8217;s Race</a>: you need to run as fast as you can just to stay still.</p>
<ul>
<li>When was the last time you bought or borrowed a technical book?</li>
<li>When was the last time you bought or borrowed a technical book, and then <em>actually </em><em>read it</em>?</li>
<li>When was the last time you bought or borrowed a technical book, and read it, <em>where it was of no immediate use to your job</em>?</li>
</ul>
<p><strong>Leave your comfort zone. Admit your ignorance. Learn something new. Learn something useless. Because next year, you might be kicking yourself for calling it useless. Don&#8217;t tell me that what you know now is all you&#8217;ll ever need to know. Don&#8217;t get quoted in next year&#8217;s list.</strong></p>
<p><em>If you liked the quotes above, you might also be interested in &#8220;<a title="Permanent Link: A Double Handful of Programming Quotes" rel="bookmark" href="../2008/12/23/a-double-handful-of-programming-quotes/">A Double Handful of Programming Quotes</a>&#8220;.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/05/05/learning-me-but-im-an-expert/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Consolas: Visual Studio&#039;s Hidden Gem</title>
		<link>http://www.hackification.com/2009/04/16/consolas-visual-studios-hidden-gem/</link>
		<comments>http://www.hackification.com/2009/04/16/consolas-visual-studios-hidden-gem/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 11:44:45 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[consolas]]></category>
		<category><![CDATA[fonts]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=112</guid>
		<description><![CDATA[Out of the box, Visual Studio uses the Courier New font for displaying code. While that&#8217;s an acceptable font for programming, it&#8217;s hardly modern or easy on the eye. Did you know that Microsoft supply a much more readable alternative, for free? Courier New has been around since 1955 &#8211; and that it&#8217;s been around [...]]]></description>
			<content:encoded><![CDATA[<p>Out of the box, Visual Studio uses the Courier New font for displaying code. While that&#8217;s an acceptable font for programming, it&#8217;s hardly modern or easy on the eye. Did you know that Microsoft supply a much more readable alternative, for free?</p>
<p><span id="more-112"></span>Courier New has been around since 1955 &#8211; and that it&#8217;s been around so long is a testament to its readability. However since then, display technology has radically changed &#8211; I&#8217;d be amazed if you weren&#8217;t reading this article on some form of TFT panel, and if using Windows, with ClearType enabled.</p>
<p>Enter Consolas.  For the release of Office 2007, Microsoft commissioned a set of modern fonts, designed to be highly readable on screens that use ClearType: Calibri, Candara, Cambria, Consolas, Constantia and Corbel. Of that set, Consolas makes an <em>excellent </em>monospaced code font.</p>
<p><strong>Here&#8217;s Courier New:</strong></p>
<p><img class="alignnone size-full wp-image-115" title="Courier New Example" src="http://www.hackification.com/wp-content/uploads/2009/04/couriernew.png" alt="Courier New Example" width="350" height="256" /></p>
<p><strong>And here&#8217;s Consolas:</strong></p>
<p><img class="alignnone size-full wp-image-116" title="Consolas Example" src="http://www.hackification.com/wp-content/uploads/2009/04/consolas.png" alt="Consolas Example" width="306" height="241" /></p>
<p>To my eyes, that&#8217;s a big improvement. You&#8217;ll notice as well that Consolas is slightly narrower, enabling you to fit a bit more text on the screen.</p>
<p><strong>So where can you get it?</strong></p>
<p>If you have Visual Studio, you can download it directly from Microsoft:</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;displaylang=en" target="_blank">http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;displaylang=en</a></p>
<p>Or if not, it comes as part of the free Powerpoint viewer:</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?familyid=048DC840-14E1-467D-8DCA-19D2A8FD7485&amp;displaylang=en" target="_blank">http://www.microsoft.com/downloads/details.aspx?familyid=048DC840-14E1-467D-8DCA-19D2A8FD7485&amp;displaylang=en</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/04/16/consolas-visual-studios-hidden-gem/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Could We Stamp Out IE6 More Quickly?</title>
		<link>http://www.hackification.com/2009/02/11/could-we-stamp-out-ie6-more-quickly/</link>
		<comments>http://www.hackification.com/2009/02/11/could-we-stamp-out-ie6-more-quickly/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 13:50:48 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=80</guid>
		<description><![CDATA[I don&#8217;t pretend to like Internet Explorer 6 &#8211; in fact quite the reverse &#8211; it makes me boiling mad that web developers still have to support an ancient browser. The sooner we can get rid of it, the better. So here&#8217;s my little idea&#8230; This article is really just thinking aloud &#8211; I&#8217;m interested [...]]]></description>
			<content:encoded><![CDATA[<p><a href="None"><img class="alignleft size-full wp-image-81 left-image" style="float: left;" title="Internet Explorer 6" src="http://www.hackification.com/wp-content/uploads/2009/02/ie6.jpg" alt="" width="100" height="100" /></a>I don&#8217;t pretend to like Internet Explorer 6 &#8211; in fact quite the reverse &#8211; it makes me boiling mad that web developers still have to support an ancient browser. The sooner we can get rid of it, the better. So here&#8217;s my little idea&#8230;</p>
<p><span id="more-80"></span></p>
<p>This article is really just thinking aloud &#8211; I&#8217;m interested to see what people think, and since my brainwaves always have fatal flaws that I don&#8217;t see in advance, interested to see who can point them out. (Incidentally, if you&#8217;re familiar with the reasons why IE6 still has market share, you can skip the first half of this article.)</p>
<p><strong>First, a bit of background</strong></p>
<p>So&#8230; you&#8217;ve just released your latest web app, and you want to support those 25% (or whatever) of users who still use IE6, but you don&#8217;t want to spend an inordinate amount of dev time supporting what is a shrinking market.</p>
<p>There have been <a href="http://css-tricks.com/ie-6-blocker-script/" target="_blank">various</a> <a href="http://www.wisdump.com/web-programming/campaigns-to-kill-the-web-browser-that-just-wont-die-internet-explorer-6/" target="_blank">suggestions</a> that we should just display some sort of banner pointing the user to browser upgrades or alternatives, but is that always feasible? To my mind there are two main reasons people don&#8217;t upgrade from IE6:</p>
<ol>
<li>They don&#8217;t have administrative rights to do so (for example in a corporate setting);</li>
<li>They don&#8217;t look at or click any upgrade notices, or indeed understand what a browser is.</li>
</ol>
<p>People in group #1 <em>cannot </em>upgrade or change browser (except Chrome &#8211; more later), so suggesting they upgrade is pointless. The people in group #2 simply don&#8217;t realise that a browser is a choice, don&#8217;t realise that a browser can be changed, andd for many of them, don&#8217;t realise their browser is even called &#8216;Internet Explorer&#8217; &#8211; remember that the default setup for most ISPs is to rename the IE shortcut to be something like &#8216;Click to Launch Bastardo Broadband&#8217;. Telling them they can upgrade is just more words on the screen, getting in the way of LOLcats or whatever &#8211; &#8220;Blah blah blah blah upgrade blah blah, OK / Cancel?&#8221; &#8211; to which the answer is &#8220;Hmmm&#8230; well&#8230; Cancel I guess &#8211; I just want to use the intarweb&#8221;.</p>
<p><strong>What&#8217;s better than an upgrade option?</strong></p>
<p>Simply put: no mention of the word &#8216;upgrade&#8217;, and no mention of the word &#8216;option&#8217;. Just a done deal.</p>
<p>You see, browsers don&#8217;t have to install in Program Files, and they don&#8217;t have to install via a lengthy and pointless install wizard. Installers can be short, quick, and not require admin privileges. I&#8217;m thinking of Chrome here. (Yes I know Firefox can run from anywhere &#8211; but that&#8217;s not typical, hence my focus on Chrome).</p>
<p>Instead of a banner vaguely informing users that &#8220;they&#8217;ve got the wrong browser&#8221; and &#8220;they could be free&#8221; (which are basically insulting and uninteresting statements to them), we just present the statement: &#8220;To use this website, click here&#8221;.</p>
<p>&#8230;Where &#8220;here&#8221; is a link to a custom Chrome (or other non-admin-install-required browser) installer, which does the following:</p>
<ul>
<li>Quick EULA, in case Mrs Miggins (aka &#8220;the user&#8221;) tries to sue Google;</li>
<li>Browser security pop-up, which we can&#8217;t (and shouldn&#8217;t) change;</li>
<li>Shows a progress window, showing install progress;</li>
<li>Places a shortcut on the desktop which launches your website in Chrome;</li>
<li>Finally, executes said shortcut, displaying your website in Chrome.</li>
</ul>
<p>And so, with two clicks of &#8220;OK&#8221;, the user is now happily viewing your web app. (And who knows, maybe they&#8217;ll start using Chrome for other browsing?)</p>
<p>Any thoughts?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/02/11/could-we-stamp-out-ie6-more-quickly/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Windows Live Mesh: First Impressions</title>
		<link>http://www.hackification.com/2009/02/08/windows-live-mesh-first-impressions/</link>
		<comments>http://www.hackification.com/2009/02/08/windows-live-mesh-first-impressions/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 17:50:10 +0000</pubDate>
		<dc:creator>Stu Smith</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[mesh]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[sync]]></category>

		<guid isPermaLink="false">http://www.hackification.com/?p=76</guid>
		<description><![CDATA[I&#8217;d heard of Windows Live Mesh previously, but not really looked into it before. Since we&#8217;re trying to improve our backup systems at the moment, I thought I&#8217;d give it a whirl and see what it can do for us. Overview Windows Live Mesh basically allows you to synchronize files and folders between different computers. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-77 left-image" style="float: left;" title="Windows Live Mesh" src="http://www.hackification.com/wp-content/uploads/2009/02/livemesh.jpg" alt="" width="111" height="82" />I&#8217;d heard of Windows Live Mesh previously, but not really looked into it before. Since we&#8217;re trying to improve our backup systems at the moment, I thought I&#8217;d give it a whirl and see what it can do for us.</p>
<p><span id="more-76"></span><strong>Overview</strong></p>
<p><a href="http://www.mesh.com" target="_blank">Windows Live Mesh</a> basically allows you to synchronize files and folders between different computers. You create a central &#8220;desktop&#8221; space in the &#8220;mesh&#8221;, which acts as the central store. You can then synchronize folders on multiple computers to folders in the mesh, and any files you store in these folders will become available both to the central store, and to any other computers also sync&#8217;ed to it.</p>
<p>I think Live Mesh probably does more than this &#8211; remote desktop seems to be in there somewhere &#8211; but it&#8217;s very difficult to penetrate the buzzwords to find out a simple list of features.</p>
<p>It&#8217;s also worth noting that it&#8217;s still in beta, and therefore still a bit rough around the edges. I&#8217;m not intending this article to be harsh, or overly critical &#8211; rather any bad points listed are my informal bug reports.</p>
<p>Here&#8217;s the good and bad points I&#8217;ve found in a couple of days&#8217; use:</p>
<p><strong>Good: IJW &#8211; It Just Works</strong></p>
<p>In general, once you&#8217;ve got your folders set up, the whole syncing thing just works automatically. Synchronization is one of those computer science problems that&#8217;s always difficult to get right (something I know from <a title="FeedGhost RSS Reader" href="http://www.feedghost.com/" target="_blank">personal experience</a>) &#8211; but Microsoft seems to have cracked it. Registering devices (computers) is easy, as is creating synced folders and attaching them to the devices.</p>
<p>That might seem a short paragraph for the best feature, but to my mind, &#8220;IJW&#8221; is about the best thing you can say about any application.</p>
<p><strong>Good: Integration with Windows Explorer</strong></p>
<p>For most of the time, you can forget you&#8217;re using Live Mesh at all. Live Mesh is integrated with Windows Explorer, so your synced folders work just like any other folder &#8211; there&#8217;s no need for a separate application. There are some visual cues to indicate they&#8217;re &#8216;special&#8217; though &#8211; a toolpane is docked on the right hand side, the folder icon is a nice glassy blue, and files that haven&#8217;t been downloaded yet are faded.</p>
<p><strong>Good: Live Desktop web interface</strong></p>
<p>Ignoring whether mimicing a desktop interface within a web browser is a good idea or not, the web interface to your folders (&#8220;Live Desktop&#8221;) is excellent &#8211; it really is a working cut-down copy of a Windows desktop. If you have Silverlight installed you&#8217;ll get better media views, but apart from that, it will work in vanilla Firefox and IE.</p>
<p style="text-align: center;"><img class="size-full wp-image-79" style="vertical-align: middle; border: black 1px solid;" title="Live Desktop" src="http://www.hackification.com/wp-content/uploads/2009/02/live_desktop.png" alt="" width="350" height="168" /></p>
<p>I think the &#8220;Live Desktop&#8221; metaphor (plus the devices view) really reinforces the idea that the &#8220;Mesh&#8221; is an additional, virtual, computer that you own.</p>
<p style="text-align: center;"><img class="size-full wp-image-78" style="vertical-align: middle; border: black 1px solid;" title="Live Devices" src="http://www.hackification.com/wp-content/uploads/2009/02/live_devices.png" alt="" width="300" height="209" /></p>
<p><strong>Bad: UI Polish</strong></p>
<p>I mentioned earlier that Live Mesh is currently in beta, and in some areas it really shows. This application lacks the final &#8216;polish&#8217; that&#8217;s the difference between a tech demo and a releasable product:</p>
<ul>
<li>Items in the &#8220;News&#8221; tab only have a time, not a date;</li>
<li>Vista switches in and out of glass mode while installing;</li>
<li>Windows Explorer right-click menu additions are only placeholders (they just display a help message instead of providing real functionality);</li>
<li>Images aren&#8217;t displayed as thumbnails in the web viewer.</li>
</ul>
<p><strong>Bad: Live Login</strong></p>
<p>Unfortunately, while the web desktop is nicely implemented, the rest of the &#8220;Live&#8221; infrastructure is just as shoddy and barely-working as it ever was. You can tick &#8220;remember me&#8221; and &#8220;save password&#8221; as often as you want, and it won&#8217;t work half the time. Live logins seems to take you through dozens of redirects. Want to report a bug? Trying to post on the forums will get you a HTTP 500 error. Oh and someone needs to tell Microsoft that the rest of the professional web world has moved on from having your public URIs end in &#8220;.aspx&#8221; or whatever the underlying server code is. Basically the Live login system feels clunky and difficult to navigate. (For example: the login screen doesn&#8217;t have a &#8220;sign in&#8221; button until you hover over the correct area of the screen &#8211; not very intuitive).</p>
<p><strong>Bad: Marketing</strong></p>
<p>I would have started using Live Mesh earlier &#8211; except Microsoft releases its new Live services in such a fog of marketing bombast that it&#8217;s hard to work out what they actually do. Apparently, Live Mesh:</p>
<p><em>&#8220;&#8230;provides a seamless “just works” experience that puts you at the center of your digital world by connecting you with the people you care about and putting you in control of your information, applications, and devices.&#8221;</em></p>
<p>Hmmm. And I suppose it cures cancer and brings about world peace too? What&#8217;s wrong with saying it seamlessly synchronizes and backs up your files?</p>
<p>One other problem is that Live Mesh is just one of three Live syncronization services &#8211; Live Mesh, Live Sync, and Live SkyDrive. (Seriously &#8211; I&#8217;m not making this up). How am I supposed to pick the right one, if Microsoft can&#8217;t?</p>
<p><strong>Bad: Large File Syncing &amp; Windows Explorer</strong></p>
<p>One major issue with Live Mesh is that it is currently tied to both Windows Explorer, and to a Windows login account. Basically, syncing only happens when you are logged on and viewing a Live Mesh folder, and worse, if syncing a large file is interrupted (say by closing the Explorer window), then it doesn&#8217;t resume &#8211; it restarts.</p>
<p>This means:</p>
<ul>
<li>Live Mesh can&#8217;t really be used for large files (say bigger than about 100Mb);</li>
<li>Live Mesh can&#8217;t be used in a server environment &#8211; which is unfortunate as it would have made a great backup service.</li>
</ul>
<p>One other problem worth mentioning is that Live Mesh seems to use 100% CPU when syncing.</p>
<p><strong>Overall</strong></p>
<p>Although there are quite a few rough edges, I really feel that once it&#8217;s out of beta, it&#8217;s going to be a great service. I&#8217;ve already written a little backup batch file for a few important files, and I&#8217;m going to try inviting others to share files (such as holiday pics).</p>
<p>Unfortunately I&#8217;m not so optimistic about the overall Live account / sign-in system &#8211; compared to OpenID it&#8217;s a big ugly mess. Microsoft really needs to re-work it (or better still, stop trying to be in control, stop trying to &#8220;own&#8221; user logins, and start playing nicely with OpenID).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackification.com/2009/02/08/windows-live-mesh-first-impressions/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
