The final day of NSConference 2011 saw a particularly hung over Scotty introducing the presenters. The night before (with its sumo wrestling and bucking bronco) certainly took it out on many of the attendees.
Making the New Everyday Things
One person who didn't seem to be affected by the night before was Aral Balkan, who bounded onto stage with the energy and charisma of a young Steve Jobs. Aral presented a few amusing anecdotes about everyday objects – such as doors which proclaim “opens automatically” and then don't, and having to reach outside the window to open a door despite warning against leaning outside the windows. Uniquely, the presentation contained video footage of these kind of issues for everyone to appreciate the irony.
His key point was that many devices are commodities (like coffee), but that there are people willing to pay for more expensive devices (again, like coffee) for a better user experience, which can't be commoditised. He presented a unique view of Maslow's hierarchy of needs, in that an app needs to be functional, then reliable, then usable and finally delightful.
He also emphasised that UI is not the same as Experience Design – you need to think outside the screen. His previous app, 'avit, contained a number of minor features which weren't directly obvious but added to the humanity of the app; the latest is Feathers which allows customised tweets to be posted.
He finished with a warning; that the application's experience is only as good as its weakest link. In the case of the FaceBook version of the corresponding Feathers Visage book, changes to the back-end server broke the API with no chance of being able to change it. The age of features is dead.
He also gave a few tips, such as implementing
-(void)setValue:(id)value forUndefinedKey:(NSString*)key, which by default throws an exception. He also mentioned method swizzling for fun and referenced setting
OBJC_HELP=YES for a bunch of fun runtime debugging options in a Cocoa runtime; most of these are displayed in Tech Note 2124 on the Apple developer website.
Finally, he had a few fun tools on his Github page, including RuntimeBrowser, which enables you to find out the state of hte Objective-C world at runtime both on OSX and also on iOS devices, which he used to implement a MobileSignal for tracking the mobile signal strength as an iPhone moves around. Both of these projects are worth checking out; and certainly, dig into the above technote for information that you can get out of a runtime OSX app.
Serious Core Animation
Drew McCormack talked about what is possible using Core Animation, and highlighted his Mental Case app as being an example of what can be achieved. He listed ten points:
- You can draw vectors with Core Animation; but you have to build a recursive
drawIntoContextcall, akin to the View hierarchy
- (almost) everything is animatable; if there's a keypath to it, you can animate it e.g. marching ants
- Exploit human imperfection; such as gradients to simulate cylinders as in the date picker
- Include physics; instead of just rotating items on the spot, have them come up and out of the screen as they flip over
- Account for light; since core anmiation doesn't implement light sources, fake it with gradients and pre-chosen background images
- Postpone expensive drawing; or fire it off into a background thread/image, and then set the image when it's done on the main thread
- Cache expensive drawing operations
- Complex layouts have simple primitives; e.g. break down into custom methods (like
UITableView) to make it easier to work with the view
- Complex views have their own controllers; this makes it easier to navigate
He has an existing article about some of the thoughts behind the Mental Case app, including code samples referred to during the talk.
Jiva De Voe gave a lot of good advice on marketing, comparing it to the dating game (and also suggesting this is why nerds aren't good at it). Instead of an “if you build it, they will come” philosophy, customers are like relationships which you have to work on (either through mailing lists or other interactive sites) and aiming for a particular customer demographic.
Making Really Annoying iPad Apps
Matt Gemmell gave an entertaining close to proceedings with his top ten what (not) to do, including:
- More is Better; keep puttin' controls on until there's no space left
- Be useless; why provide useful functionality?
- Be a dick; yes, the infamous #dickbar got a mention again
- Do it your way; only support a single (and less common) orientation
- Neck injury; suddenly change the orientation for no reason
- Find not found; no point in letting users get to their data easily
- Layout for pain; make sure that there's unnecessary cruft everywhere that doesn't disappear
- Lock the door; don't let data in or out of your app to prevent user leaving
- Speak English; don't localise, and especially don't localise for UK English
- Sighted users only; don't use the built-in tools to make things easy to find
Of course, he pointed out that this is a case of YGOLOHCYSP and that these are things he's found in other (real) apps on the App Store for no good reason.
Wrap up and end of conference
Well, it's been a tiring few days. I didn't get to all of the sessions, so apologies if I missed out taking notes for your session here. The good news is that the videos will soon be available for purchase at iDeveloper TV if you couldn't get here (and/or for those attendees who didn't get to the session). I highly recommend seeing both Mike Lee's talk on Monday and Aral Balkan's talk on Wednesday when they do come up; they are not to be missed.
Thanks also to those who didn't unfollow me on Twitter due to the deluge of
#nsconf postings; and for those that did follow me, I hope you found it useful.
One of the best things about NSConference is the atmosphere. There's a real sense of community that is sometimes missed from the larger conferences; and it's what you can only get for visiting in person. This is my second NSConference, and I'll definitely be back for NSConference 2012 whenever and wherever it ends up – I look forward to seeing you again there!