NDepend

OK, dear readers, today I’d like to talk about tools. Software development isn’t really so different from traditional skilled crafts in that it is important to have an understanding of the tools available to help you create a quality products in the least amount of time possible. For .NET developers, the Visual Studio IDE is usually just the starting point, and most of us will come to rely on some of the tools listed in Scott Hanselman’s famous tools list. Personally, I can’t imagine coding without first installing Refactor Pro, editing text files in anything other than TextPad, or working on a machine that doesn’t have Snag It installed. ...

4 February 2009

.NET Coding Standards

Sometimes, when you join a new team as a .NET developer, the team lead proudly points you in the direction of a Word document or wiki page detailing the team’s house coding standards. In my experience, these documents are invariably: Incomplete. Subjective. Not enforced. Largely copied from the interweb. Obsessed with the trivial (e.g. whitespace) while failing to mention the genuinely useful (e.g. boxing/unboxing, avoiding use of deprecated classes, Dispose pattern, etc). I know this because I’ve been involved in creating such documents in the past 🙂 ...

23 January 2009

SQL Server Point-in-Time Restore

One of the multiple hats that I’m currently wearing for a client is that of SQL Server DBA. In this guise, I have recently fielded a couple of email queries from users concerned about the data recovery options available to them, should application data be inadvertently deleted: “What kind of database backup and restore mechanism is in place for [application]? If someone deletes any data from [application] front end is it possible to restore it? Generally the way to recover data would be to restore the database from a database backup file, however this would restore all data held in the backup and would overwrite any changes made since the time of the backup.” ...

23 January 2009

On 64-bit TFS, Virtualization, and Conchango SCRUM

Earlier this week I picked up a hire car and headed over to deepest Cheshire to install an instance of Team Foundation Server 2008 for a client. Before setting off, I tried to make sure that all the prerequisites were in place – i.e. that there was a suitably-specced server available for use, which was connected to the domain, that all the necessary service accounts were created, and firewall ports opened, etc. ...

23 January 2009

Zero Interest Bug

I started my career in professional software development a decade or so ago by testing and fixing banking code that had fallen victim to the millennium bug. Could the prospect of zero percent interest rates create a similar boom in demand for software developers? From Contractor UK: Interest rates have plummeted from 5% to 2% since early October and are heading lower. Some analysts say 0% is not out of the question. ...

19 December 2008

MSB3247 – Dependent Assembly Conflicts

Earlier today a dev came over to ask me about a compiler warning he was getting when building a .NET solution: MSB3247: Found conflicts between different versions of the same dependent assembly. This is basically telling you that one project or dependency in your solution is referencing one version of an assembly, whilst another project or dependency is trying to reference a different version of the same assembly. Unhelpfully, the message and build output don’t tell you which dependent assembly is causing the problem! ...

4 December 2008

Performance of Loops on Collections

Interesting article from Patrick Smacchia (the NDepend guy) in which he runs some benchmarks on the cost of looping in different ways over different constructs and comes to the conclusion that: “looping on array using for is 5 times cheaper than looping on List<T> using foreach (which I believe, is what we all do)” Well worth a read, although I suspect that in my solutions the bottlenecks will remain the out-of-process calls, i.e. database access and web service calls. Still, a 5x gain is not to be sniffed at. ...

28 November 2008

12 Reasons Why I Love Unit Tests

On my continuing journey through this thrilling world of professional software development, I frequently encounter teams who hold no truck with this crazy new-fangled concept of unit testing. Heck, truth be told, I sometimes come across teams who don’t use source control, but that’s by the bye. In these situations, I try my best to lead by example, continuing to practise TDD on any new code that I cut, and insisting on covering with unit tests any pre-existing code which I have to modify. Sooner or later, this prompts someone to ask why I am doing this (often insinuating that I am wasting my time, and by implication the client’s money). At that point, flustered, I invariably struggle to remember or adequately articulate the many and various ways in which unit testing makes me a better developer. So, consider this blog post a personal aide-mémoire to help me the next time this occurs (as well as being a homage to Jake Shillingford’s second-best song). ...

11 November 2008

A Keyboard Makes A Hell Of A Difference

It occurred to me recently that I’m not getting any younger, and that sitting hunched over a keyboard for a dozen hours a day will probably lead to some form of RSI sooner or later. So I started looking for ways to improve my daily working environment. Unlike John, I can’t afford a Herman Miller chair, and even if I could, I’m a freelancer rather than a telecommuter1 so I would have to regularly carry the chair on the train to client sites, where they would probably ostracise me for being a weirdo who brings his own chair to the office. So I looked for something a little more portable, and decided that perhaps it was finally time for me to try one of those fancy split ergonomic keyboards that I’ve always scoffed at. After reading a few review on Amazon, I plumped for the Microsoft Natural Ergonomic Keyboard 4000. ...

1 August 2008

Database Design – Still Important In These ORM-Obsessed Days

Tobin blogged earlier this week about how quality ORM tools like NHibernate make it easier to code to normalized schemas. Here’s a corollary for you: The use of ORM tools doesn’t absolve the need to maintain good database design principles, and even NHibernate won’t save you from your own stupidity. Following an application upgrade release last night, I’ve spent a disproportionate amount of today trying to debug the following exception, which appeared to originate in an area of the codebase which I personally had heavily modified: ...

29 July 2008

Remember The Milk

In response to a blog post that I’d shared in Google Reader, Jez emailed me to ask: “Do you use RTM? It’s always been one of those web apps that seem really useful, but I’ve never made the leap to actually using it in anger. I suppose you need to adopt it in tandem with the five-point GTD philosophy to get real benefit?” My response: “Yes, I do use RTM, and I love it. I’ve been looking for a decent way of managing my to-do lists effectively for years, and RTM really scratches that itch! I now have the web app permanently open in a Firefox tab, and use “MilkSync” to synchronize with my Pocket PC every half hour. ...

26 June 2008

On the Joys of Object-Relational Mapping

My name is Ian Nelson. I’m a recovering SQL addict. It’s been four weeks since my last stored procedure. One of my reasons for leaving my cosy permanent job and entering the scary cut-throat world of freelancing was to get a broader exposure to different tools, technologies and methodologies, while remaining with my feet planted firmly in the .NET universe. So, when I got offered a position in a team who were using Subversion, Monorail, Ext.JS, NUnit, Oracle and NHibernate, I jumped at the opportunity. ...

9 April 2008

Inside Microsoft SQL Server 2005: The Storage Engine

During 2007, I unexpectedly achieved a long-held ambition by increasing the number of books I regularly read (as opposed to merely buying, then leaving them to languish on the bookcase!). I read plenty of techie books of course, but also made use of local libraries and devoured plenty of books on other subjects, and even found time for some fiction. I think having a young baby in the house was partially responsible for this achievement – not much else to do of an evening any more! ...

5 January 2008

A LINQ Gotcha – First Operator

So, I was using the First operator to return the first item element in a sequence matching a predicate. I expected a null to be returned if the sequence did not contain any matching elements, but found (well, Scott found) that this actually throws an InvalidOperationException. Turns out I should have been using the FirstOrDefault operator instead…

14 December 2007

Software Architect 2007

Last week I had the pleasure of spending a few days in London attending the Software Architect 2007 conference at the Barbican centre. It was a good conference, providing me with some useful and interesting new ideas and food for thought, whilst confirming that our team at Marshalls are generally going about things in “the right way”, which is nice. Looking through my notes, the main themes that kept recurring within the different presentations that I attended were: ...

17 June 2007