<?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>Mark&#039;s Devblog</title>
	<atom:link href="http://defragdev.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://defragdev.com/blog</link>
	<description>Thoughts about development.  Oh and games stuff, too.</description>
	<lastBuildDate>Mon, 16 Apr 2012 02:21:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The Power of Boy Scouting &amp; Git Stash</title>
		<link>http://defragdev.com/blog/?p=654</link>
		<comments>http://defragdev.com/blog/?p=654#comments</comments>
		<pubDate>Mon, 16 Apr 2012 02:04:00 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[rants]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=654</guid>
		<description><![CDATA[No, I’m not advocating beavering your way to several badges while wearing ill-fitting shorts, a neckerchief fastened with a woggle and risking a criminal record.&#160; I’m talking about The Boy Scout Rule.&#160; The gist of it: The Boy Scouts have &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=654">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>No, I’m not advocating beavering your way to several badges while wearing ill-fitting shorts, a neckerchief fastened with a woggle and risking a criminal record.&#160; I’m talking about <a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule">The Boy Scout Rule</a>.&#160; </p>
<p>The gist of it:</p>
<blockquote><p>The Boy Scouts have a rule: &quot;Always leave the campground cleaner than you found it.&quot; If you find a mess on the ground, you clean it up regardless of who might have made the mess. You intentionally improve the environment for the next group of campers. Actually the original form of that rule, written by Robert Stephenson Smyth Baden-Powell, the father of scouting, was &quot;Try and leave this world a little better than you found it.&quot; </p>
<p>What if we followed a similar rule in our code: <strong>&quot;Always check a module in cleaner than when you checked it out.&quot;</strong> No matter who the original author was, what if we always made some effort, no matter how small, to improve the module. What would be the result? </p>
</blockquote>
<h2>Why it matters</h2>
<p>As a programmer, sometimes it’s doing the little things that makes everybody’s collective life a little bit easier.&#160; There’s a lot written about the practical benefits of doing this (namely: the ability to continually deliver without having to scrabble around in a dung-heap, weeping with shame) but, for my money, the most important thing is that it makes writing code more enjoyable on a day to day basis.&#160; </p>
<p><span id="more-654"></span>
<p>I always get irritated and furrow my brow when I find code that has been allowed to drift.&#160; When you think of the amount of times you run into a bewildering part of a codebase and spend 10 minutes scratching your head because something has a misleading name or there’s some dead code confusing the issue, why not just fix it up?&#160; Fine, you’ll probably have to spend a 5 to 10 minutes making the change (less with lovely refactoring tools like <a href="http://www.jetbrains.com/resharper/">ReSharper</a>), but code is write once, read many.&#160; Code hardens like cement, so there’s no time like the present.</p>
<p>The mechanical process of Typing Shit and Testing your Changes usually takes little to no time at all.&#160; If you save a few people the same 10 minutes of teeth-gnashing frustration, then you have made a positive change.&#160; </p>
<h2>Context Switching</h2>
<p>It’s often the case that I’m midway through feature work and don’t want to refactor as part of the same changeset, but nor do I want to submit my WIP changes.&#160; Refactoring is meant to change the structure of the code, but leave the functionality intact; refactoring and changing the function of the code in the same submission is often asking for trouble.&#160; Nobody wants to be the guy that broke something while ‘improving’ the code.&#160; Broken is not better.</p>
<p>In the past, I used to note down the thing that was irking me and fully intend to fix it up later, but I’d often forget to do it or be unwilling to spend the time re-acquainting myself with the problem when I returned.</p>
<p>Nowadays, I’m trying to Just Do It.&#160; It’s 2012 folks.&#160; The tooling exists to make this work.</p>
<h3>Perforce</h3>
<p>I’ve used perforce extensively.&#160; Perforce <a href="http://www.perforce.com/perforce/doc.current/manuals/cmdref/shelve.html">introduced shelving</a> a while back.&#160; In short, shelving allows you to store your WIP changelist on the P4 server without it being a bona-fida commit.&#160; You can use this for storing WIP changelists and reverting them locally.&#160; This allows you to jump onto something else without committing changes beforehand.&#160; Handy.&#160; </p>
<p>Even more handy is that anyone can un-shelve your shelved changelists.&#160; </p>
<h3>Git</h3>
<p>Git is a really cool bit of kit.&#160; Caveat Emptor: I’m not sure if it’ll shit the bed in asset-heavy projects, but we’re using it at work for our Mapply codebase and it’s a lovely change of pace.&#160; It took me a while to get to grips with the many-branches-but-only-one-location-on-disk thing, but it really is amazing.&#160; The reason I say it’s amazing because it allows me to work in different ways to traditional client/server SCM.</p>
<p>With Git, if you create a local feature branch for every single thing you work on, you’re pretty much 90% of the way there.&#160;&#160;&#160; </p>
<p>If you don’t want want to commit your work in progress changes before starting work on the distraction, you can simply use <a href="http://book.git-scm.com/4_stashing.html">Git Stash</a> instead.&#160; Git stash pushes your work in progress changes onto a local stack for safe-keeping.&#160; Once the stash command has been issued, you’re back to a clean state and ready to work on something else.&#160; At any point in the future, you can resume where you left off by typing git stash pop.</p>
<p>This makes it incredibly simple to hop around and fix up whatever the hell is annoying you at any given moment without polluting a changeset with unrelated fixes.&#160; </p>
<p>Happy scouting.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=654</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Origin Games to a different drive</title>
		<link>http://defragdev.com/blog/?p=653</link>
		<comments>http://defragdev.com/blog/?p=653#comments</comments>
		<pubDate>Sun, 11 Dec 2011 14:13:41 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=653</guid>
		<description><![CDATA[I wanted to move my BF3 install to my SSD but couldn’t figure out how to do it.&#160; Numerous posts suggested things, but none worked until I found this: From the EA forums: http://forum.ea.com/eaforum/posts/list/7461348.page#17730650 From SicklySquid: “OK. I thought I &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=653">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I wanted to move my BF3 install to my SSD but couldn’t figure out how to do it.&#160; Numerous posts suggested things, but none worked until I found this:</p>
<p>From the EA forums:</p>
<p><a title="http://forum.ea.com/eaforum/posts/list/7461348.page#17730650" href="http://forum.ea.com/eaforum/posts/list/7461348.page#17730650">http://forum.ea.com/eaforum/posts/list/7461348.page#17730650</a></p>
<p>From SicklySquid:</p>
<blockquote><p>“OK. I thought I would pass this along like a good Samaritan.      <br />SO I had the problem of not being able to install BF3 Into the directory I wished. I did most of what -=ADF=-Joey said, however I could not find _installer\DISK1 or EASetup. If they were here I would of found them trust me haha. So instead of uninstalling the game through the setup I simply used the windows uninstaller. (note: I moved the game to the directory on my other HD first. Also deleted the folder in the directory origin put it in.)       <br />After I opened origin back up and instead of it saying &quot;download&quot; it said &quot;install&quot;. It gave me the &quot;working&quot; symbol for a minute or so. Then it recognized it in the directory on my other drive. FIXT! “</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=653</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And another thing&#8230; BF3 Expansion packs</title>
		<link>http://defragdev.com/blog/?p=649</link>
		<comments>http://defragdev.com/blog/?p=649#comments</comments>
		<pubDate>Sun, 04 Dec 2011 16:17:37 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=649</guid>
		<description><![CDATA[From the blurb on the Battlefield Blog (emphasis mine): Battlefield 3: Back to Karkand is a huge expansion pack featuring four legendary Battlefield maps reimagined in the Frostbite 2 engine. Three new vehicles (the VSTOL fighter jet, Desert Buggy, and &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=649">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>From the blurb on the <a href="http://blogs.battlefield.ea.com/battlefield_bad_company/archive/2011/12/01/back-to-karkand-launches-for-the-playstation-3-on-tuesday.aspx">Battlefield Blog</a> (emphasis mine): </p>
<blockquote><p>Battlefield 3: Back to Karkand is a huge expansion pack featuring four legendary Battlefield maps reimagined in the Frostbite 2 engine. Three new vehicles (the VSTOL fighter jet, Desert Buggy, and an APC),<strong> ten new weapons that you can bring back to the base game</strong>, and a new layer of persistence with our all-new Assignments make this a must-have for any Battlefield fan.</p>
</blockquote>
<h1>Keeping up with the Joneses</h1>
<p>I’m very, very disappointed to see that, just as in BF2, weapons from expansion packs can be taken back into the main game.&#160; The reason I find this to be a particularly bad decision is that it potentially puts vanilla* players at a disadvantage.&#160; Some people will say, &quot;guns are sideways upgrades&quot;, but really, it&#8217;s not true.&#160; Unless each gun is identical, there&#8217;s no such thing as perfect balance in games.&#160; All it takes is one overpowered weapon to make it a &quot;keeping up with the Joneses&quot; experience.&#160; </p>
<p>If the content pack contains weapons that are very strong or particularly useful in common situations, players will have a choice: buy the expansion pack and have that option, or watch the playing field become skewed in favour of those who pay more. </p>
<p>Moreover, cynics among us (i.e. me) see this as the perfect vehicle for developers to drive revenue by deliberately adding must-have content to expansion packs.</p>
<p><span id="more-649"></span><br />
<h1>A concrete example from BF2: The G36-E</h1>
<p>If you think I&#8217;m talking nonsense or over-exaggerating, DICE has previous in this area.&#160; </p>
<p><a href="http://defragdev.com/blog/images/2011/12/image1.png"><img style="margin: 10px 0px; display: inline" title="image" alt="image" src="http://defragdev.com/blog/images/2011/12/image_thumb1.png" width="515" height="136" /></a></p>
<p>In BF2:Special Forces, the <a href="http://battlefield.wikia.com/wiki/G36E">G36-E</a> was the ultimate &quot;noob&quot; gun in that it didn&#8217;t require any practice to wield effectively.&#160; It had a fast fire rate, high damage, low deviation, limited recoil, great iron sights and could be used on the move.&#160; For the average player, it was a massive upgrade.&#160; Normally this would be a problem with limited scope (i.e. the expansion pack would be unbalanced), but the G36-E was also usable in vanilla BF2 <strong><a href="http://answers.yahoo.com/question/index?qid=20091011111139AAsqICe">if you bought the BF2:SF expansion pack</a></strong>.&#160; Suddenly, lots of players were running around with an uber-gun that was not unlockable to all players.</p>
<p>Compared to the stock medic guns, it was a cinch to use.&#160; Like many players, I had it but refused to use it as it just wasn’t fun or challenging enough.&#160; If Johnny Random had it and wanted to use it in BF2, I was fine with that as it was a poor developer decision &#8212; don’t hate the player, hate the game etc.&#160; Before anyone cries “butthurt newbie”, I stuck to my (stock) guns and still maintained a relatively <a href="http://bf2s.com/player/46934876/">high ratio with assault rifles</a> using the M16 &amp; AK on vehicle servers.&#160; It was certainly possible to use guns like the M16A2, but they required much more practice to use effectively, as each had its own nuances.</p>
<p>Anyway, the crux of the matter is that the G36-E was patently unbalanced and only available to those who paid, yet DICE never fixed it.&#160; The same thing will inevitably happen again at some stage in BF3, whether it is intended or not.</p>
<h1>My question</h1>
<p>In short, does nobody else see anything wrong with<strong> </strong>watching the game you’ve paid for potentially becoming more and more unbalanced as time goes on <strong>unless you’re willing to pay money to keep up</strong>?&#160; </p>
<p>Unless folk actually recognise the problem and start calling bullshit, this sort of design decision will continue to find its way into games.&#160; DICE is not alone in making this choice (Valve has TF2 gameplay items that never drop – you have to pay for them), and it’s going to become far more prevalent as more and more games transition towards the game as a service / free to play models (or somewhere in between).</p>
<p>*vanilla as in players who haven’t purchased the expansion pack.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=649</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Since when was it in vogue&#8230;</title>
		<link>http://defragdev.com/blog/?p=646</link>
		<comments>http://defragdev.com/blog/?p=646#comments</comments>
		<pubDate>Sun, 04 Dec 2011 02:20:07 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=646</guid>
		<description><![CDATA[… to make aspects of your game totally totally and utterly unbalanced when new players are in the mix?&#160; I realise that people are OCD and like collecting shit, but has it really come to this? I say this because &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=646">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>… to make aspects of your game totally totally and utterly unbalanced when new players are in the mix?&#160; I realise that people are OCD and like collecting shit, but has it <em>really</em> come to this? </p>
<p>I say this because I’ve finally had the time / hardware upgrade to allow me to play BF3, and what do I find?&#160; Every bugger has guns and vehicle perks except me.&#160; In some cases this is not so bad (e.g. I can do just fine without heavy barrel and minor <em>options</em> like that) but in other cases it renders the game unplayable for the noobs.&#160; E.g. I get in a chopper and get shot down instantly, as I don’t have any countermeasures.&#160; The best I can do is wait for a friend to come online who already has chopper perks so I can piggy back off them.&#160; </p>
<p>Similarly, folk in jets have perks like air radar so they can find me easily.&#160; Tankers get various perks like coax machine gun &amp; smoke.&#160; </p>
<p>In my opinion, everyone should start with the key class/vehicle items (defibs, flares etc.) and anything beyond that should be a sideways option.&#160; By sideways, I mean that you already have a default set of perks/tech (such as smoke in the tank), and additional perks give you <em>options </em>for certain situations, not concrete <em>advantages</em>.&#160; As far as I’m aware, there’s no disadvantage to having flares (as opposed to nothing).&#160; </p>
<p>I don’t get it.&#160; It’s just as … weird as starting with no defibs in BC2 – you couldn’t actually be a medic until you’d played for a while.&#160; Games are naturally weighted in favour of experienced players, as they have map / weapon / game knowledge that new players lack.&#160; By design, this compounds matters.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=646</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gigabyte GeForce GTX 560 Ti OC&#8211;Avoid</title>
		<link>http://defragdev.com/blog/?p=642</link>
		<comments>http://defragdev.com/blog/?p=642#comments</comments>
		<pubDate>Thu, 01 Dec 2011 02:34:45 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=642</guid>
		<description><![CDATA[This card, amongst various other factory overclocked GTX 560 Tis are causing problems for lots of people.&#160; There are various 560 Ti cards that have the OC postfix which stands for “Overclocked”, but the Gigabyte one seems to be the &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=642">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.co.uk/products/catalog?hl=en&amp;safe=off&amp;q=gigabyte+geforce+gtx+560ti+oc&amp;gs_upl=336l603l1l704l3l1l0l1l1l0l95l95l1l2l0&amp;bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&amp;biw=1920&amp;bih=1096&amp;um=1&amp;ie=UTF-8&amp;tbm=shop&amp;cid=1323606381779257544&amp;sa=X&amp;ei=iOHWTrGKA9Gg8gP8vL3rDQ&amp;ved=0CDIQ8wIwAA">This card</a>, amongst various other factory overclocked GTX 560 Tis are <a href="http://forums.whirlpool.net.au/archive/1639211">causing problems</a> for lots of people.&#160; There are various 560 Ti cards that have the OC postfix which stands for “Overclocked”, but the Gigabyte one seems to be the biggest offender.</p>
<h1>tl;dr summary:</h1>
<p><font color="#ff0000" size="4">Batches of these cards do not run at their advertised speeds with certain DX11 games.&#160; The cards are either stretched beyond their comfort zones, or don’t get enough voltage.</font></p>
<p><font color="#ff0000" size="4">If you have one of the unreliable cards and play the likes of Crysis 2 or Battlefield 3, your game will probably crash with a silent error, or a driver error.</font></p>
<h1>Symptoms</h1>
<p>I bought the Gigabyte card purely for the quiet fans, but I’ve found that it cannot and will not run Battlefield 3 without heavy tweaking.&#160; Without the tweaks BF3 will, without fail, inside 3 (three) minutes:</p>
<ul>
<li>(Silently) Crash to the desktop</li>
<li>Crash with a BF3 stopped working error</li>
<li>Crash with a Windows 7 driver failure (like this)
<p><a href="http://defragdev.com/blog/images/2011/12/bf3_crash.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="bf3_crash" border="0" alt="bf3_crash" src="http://defragdev.com/blog/images/2011/12/bf3_crash_thumb.png" width="244" height="108" /></a></li>
</ul>
<p>I initially raged against BF3 and called DICE all of the names under the sun as BF games have a history of being horrendously buggy on release (I still crash on loading up for the first time quite a lot so…), but this time around the amount of ranting on forums with BF3 <em>and</em> other DX11 games points to faulty hardware.</p>
<h1>‘Fixing’ The Problem</h1>
<p>Gigabyte users only.&#160; Either RMA the card and ask for a different model or…</p>
<p><span id="more-642"></span><br />
<h2>Flash the BIOS</h2>
<p>Firstly, download <a href="http://www.gigabyte.com/support-downloads/utility.aspx?cg=3">Gigabyte’s EasyBoost utility</a>.&#160; Use this tool to flash your Gigabyte 560 Ti OC card to the latest BIOS.&#160; It has an auto select feature, so it shouldn’t be too dangerous.&#160; <strong>Note</strong>: The only visible effect of this is that the voltage will be upped from 1.000V to 1.037V (verifed using <a href="http://event.msi.com/vga/afterburner/download.htm">MSI Afterburner</a>).</p>
<p>Try that for size.&#160; It <em>might</em> be all you need.&#160; Play for a while and see if it’s solid.&#160; Some players have had success with just this one step.&#160; Unfortunately, I still crashed (albeit a slightly less frequently).&#160; With that BIOS ‘fix’, I could play for about 10 minutes before crashing, so it was a step in the right direction.</p>
<h2>Underclock your card to reference 560 Ti levels</h2>
<p>Next, download <a href="http://event.msi.com/vga/afterburner/download.htm">MSI Afterburner</a>.&#160; It’s made by MSI, but supports most card makes including Gigabyte 560 Ti OCs.&#160; Now, use the overclocking functionality to underclock (yes, underclock) your card to the following reference 560 Ti clocks:</p>
<ul>
<li>Core Clock (Mhz) : 822</li>
<li>Shader Clock (Mhz) : 1644</li>
<li>Memory Clock (Mhz) : 2000</li>
</ul>
<p>I also underclocked my memory Clock to 1975 just to be sure.&#160; Mine looks like this now:</p>
<p><a href="http://defragdev.com/blog/images/2011/12/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://defragdev.com/blog/images/2011/12/image_thumb.png" width="205" height="244" /></a></p>
<p>The difference between these reference(ish) clocks and the factory OC clocks amounts to something like a 2-3% performance difference.&#160; BF3 is heavily GPU bound, so instead of getting 40 fps, you’ll probably get ~38 to 39 fps.&#160; Not a big deal.&#160; It runs beautiful on high settings @ 1920 x 1200 for me using these settings, and I’m a FPS nutter.</p>
<p>It’s obviously shite that you should have to mess around with BIOS flashing and underclock something that fails to run at advertised speeds, but with these changes I can run BF3 for hours on end without crashing.&#160; Compared to my record of 3 minutes of gameplay at the beginning of the week, I’ll take that result.</p>
<p>I hope this helps others encountering the same problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=642</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Good support (for once)</title>
		<link>http://defragdev.com/blog/?p=638</link>
		<comments>http://defragdev.com/blog/?p=638#comments</comments>
		<pubDate>Thu, 01 Dec 2011 02:01:00 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=638</guid>
		<description><![CDATA[… kinda.&#160; I recently built a new computer and one of the parts I received was faulty.&#160; The heatsink bracket had a missing thread, so it was impossible to screw the brackets together. I emailed Novatech support, assuming I was &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=638">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>… kinda.&#160; I recently built a new computer and one of the parts I received was faulty.&#160; The heatsink bracket had a missing thread, so it was impossible to screw the brackets together.</p>
<p>I emailed <a href="http://www.novatech.co.uk/">Novatech</a> support, assuming I was in for the full, painful returns rigmarole, but was pleasantly surprised, but also befuddled at the hoop jumping I had to do.&#160; </p>
<h1>The good</h1>
<p>I described the problem and told them exactly which bracket was unusable (the <a href="http://www.guru3d.com/article/zalman-cnps-10x-quiet-and-extreme-review/">Zalman CNPS 10X Quiet</a> comes with three mounting brackets for different motherboard types, and only the LGA 1155 bracket was faulty).&#160; I only had to wait to speak on the phone for about 30 seconds of hold music the second time I phoned.&#160; </p>
<p>Most importantly, I received a new bracket in the post the next day, and you can’t say that about most places.</p>
<p><span id="more-638"></span>
<p>&#160;</p>
<h1>The bad</h1>
<p>This is where I get somewhat bemused.&#160; Despite the excellent eventual result, their website and returns process is set up to bewilder.&#160; Numerous small, niggly problems occurred.&#160; Bear in mind my needs as a customer; nothing I wanted to do was outside the ordinary.&#160; The reason I am posting this is not to take a pop at Novatech.&#160; It’s more that this sort of stuff is common with many of the companies I’ve bought from in the past.&#160; It surely can’t be this hard to get right?</p>
<ol>
<li>No website ticket was maintained, as by sending me a replacement part, the support request was quickly “rejected” so that it was clear I didn’t have to send anything back.&#160; Fine, but…     </li>
<li>As a result, I didn’t have a coherent trail of communication, as I was living outside the happy path.&#160; Some of the exchanges were done via the website, the next via email and the last part by phone.&#160; I always like to double check I’ve given people all of the correct information and also keep up with the status of my request, but I could not do this.     </li>
<li>They asked me to phone up to make sure I gave them the correct delivery address.&#160; Why can I do part of the process online, but not another part?&#160; The part I was asked to phone about was most suitable for a 2 minute email.&#160; Instead, I had to phone up twice (the first time I was put on hold, and wasn’t willing to waste 10 minutes of my lunchtime sighing).&#160; </li>
<li>The member of support staff could not pull up my delivery details or even send it to the same place as my original order.&#160; “I don’t have that information”.&#160; Reading an address over the phone is just asking for it to be taken down incorrectly (which it was – thankfully it was still good enough to get through).      </li>
<li>Since the member of support staff hadn’t read my email notes / support thread, they tried to tell me that they were going to send a courier to pick up the package.&#160; I had to re-explain that Novatech were <em>sending me a bracket</em>.&#160; It was not an RMA request.      </li>
<li>When I tried to reply to my support email (which it explicitly says you can in the body of the support email reply) with my delivery address, the email bounced.&#160; At least Novatech allegedly allow you to email back; I assume it was a glitch.&#160;
<p><strong>Aside</strong>: I hate it when sites contact me via one communication medium but force me to reply in a roundabout way.&#160; Seriously, companies.&#160; Balls to “noreply” email addresses – even if you have no automated process for tying up threads of communication, just divert the emails to customer support representatives and let them marry up the information manually.&#160; It should be as easy as possible for the customer, and the information should be maintained in a coherent, chronological thread for both employees and customers to browse.      </li>
<li>The reference number in the returns email title / body was no use.&#160; The woman on the other end asked, “Don’t you have one that starts with an R?”&#160; If the returns number in the email is not the correct one I have to quote, why are you sending it to me?&#160; Odd!     </li>
<li>When I received the replacement part, it was in a box for a 2.5” drive enclosure.&#160; I’m fine with that normally, use any box you like!&#160; However, it had taped edges that read “<strong>DO NOT OPEN IF PARTS ARE INCORRECT</strong>”.&#160; How can I tell the parts are incorrect if it’s in a different box?&#160; I opened it anyway.</li>
</ol>
<h1>Ultimately…</h1>
<p>For a relatively simple request, I encountered several problems / inconveniences.&#160; The bottom line is that despite the eventual good result, I am a touch wary of using Novatech again for anything more complicated / expensive.&#160; If a PC part failed on a built system, I wouldn’t fancy being passed around their support system and having to constantly re-explain myself.</p>
<p>Moreover, I never fail to be astounded by these sorts of interactions I have with companies.&#160; It would drive me mad to live with that kind of chaos on a day to day basis.</p>
<p>The positive thing is that at least, despite the problems I had, Novatech obviously do care about sorting out customer problems.&#160; I didn’t have to send anything back and do a full RMA cycle, and the parts reached me very quickly.&#160; If they could iron out some of these niggles, they’d be highly recommendable.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=638</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Valve&#8217;s response to being hacked</title>
		<link>http://defragdev.com/blog/?p=636</link>
		<comments>http://defragdev.com/blog/?p=636#comments</comments>
		<pubDate>Fri, 11 Nov 2011 22:24:33 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[misc]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=636</guid>
		<description><![CDATA[… was very, very disappointing.&#160; I’m somewhat befuddled by the extremely low key response to the incident.&#160; Visibility On logging into the steam client this evening, there is no mention of the breach.&#160; I’ve seen a few people on the &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=636">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>… was very, very disappointing.&#160; I’m somewhat befuddled by the extremely low key response to the incident.&#160; </p>
<h2>Visibility</h2>
<p>On logging into the steam client this evening, there is no mention of the breach.&#160; I’ve seen a few people on the forum disagreeing with my assertion, so I can only assume their announcements strategy is bugged or flawed.&#160; I have announcements turned off, but in this case, the announcement should be prominently displayed.&#160; Being told you may have had your credit card / password details stolen is <em>not</em> something I ever want to opt-out of.</p>
<p>There is no mention on the steam website.</p>
<p>There is no mention on the steam forums except for a tiny security announcement across the top of each individual forum.&#160; It is tucked away out of sight – it’s not splashed across the main index or anything of that ilk.&#160; I was asked to change my password when I tried to log in; that is all.&#160; No reason was provided as to why I had to do this, either before or after.</p>
<p>Finally, I didn&#8217;t receive an email about it. Emails were only sent to those registered on the forums.&#160; </p>
<h2>Breached</h2>
<p>A company’s security is only as strong as its weakest link, and once inside a machine, it is hard to say where an attack started and ended &#8212; particularly when you take human factors into account.&#160; Not to be mean to Gabe, but Gabe’s HL2 fan site forum account was hacked years ago and they found his password was “gaben”.&#160; Nobody is perfect, even when they’re taking preventative measures.</p>
<p>Even if the machine is totally isolated from the rest of Valve’s network, all it takes is one sloppy admin to re-use a password elsewhere, and you have major problems.&#160; </p>
<p>History tells us that companies often cling to information when something goes wrong, and that what is eventually admitted (either due to information control in the early moments of the investigation, ignorance or both) can be far worse than the initial assessment.&#160; In a situation like this, I believe that the only safe thing to do is to warn all of your customers about the potential breach so that they can take preventative measures.</p>
<p>Furthermore, as it happens, I do have a forum account, but it was tied to an old email address.&#160; Who’s to say that my steam account username &amp; password don’t match my forum username &amp; password?&#160; It is a common thing to do (note: I didn’t, but it wasn’t far off as, <em>like most people</em>, I am forgetful and a touch disorganised).</p>
<p>In my opinion, there should be a general email going out to <b>all</b> steam customers via their login emails, plus unavoidable notifications on the steam client, website &amp; forums.</p>
<p>So how did I find out?&#160; <a href="http://www.rockpapershotgun.com/">http://www.rockpapershotgun.com/</a> was the messenger for me, not Valve itself.&#160; Perhaps I am the exception, but I somehow doubt it.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=636</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity3d &#8211; Profiling calls to Destroy</title>
		<link>http://defragdev.com/blog/?p=633</link>
		<comments>http://defragdev.com/blog/?p=633#comments</comments>
		<pubDate>Wed, 31 Aug 2011 16:39:01 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Unity3d]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=633</guid>
		<description><![CDATA[Destroy All … Things I’ve recently been investigating some performance problems in our Unity3d app.&#160; In one specific instance (running full screen on a rubbish laptop), there were numerous large performance spikes caused by the nebulous-sounding “Destroy”.&#160; After prodding a &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=633">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h2>Destroy All … Things</h2>
<p>I’ve recently been investigating some performance problems in our Unity3d app.&#160; In one specific instance (running full screen on a rubbish laptop), there were numerous large performance spikes caused by the nebulous-sounding “Destroy”.&#160; After prodding a little bit, Destroy is related to calling <a href="http://unity3d.com/support/documentation/ScriptReference/Object.Destroy.html">GameObject.Destroy()</a>.</p>
<p>Unfortunately, Unity3d’s profiler won’t give you any information related to what types of objects are being destroyed, and wrapping your GameObject.Destroy calls in profiler sections doesn’t help, as Unity3d defers the work for later in the frame (so the methods return nigh-on immediately).&#160; As such, you get told “Destroy is taking x ms this frame”, and that’s about it.</p>
<h2>Finding the culprits with the profiler</h2>
<p>I managed to work around this limitation by (temporarily) changing all GameObject.Destroy() method calls to <a href="http://unity3d.com/support/documentation/ScriptReference/Object.DestroyImmediate.html">GameObject.DestroyImmediate()</a> then wrapping the calls in <a href="http://unity3d.com/support/documentation/ScriptReference/Profiler.BeginSample.html">Profiler.BeginSample()</a> / Profiler.EndSample() pairs.</p>
<p><strong>Note:</strong> If you access your unity instances in the same frame after calling destroy, this probably won’t work for you.</p>
<p>It was then possible to see which resources were doing the damage on the laptop.&#160; All of our resource cleanup code was in one place, so it was trivial to do.</p>
<p>The temporarily instrumented code ended up looking something like this, and immediately let us know the culprits.&#160; Note this code is just a simplified mockup, but it should give you the gist of the idea:</p>
<blockquote><p><font size="2" face="Consolas">// centralised resource cleanup makes profiling simple       <br />private void CleanupResources&lt;TResource&gt;()        <br />{        <br />&#160;&#160;&#160; Profiler.BeginSample(&quot;Destroy: &quot; + typeof(TResource).Name);        <br />&#160;&#160;&#160; IEnumerable&lt;TResource&gt; resources = FindResourceOfType(typeof(TResource));        <br />&#160;&#160;&#160; foreach(var resource in resources)        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; resource.Dispose();        <br />&#160;&#160;&#160; }        <br />&#160;&#160;&#160; Profiler.EndSample();&#160;&#160;&#160; <br />}</font></p>
<p><font size="2" face="Consolas">//&#8230; and each Resource type inherits from a common base class, implementing IDisposable.       <br />public abstract class Resource : IDisposable        <br />{        <br />&#160;&#160;&#160; protected abstract void CleanupUnityResources();        <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; public void Dispose()        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; CleanupUnityResources();        <br />&#160;&#160;&#160; }        <br />}</font></p>
<p><font size="2" face="Consolas">public class SomeResource : Resource       <br />{        <br />&#160;&#160;&#160; private Mesh m_unityMesh; // gets set when resource is locked in        <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; protected override void CleanupUnityResources()        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // GameObject.Destroy(m_unityMesh);        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; GameObject.DestroyImmediately(m_unityMesh);        <br />&#160;&#160;&#160; }        <br />}</font></p>
<p><span style="font-family: consolas"></span></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=633</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity3d&#8211;Threadpool Exceptions</title>
		<link>http://defragdev.com/blog/?p=632</link>
		<comments>http://defragdev.com/blog/?p=632#comments</comments>
		<pubDate>Sat, 27 Aug 2011 15:11:48 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[gotchas]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Unity3d]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=632</guid>
		<description><![CDATA[A quickie, but something to be very wary of.&#160; I’ve been using Unity3d of late (I recommend it – it’s a very opinionated and sometimes quirky bit of software, but it generally works well) and I was recently tasked to &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=632">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>A quickie, but something to be <em>very</em> wary of.&#160; I’ve been using Unity3d of late (I recommend it – it’s a very opinionated and sometimes quirky bit of software, but it generally works well) and I was recently tasked to parallelise some CPU intensive work.&#160; </p>
<p>I decided, quite reasonably, to use the built-in <a href="http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx">ThreadPool</a> rather than doing my own explicit management of threads, mainly because the work we’re parallelising is sporadic in nature, and it’s easier to use the ThreadPool as a quick first implementation.&#160; So far, so good.&#160; Everything was going swimmingly, and it appeared to work as advertised.&#160; In fact, the main implementation took less than a day.</p>
<p>Most .NET developers who are familiar with doing threading with the ThreadPool will know that, post .NET 1.1, if an unhandled exception occurs on a ThreadPool thread, the default behaviour of the CLR runtime is to <a href="http://msdn.microsoft.com/en-us/library/ms228965.aspx">kill the application</a>.&#160; This makes total sense, as you can no longer guarantee a program’s consistency once an unhandled exception occurs.&#160; </p>
<p>To cut a long story short, I spent about three days debugging a very subtle bug with a 1 in 20 reproduction rate (oh threading, how I love thee).&#160; Some methods were running and never returning a result, yet no exceptions were reported.&#160; </p>
<p>Eventually I reached a point where I’d covered nearly everything in my code and was staring at a <a href="http://www.codinghorror.com/blog/2008/03/the-first-rule-of-programming-its-always-your-fault.html">Select Is Broken</a> situation (in that Unity3d had to be doing something weird).</p>
<p><strong>Unity3d silently eats ThreadPool exceptions!</strong>&#160; I proved this by immediately throwing an exception in my worker method and looking at the Unity3d editor for any warnings of exceptions – none was reported (at the very least, they should be sending these exceptions to the editor).&#160; </p>
<p>I then wrapped my worker code in a try catch and, when I finally got the 1 in 20 case to occur, sure enough, there was an exception that was killing my application’s consistency.&#160; So yes, I <em>did</em> have a threading bug in my application code, but Unity3d’s cheerful gobbling of exceptions meant the issue was hidden from me.</p>
<p>I’ve <a href="http://fogbugz.unity3d.com/default.asp?416782_1n7rsv4g9vrudomi">bugged the issue</a>, so hopefully it’ll get fixed in future.</p>
<p><strong>Note:</strong> To the people who say “you should be handling those exceptions in the first place”, I would say, “not during development”. When developing, I generally <em>want</em> my programs to die horribly when something goes wrong, and that is the expected behaviour for the .NET ThreadPool.&#160; Unhandled exceptions make it clear that there’s a problem and it means the problem must be fixed.</p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=632</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MS Wheel Mouse Optical (WMO 1.1)</title>
		<link>http://defragdev.com/blog/?p=631</link>
		<comments>http://defragdev.com/blog/?p=631#comments</comments>
		<pubDate>Fri, 15 Jul 2011 04:54:59 +0000</pubDate>
		<dc:creator>Mark Simpson</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[misc]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[angle snapping]]></category>
		<category><![CDATA[desk]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[mouse pad]]></category>
		<category><![CDATA[sensitivity]]></category>
		<category><![CDATA[WMO]]></category>

		<guid isPermaLink="false">http://defragdev.com/blog/?p=631</guid>
		<description><![CDATA[I’m an addict As a first person shooter (FPS) addict, I play a fair amount shitload of games.&#160; I racked up a god-awful number of hours in Team Fortress Classic (I would conservatively estimate over 3000, on account of the &#8230;<p class="read-more"><a href="http://defragdev.com/blog/?p=631">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h2>I’m an addict</h2>
<p>As a first person shooter (FPS) addict, I play a <strike>fair amount</strike> shitload of games.&#160; I racked up a god-awful number of hours in Team Fortress Classic (I would conservatively estimate over 3000, on account of the fact I played it on and off for several years), 1400+ of Battlefield 2 and now 1000+ of Left 4 Dead.&#160; I average ~1 hour a day.&#160; I like to tell myself it’s a small time sink and I’m not wasting my life.</p>
<p>In that time I’ve gone through countless mice, mouse pads and a few desks, too.&#160; If you <strike>waste</strike> spend an inordinately large amount of time doing something, it’s worth making sure that your time-wasting is enjoyable as possible.&#160; I recently bought a new mouse.&#160; Here is some <em>highly interesting*</em> discourse for mouse enthusiasts.&#160; </p>
<p>This post covers choosing a mouse, setting it up and then rejoicing in shooting pixels more accurately.</p>
<p>Everyone else: <strong>I am warning you.&#160; Look away now</strong>.</p>
<p><em>*may not be true</em></p>
<h2>Caveat Emptor</h2>
<p>I’ve been gleefully using MX5xx series mice for the best part of a decade.&#160; The MX518 is a fine, spangly beast.&#160; It draws admiring glances from neighbours and also dazzles helicopter pilots with its vajazzled charms.&#160; It looks a bit like this:</p>
<p><strong>An MX518, yesterday.</strong></p>
<p><a href="http://defragdev.com/blog/images/2011/07/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://defragdev.com/blog/images/2011/07/image_thumb.png" width="224" height="224" /></a></p>
<p>However, I recently stumbled across the ‘feature’ the MX518 has that’s commonly referred to as “angle snapping”, “prediction” or “correction”.&#160; What is angle snapping?&#160; Well, at the hardware or driver level, if your movements stay under some arbitrary threshold, the mouse input is subtly altered to keep your ‘lines’ straight.&#160; </p>
<p>Here’s the effect in action.&#160; A common test is to draw some horizontal and vertical lines in MS Paint.&#160; Notice that my MX518-created lines are eerily straight for large sections.&#160; If you’re pixel aiming at someone’s head with a rifle, this is not helpful.</p>
<p><a href="http://defragdev.com/blog/images/2011/07/mouse_lines.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="mouse_lines" border="0" alt="mouse_lines" src="http://defragdev.com/blog/images/2011/07/mouse_lines_thumb.png" width="244" height="244" /></a></p>
<p><strong>Note:</strong> This is a feature that is found in several mice, including gaming mice.&#160; In some cases (such as the Logitech G series and the Razer Death Adder), you can disable the “feature” using the driver.&#160; As that bloke off Art Attack used to say, “Try it yourself.”</p>
<h2>Time for a Change</h2>
<p>The MX518 I use at work (I have two) recently had a wheely bad fault and, having discovered the most-likely-non-issue that is angle snapping, I decided to unnecessarily obsess over it and buy something else.&#160; </p>
<p>Because that will make me a Quake Live Pro, of course… (oh and sometimes it’s fun to change things)</p>
<p><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://defragdev.com/blog/images/2011/07/wlEmoticon-smile.png" /></p>
<h2>Things to be aware of</h2>
<p>Before I delve into specifics, here’s some guidelines for purchasing a new gaming mouse.&#160; </p>
<h3>Laser Mice Suck</h3>
<p>Firstly, steer well clear of Laser Mice &#8212; their tracking sucks. They&#8217;re expensive. Even people who are endorsed by these brands <a href="http://news.fatal1ty.com/fatal1ty-blog/fatal1ty-frags-blog-3rd-frag-mouse-sensitivity/">don’t use these mice</a> – laser has not yet caught up with the best optical has to offer, so don’t be fooled by the notion that newer is better.</p>
<h3>DPI is overrated</h3>
<p>All of this DPI nonsense seems to have little to do with mouse performance and tracking characteristics. All a higher DPI count seems to do is multiply your sensitivity by a factor using hardware and/or a mouse driver (much the same as turning up your sensitivity in windows and/or ingame). </p>
<p>Older mice with lower DPI can potentially track better than newer laser mice with 5600000000000 bajillion DPI.&#160; In short, it’s largely a marketing gimmick.</p>
<p>Most of the professional quake players <a href="http://www.esreality.com/index.php?a=post&amp;id=2009534">use 400 or 800 DPI</a> coupled with a low sensitivity, so why would you ever need a 5600 DPI mouse?&#160; Answers on a postcard.</p>
<h3>Mouse Drivers Aren’t Always Needed</h3>
<p>If your mouse is perfectly serviceable without installing drivers, try the mouse both with and without the drivers.&#160; I’ve had mice that worked well both with and without.&#160; I used the setpoint drivers for my MX518 solely to turn off the silly DPI switching buttons, but I’m not using any drivers with my new mouse.</p>
<h3>Kill Windows Mouse Acceleration</h3>
<p>Like <a href="http://www.youtube.com/watch?v=D2gqThOfHu4">Poison Sockets</a>, Windows Mouse Acceleration is a hazard to your health.&#160; It’s terrible.&#160; <a href="http://www.techpowerup.com/downloads/763/CPL_Mouse_Fix.html">Switch it off</a> using the <a href="http://www.techpowerup.com/downloads/763/CPL_Mouse_Fix.html">CPL mouse fix</a>.&#160; This version works with Windows 7 64 bit – I can’t guarantee anything else, but there’s another version that works with XP floating around.</p>
<p>Mouse acceleration means that physical distance you move the mouse isn’t the sole factor for your aiming.&#160; If you use it, it should be a conscious decision, not something foisted upon you by windows in a ham-fisted fashion.&#160; </p>
<p>If you insist on using mouse acceleration, either use the driver settings for your mouse or, even better, set up acceleration using in-game settings (newish half life and quake-based engine games offer customisable acceleration settings).</p>
<h3>Negative Acceleration</h3>
<p><a href="http://www.esreality.com/index.php?a=longpost&amp;id=1265679&amp;page=4">Even with today’s space-age technology and fretful nerdery, mouse tracking is not yet perfect.</a> </p>
<p>Most optical gaming mice on the market today can handle extreme speeds without losing their minds (as in, it’s almost humanly impossible to totally totally baffle the sensor while furiously turning around).&#160; However, if you play with a low sensitivity and use a large mouse mat (I’m talking at least &gt; 20cm of mouse movement to turn 360 degrees) there is the possibility of suffering from negative acceleration.&#160; </p>
<p>Negative acceleration occurs when the sensor continues to recognise input, but cannot accurately track the distance covered.&#160; The faster you move the mouse, the less distance is registered.&#160; This manifests itself in fast movements (such as flicking the mouse to turn around) not turning you as much as if you’d performed the movement slowly.&#160; </p>
<p>The optimum mouse setting is one where physically moving the mouse the same distance maps to the same logical game input.&#160; Negative acceleration erodes this consistency.</p>
<p><a href="http://www.esreality.com/index.php?a=longpost&amp;id=1265679&amp;page=4">The ESRreality MouseScore</a> offers the clearest explanation. </p>
<p>It should be noted that, but for all the worst offenders, this is only a concern for low sensitivity gamers, and certain mice have workarounds available (<a href="http://www.overclock.net/mice/596276-changing-usb-polling-rate-1000hz-lower.html">such as increasing the USB polling rate</a> via Windows).&#160; </p>
<h2>The Contenders</h2>
<p>After researching the pitfalls, I did a cursory bit of <a href="http://www.esreality.com/index.php?a=post&amp;id=1836580">reading around</a> and discovered that roughly half of the best competitive Quake Live players use (or used) one of the following (crappy-looking) mice:</p>
<ul>
<li><a href="http://www.microsoft.com/uk/hardware/mouseandkeyboard/productdetails.aspx?pid=008">Microsoft Wheel Mouse Optical</a> (commonly abbreviated to <strong>WMO</strong> or <strong>WMO 1.1</strong>), </li>
<li><a href="http://www.microsoft.com/uk/hardware/oempartners/ProductDetails.aspx?pid=018">IntelliMouse Optical</a> (<strong>IMO</strong>) </li>
<li><a href="http://www.microsoft.com/hardware/en-us/p/intellimouse-explorer-3.0">IntelliMouse Explorer 3.0</a> (<strong>IME 3.0</strong>).&#160; </li>
</ul>
<p>None of these mice is billed as a gaming mouse and they’re all dirt cheap.&#160; Bizarrely, Microsoft don’t really talk up this fact or try to cash in.&#160; They’re like a trio of unassuming murderers living next door.&#160; Strange.</p>
<p>All 3 feature the same optical sensor.&#160; The differences are just the shape and the available buttons.&#160; The <strong>WMO</strong> is ambidextrous; the <strong>IMO</strong> is the same shape but has some extra side buttons.&#160; The <strong>IME 3.0</strong> is also a very similar shape, but is right-handed and has the extra buttons.&#160; Gamers tend to favour the <strong>WMO</strong> or the <strong>IME 3.0</strong>.&#160; </p>
<p>The negatives of each of these are all similar.&#160; Firstly, without altering the USB polling rate, the sensor performs worse than the likes of the Death Adder.&#160; Secondly, the wheel has a mind of its own.&#160; Slamming the mouse down can force a button press.&#160; For this reason, many players unbind the wheel and mouse 3 and rely on keyboard binds.</p>
<p>You can find the <strong>WMO</strong> or <strong>IMO</strong> for £8 to £15 and the <strong>IME 3.0 </strong>for £20.</p>
<p>The rest of the mice like the Death Adder all have strong reviews, but furtively slither into the £40+ price bracket.&#160; As a Scottish miser, £40+ is a lot of clams for a pointy thing, so I baulked at the prospect.</p>
<p>Anyway, I chose…</p>
<h2>The Wheel Mouse Optical 1.1</h2>
<p>After drinking in the details posted in various nerd forums, I plumped for the WMO 1.1 at <a href="http://www.maplin.co.uk/microsoft-wheel-mouse-optical-33021">£14.99 from Maplins</a> (product code: D66-00074) ordered via Amazon.&#160; </p>
<p>As far as I can tell, there’s no problem with stock or versions. If you get one that was manufactured in the last 90 years, it ought to be a version with the sensor that’s good for gaming.</p>
<p><strong>The WMO 1.1</strong></p>
<p><a href="http://defragdev.com/blog/images/2011/07/image1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://defragdev.com/blog/images/2011/07/image_thumb1.png" width="244" height="244" /></a></p>
<p>My first port of call was to uninstall my old logitech setpoint mouse drivers.&#160; I then plugged in the new mouse and cancelled the intellipoint driver installation process.&#160; There’s no need to install drivers for this mouse, so it’s one less thing to worry about.</p>
<p>Next, I installed <a href="http://www.techpowerup.com/downloads/763/CPL_Mouse_Fix.html">the CPL mouse fix</a> to remove windows mouse acceleration. </p>
<p>Finally, to minimise the chances of encountering negative acceleration, I overclocked my USB polling rate to 500hz.&#160; This was quite fiddly to do, but beyond a few reboots and Avira complaining about phantom viruses, it wasn’t a big deal.</p>
<p>Overclocking the USB polling rate increases the ‘perfect control’ region from 1 m/s up to 1.5 m/s, so unless you <em>really</em> throw it around with a miniscule sensitivity, negative acceleration shouldn’t be a concern.&#160; </p>
<p>A quick test showed everything was in order.</p>
<h2>Desk and Mousepad</h2>
<p>As an avid PC headbanger, I’ve always favoured large desks.&#160; In fact, I don’t understand why many PC owners fret over mice and monitors but often overlook the cornerstone of the PC experience: The desk and the chair.</p>
<p>I’m using a <a href="http://www.ukofficedirect.co.uk/influx-curva-1200-desk-wave-prd_154850.aspx">Influx Curva 1200 Right-Handed Wave Desk</a> coupled with a <a href="http://shop.steelseries.com/index.php/surfaces/steelseries-qck-plus.html">Steelseries QcK+</a> mouse pad.&#160; Both are fantastic products.&#160; The Curva is solidly constructed, is a perfect height and affords me plenty of room.</p>
<p>I’ve got a 24” + 20” monitor dual screen setup, and there’s still room for a 45cm mouse mat and a few other bits and pieces.&#160; At £150 it’s not a budget buy, but given how much I use my PC, I think it’s well worth it.</p>
<p><a href="http://defragdev.com/blog/images/2011/07/image2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://defragdev.com/blog/images/2011/07/image_thumb2.png" width="244" height="244" /></a> + <a href="http://defragdev.com/blog/images/2011/07/image3.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://defragdev.com/blog/images/2011/07/image_thumb3.png" width="244" height="244" /></a></p>
<p>Regarding the size of the mousepad: I used to think anything over 30 cm was overkill, but having a 45 cm pad makes a large difference.&#160; It covers such a large part of my desk that I no longer have to worry about positioning the pad – it’s <em>everywhere</em>, so I can get comfy.&#160; A decade ago, my TFC clanmates used to constantly mock me for <a href="http://defrag.urbanup.com/87179">my OCD style mouse mat positioning</a>.&#160; The words still ring in my ears.&#160; I cried sometimes, but no longer.&#160; </p>
<p>Compared to the standard size QcK, it also affords me the luxury of using a lower mouse sensitivity.&#160; </p>
<h2>Sensitivity</h2>
<p>I’m an arm player in that I use my forearm to move the mouse as opposed to my wrist/fingers.&#160; I used to be a high sensitivity wrist/fingers player when I had a small desk.&#160; I prefer using my arm; it’s more precise and I suffer from fewer PC-related mousing strains.</p>
<p>One sweep across the entire pad turns about 400 degrees (so probably about ~40cm for a 360 degree turn).&#160; Because of its weight, this was slightly cumbersome with the MX518. The WMO is much lighter and glides easily.</p>
<p>Generally speaking, the lower your mouse sensitivity, the more precise you can be for picking out enemies.&#160; A low mouse sensitivity is not a panacea, nor will it make you, me or anyone else a PRO GAMER!1, but I’ve switched around over the years and I keep gravitating towards lower and lower sensitivities.&#160; </p>
<p>Also, once you’re familiar with a game, the need to sharply turn around often abates as you react less and predict more.&#160; </p>
<h2>Testing and Conclusion</h2>
<p>I’m impressed with the WMO.&#160; For £14.99 and a bit of tinkering, it’s a great mouse and, with my settings, the tracking seems to be borderline flawless.</p>
<p>It’s definitely not as grippy as the MX5XX series so if you’re a sweaty git, you may find it becomes slippery due to the lack of a rubbery finish.&#160; Thankfully, I don’t sweat at all when sitting at the PC so this is not an issue for me.&#160; </p>
<p>Also, the shape is perfectly fine; I prefer the shape of the MX5XX but this is better than adequate.&#160; Everyone will have their own preferences when it comes to shape.</p>
<p>The tracking is borderline flawless and its lightness means it glides much more easily than other more tubby mice.</p>
<p>The only real downsides I’ve encountered were the phantom clicking mouse wheel issue and having to mess around with USB polling rates.&#160; If you can live with these two issues, then I’d strongly recommend trying it out.&#160; For £15, you won’t do much better.</p>
<p>Yes, I am a nerd.</p>
<h2>Additional References</h2>
<p><a href="http://forums.majorleaguegaming.com/topic/165005-fragtalitys-epic-gaming-mice-guide-for-pc-shooting-games/">Fragtality’s epic gaming mice guide</a></p>
]]></content:encoded>
			<wfw:commentRss>http://defragdev.com/blog/?feed=rss2&#038;p=631</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

