John McDowall

20 November 2015

Avoiding the Mega-Controller

(A demo app accompanying this post is available, with reusable parts easily extractable.) If you've ever written an iOS app, you'll know just how easy it is for your...

1 October 2015

Handling MKMapView Annotation Pins on the Same Coordinate with Swift

This is an updated version of a post I made in early 2013 that proved popular. This update reworks the solution from Objective-C to Swift 2.0. The code inline below is...

19 March 2015

Break. It. Up! – Private Method Access Modifiers as Code Smells

There's a couple of anti-patterns that I've noticed in my own code. Private methods are a code smell Private methods are not inherently bad, but they are a sign that you...

20 February 2014

Bluetooth Low Energy, and its application in iOS

What is it? Bluetooth Low Energy (BLE) is a technology for allowing devices to communicate in a way that is highly optimized for conserving battery power. BLE devices...

18 September 2013

iOS 7 SDK: My Favourite Parts-Storm ID Blog Post

Notifications and background downloading Prior to iOS 7, an inactive app is ignorant of notifications sent to the device. With iOS 7, an app can register to be woken when a...

10 January 2013

Handling MKMapView Annotation Pins on the Same Coordinate

There is now an updated version of this post that reworks the solution from Objective-C to Swift 2.0. A component of a project I am working on displays shop locations on a...

6 August 2009

Caching the Result of Arbitrary Function Calls

Here is the approach I took to performing the result of a method call, which is done in a reusable way which may be interesting. Instead of calling my method normally like...

5 August 2009

Selecting Denormalized Child Nodes and Parents From Tree with Linq

Problem: You have a collection of objects.  Each object has a number of children.  You want all the children matching a criteria, AND the parent.  The child...

30 June 2009

Using Expression Trees to Avoid String Literal References

Often a developer will want to mirror the names of properties or methods of a class in some related dynamic resource that needs to bind to named members of the class. This...

7 April 2009

Validate Data for Your Application with ASP.NET MVC, xVal, Castle and a Custom Binder

There are several stages at which you can, and possibly should, validate data inputted to your application.  This post deals with server-side validation of user input before...