I'm Back, and Trying a Ghost in the Cloud

Blogging Again Right then, let’s give this blogging lark another shot, shall we? I’ve had some form of blog online since the summer of 1997 (back when they were called online journals or simply ‘homepages’). For most of that time my web presence was a single unfocussed site containing posts about all manner of things - a mixture of diary style witterings, some technical content, beer reviews, over-excited commentary on shiny new web applications, unabashed ranting, photos of my kids and other assorted gallimaufry. ...

16 April 2014

Matthew Henry Nelson

Proudly presenting a new addition to the family – Mr Matthew Henry Nelson: He arrived at 0624 local time on the morning of Saturday 1st September, and weighed in at 7 pounds 6 ounces. This was 17 days sooner than expected, and his early arrival literally caught his Daddy napping – while Jocelyn was giving birth in York, I was sleeping soundly in a Reading Novotel ahead of the DDD10 conference. Needless to say, when I woke to find eight missed calls, a voicemail, text message, and even posts on my FaceBook wall trying to alert me to Matthew’s imminent arrival, I decided to give the conference a miss and head quickly back up the M1. ...

26 September 2012

Available Again For Contract Work

Are you plagued by bad code smells? Troubled by slow-running database queries and ETL routines? In need of some scalable and maintainable enterprise integration solutions? Look no further! As luck would have it, legendary Leeds-based freelance software developer Ian F. Nelson is now available again for contract opportunities. Fresh from a 42-week stint at the Health and Social Care Information Centre where he played a major part in developing a suite of distributed systems to facilitate the expansion of a national programme to calculate health gains after surgical treatment, Ian Nelson is on the market again, and available now to help your team deliver the system of your dreams! ...

12 March 2012

A Personal Stack Overflow Milestone

In the grand scheme of things, ’tis but a minor achievement, but I was quite chuffed with myself this evening when my Stack Overflow reputation finally reached the 10,000 mark: My girls made me a special “10K” cake to celebrate 🙂 Kudos to Jeff, Joel and the team for creating a site that I have found engaging, entertaining and very useful for the last 3 years and 4 months. ...

4 January 2012

Wacom Bamboo

Almost everyone who has wandered past the various desks that I’ve occupied over the last year has passed comment on my Wacom Bamboo Pen Graphics Tablet. So, let me say a few words about my experiences with that. For the longest time, I had been perfectly content to use various Logitech VX / MX mouses as my secondary input device, occasionally using a Microsoft Arc Mouse (very convenient to carry around in my rucksack). ...

13 September 2011

Schoolboy Error Of The Day

This dumb mistake just cost me an hour spelunking around in the debugger: var status = source.Substring(source.LastIndexOf("/" + 1)); (where source is e.g. “http://foo.com/status/all-is-good“) Fortunately the ramifications were picked up in the acceptance tests, but the root cause wasn’t at all obvious from such a high level. Lesson for the day – code is never too trivial to warrant unit testing.

17 August 2011

It's A Small World

It’s been a long time since I posted a blog entry in the “genealogy” category (over three years, in fact). I find it to be a hobby that I pursue in fits and starts – periods of all-encompassing obsession followed by long periods of total inactivity. But the old Family Tree has been fleshed out nicely since I last updated you, dear reader. It has also acquired a most surprising and welcome addition. ...

9 April 2011

Entity Framework Week Part 5: Concluding Thoughts

This is the fifth in a series of five posts recounting my experiences using Entity Framework Code-First to replace ADO.NET and stored procedures in a client’s existing application. The introductory post in the series is here. I am lucky to have had the opportunity to spend a time-boxed period playing with Entity Framework Code-First in a real-world scenario, and to get paid for the privilege! I now have a clearer understanding of how it has progressed during the last few years, what its strong points are, and where it still has shortcomings compared to the much more mature NHibernate framework. ...

11 March 2011

Entity Framework Week Part 4: Features and Further Investigations

This is the fourth in a series of five posts recounting my experiences using Entity Framework Code-First to replace ADO.NET and stored procedures in a client’s existing application. The introductory post in the series is here. I didn’t want this series of posts to descend into a point-scoring NHibernate-versus-Entity Framework comparison, but… I now have a basic proof-of-concept up and running, with my client’s nascent application now being powered by Entity Framework Code-First CTP5 rather than a hand-rolled DAL. So, I had some time to consider future functional and non-functional requirements that the team would be asked to develop and support, and investigate how EF would meet the challenge. ...

10 March 2011

Entity Framework Week Part 3: Runtime Issues Encountered

This is the third in a series of five posts recounting my experiences using Entity Framework Code-First to replace ADO.NET and stored procedures in a client’s existing application. The introductory post in the series is here. Having configured and initialized Entity Framework, and tweaked the mappings, by Day 3 I was all set to start consuming my shiny new DbContext implementation from the application code, and actually get some CRUD work done. Not unexpectedly, I hit a few issues along the way… ...

9 March 2011

Entity Framework Week Part 2: Conventions and Fluent Mappings

This is the second in a series of five posts recounting my experiences using Entity Framework Code-First to replace ADO.NET and stored procedures in a client’s existing application. The introductory post in the series is here. As mentioned in yesterday’s post, I was attempting to use Entity Framework Code-First CTP5 to map an existing domain model to an existing database schema. Fortunately the project was in its infancy and there was a high degree of cohesion between the two models. I therefore didn’t anticipate too many difficulties ahead – the occasional naming discrepancy to resolve, and table-per-hierarchy mappings that would need their discriminators specifying – nothing too complicated really. I hoped to make as few changes as possible to either the database schema or domain model. ...

8 March 2011

Entity Framework Week Part 1: Introduction, Configuration and Initialization

In February 2011 I found myself doing some contract development work in a team that was still doing data access using raw ADO.NET and stored procedures. Being the NHibernate fanboy that I am, I naturally attempted to persuade them of the benefits of moving over to NH, even going so far as to develop (in my own time) an NH-powered version of their application. My efforts were partially successful. The team were sold on the idea of using an ORM, but wanted me to develop a second proof of concept using Microsoft ADO.NET Entity Framework rather than NHibernate. This prompted much mirth amongst my FaceBook friends. ...

7 March 2011

Enterprise Integration Anti-Patterns #2 – Shared Assemblies

Having slain the beast that is Shared Database, the next dragon to appear on my Enterprise Integration horizon is Shared Assemblies. That is, the suggestion that Application A can leverage the functionality of Application B by simply adding references to B’s DLLs. After all, this potential for reuse is why we put our code in reusable assemblies in the first place, isn’t it..?! Well, no. Actually we usually break our application apart into assemblies to create a maintainable and testable architecture. An assembly is a coarse-grained unit of encapsulated functionality in that architecture; the fact that it is the smallest deployable unit in the .NET world is not necessarily an indication that we intend or desire our assemblies to be shared with other applications. ...

1 December 2010

NHibernate and Mapping Aggregates

A few days ago a friend emailed me the following question regarding NHibernate mappings for a solution he’s currently developing: “I have an idea entity that has a collection of comment entities and I need to get the comment count for each idea. I made a massive mistake at the beginning by calling idea.Comments.Count (even worse, I did it in the view!), which due to the collection being lazy-loaded caused about 10 database calls so performance was sluggish even with second level cache. I was therefore wondering how you would do it – would you use HQL and use Comments.size or would you do something differently?” ...

25 November 2010

Enterprise Integration Anti-Patterns #1 – The Shared Database

So, I was in the office at a client site, walking back to my desk after grabbing a quick coffee, when a developer on a sister product to my current project grabbed me and asked (I paraphrase somewhat): “Hey, Ian – [my app] needs to retrieve [small piece of data] from [your app], so I’ve stuck a stored proc in [your database], OK?” I felt quite violated. My poor app, what had it done to deserve this despicable treatment? ...

8 November 2010