I’m a little late in posting this, but two weeks ago I attended the first ever NSConference, a Mac developer conference based here in the UK (in Hertfordshire, England).
A few others have already written about it (including Fraser Speirs, Alexander Repty, Martin Pilkington and Cyril Godefroy), but I wanted to add a few quick notes of my own. You can also take a look at a few photos of the event on Flickr, if you’d like.
In brief, the conference seemed to be an outstanding success; it’s really incredible how much Scotty (@macdevnet) and Tim (@timisted) were able to achieve, particularly for an inaugural event. The choice of campus (the De Havilland centre at the University of Hertfordshire) was pretty much perfect: clean, modern facilities, good catering and friendly staff, and everything within 2 minutes’ walk (from accommodation to dining to venue).
The badges, branded tshirts and travel mugs and the signage were all top-notch quality, and generally the entire event managed to pull off a comfortable packed-lecture-theatre feel but with an international-conference level of polish. I continue to be impressed at the organisers’ achievement.
I was fortunate enough to be asked to be the opening speaker, and I had a truly brilliant time (despite Scotty playing the “his name’s not Jemmell” track he created as my intro to stage). Everyone was very receptive and I’ve received many kind comments afterwards; I hope that everyone managed to get something from my session on creating custom Cocoa UI controls, and it was a real privilege to have the chance to speak. I was also most grateful that coffee was available immediately afterwards.
Getting my own session out of the way at the start of the first day had a big advantage: I got to then immediately settle in and enjoy the rest of the sessions from my fellow speakers. Fraser (@fraserspeirs), my fellow countryman and sometime MacMacDev partner in crime, was first up with a session on what he called the photography ecosystem on Mac OS X, including both system-level and (Apple) application-level support for image importing, metadata, selection, export and so on. Fraser’s lecture was pitched at an ideal practical level; it wasn’t all theory or overly focused on one set of APIs – it was more like an hour-long tour of all the various ways that you can support or integrate with photography workflows from your own applications. Totally pragmatic and encouraging.
Halfway through lunch we had a 15-minute mini-session with Martin Pilkington (@pilky) on Accessibility, and it was probably the session that emotionally resonated with me the most. Martin talked about how he’d issued a challenge to the developer community to make their apps (and sites) accessible within a year, and discussed many of the benefits of doing so – drawing attention to the fact that there are actually personal, developer-focused benefits as well as the obvious altruism and inclusiveness that you’d expect. He also showed us an eye-opening and frankly inspirational video of a young man with severe physical impairment who was nevertheless able to have a very active online life via assistive technologies (and I mean extremely active; playing FPS games and even World of Warcraft, browsing the web, listening to iTunes and so forth). Check out Martin’s site (linked previously) and consider taking on his challenge.
Next up was Philippe Mougin, of F-Script fame, with a session on using that very technology to give you Cocoa dev super-powers. I think it’s fair to say that pretty much everyone came out of that session thinking wow, both in terms of what’s possible with that sort of introspection and the ways it can increase our understanding of what’s going on in our applications. The best summary I can give is that if you’ve not played with F-Script, you must do so. It really is that awesome.
Mid-afternoon we had Andre Pang (@andrepang), erstwhile Realmac offshore engineer and now the guy who cleans up after Wall-E at Pixar. Andre is one of those disturbingly clever people who can effortlessly segue into a discussion of functional languages or recursive algorithms at the drop of a hat (though judging by the last time we had coffee, he does have some issues navigating around central Edinburgh). Accordingly his session was on the fundamental constructs of Objective-C, Smalltalk, Haskell and some other languages, leading up to advice on how an awareness of the core nature of the language and runtime can help us make smart decisions whilst programming. It was fascinating, and parts of it made me feel like I was back at university – in a good way.
The last session of the day was the much-anticipated Pimp My App session, with the irrepressible Mike Lee (@bmf). Mike’s talent is applied to software development, but it’s one of those skills that would be equally useful anywhere: the ability to see with clarity what’s truly important to people, and how those factors affect people’s perception of a product. He took us through everything from when to drop an incomplete feature, to how to conduct your user testing in a meaningful but realistic way, to common mistakes which end up annoying your users, to the fact that your app’s killer feature may not turn out to be the one you thought it was. Mike is a hugely entertaining public speaker (and actually the sweetest guy you could meet, despite his bad-ass persona), and this session ended the day’s lectures on a real high-note – particularly given that he closed with a case study of how to improve Flight Control on iPhone. Talk about playing to the crowd.
There was one last thing on the schedule before dinner: the Mac Developer Roundtable (actually a long, straight table with we speakers taking questions from the attendees). This was meant to be an hour-long discussion of Mac development, but a big chunk of it focused largely on the iPhone, reflecting a major current trend. It was really interesting to hear everyone’s opinions on issues as diverse as the use of private frameworks to a theoretical App Store for the Mac, and I think the audience had quite a bit of fun. By the time we were done, I was definitely ready for some food.
We had a banquet on the first evening (don’t worry, we were still in jeans and tshirts), with wine kindly provided by eSellerate, and naturally a fair few drinks. I don’t think I’ve ever shaken as many hands in my life; it was fantastic to put faces to so many familiar names, and I had some fascinating conversations. We even got through the night (mostly) without mention of MGTwitterEngine.
The next morning our first session was by Drew McCormack (@drewmccormack), who confused us all by being Australian despite living in Amsterdam. Drew is a scientist and is a big proponent of scientific computing using Macs, and his session was entitled What A Performance. It focused mainly on enhancing an application’s actual and perceived performance via various sorts of parallel processing, including everything from threading and NSOperation(Queue) to using Xgrid and Amazon EC2, and even various Snow Leopard niceties like Grand Central, OpenCL and blocks. Drew’s talk gave a good grounding on what’s different (and what’s the same) about using these various technologies, and showed us why there’s a lot of cause to be excited by what’s coming in 10.6. He also used some clip-art of Postman Pat, which is just wonderful.
Friday’s second lecture was given by Graham Lee (@iamleeg), who is (1) a senior Mac software engineer at Sophos (of anti-virus software fame), (2) possibly a former Justin Hawkins impersonator, and (3) an incredibly entertaining speaker. His talk was, appropriately enough, on security and took the form of a discussion of how to think about the ways in which your application will be used, and how it can be misused – and what the consequences of such misuse may be. It was fascinating to approach the topic of security from that high-level (and consequences-focused) standpoint, and Graham used that approach to then show us some of the security APIs on OS X and how to use them to build secure applications (he even used iTunes to discuss just how many types of valuable data or elements of reputation can exist in an application). Graham’s lecture did a great job of illustrating that security isn’t just part of the technical minutiae of software development, but rather an entire approach towards application and interaction design. I thoroughly enjoyed it.
Our last session before lunch was by Bill Dudney (@bdudney, where his avatar makes him look older than he actually is), who surely needs little introduction since the literally wrote the book on Core Animation. Sensibly, his session was on that very technology, and took the form of a series of examples of applications whose UIs had been enhanced by the use of Core Animation, followed by walkthroughs of the actual code which created the various effects. There were two things which made this session especially interesting and valuable for me: first, Bill took time to give us an initial primer/refresher on the geometric properties of layers which Core Animation uses, with special regard to which layer properties are set directly and which are (normally) derived from the other properties. This was a stumbling block for me when moving from regular Cocoa drawing to using CALayers, since the mental model is different; Bill gave a good overview of how the layer system’s coordinate space and transforms actually work. The second nice touch was that Bill mentioned something that doesn’t get a lot of press, but really should: Quartz Composer. QC compositions are capable of some amazing things, and can readily be integrated into your Cocoa UIs (including when using Core Animation). It was good to see it getting some coverage. Bill’s session demonstrated his easy mastery of the area, and I saw that many MacBook screens had Core Animation documentation visible on them by the time the hour was up.
We broke for lunch after Bill’s session, and once again had a mini-session halfway through. This time it was given by Marko Karppinen (@markonen). Marko runs his own company in Finland, is a hell of a nice guy, and was once responsible for the easiest money I have ever made in my career as a Cocoa developer. That’s very mysterious, so I’ll leave you to ponder it for yourself. His session was on BaseTen, which is a framework created by his company for working with PostgreSQL databases from Cocoa. Marko was giving us an overview of what BaseTen is capable of, how it compares with Core Data, and how to use it in your application. If you’re interested in using a serious database engine in your application, it’s well worth checking out, as Marko ably demonstrated.
The final lecture of the conference was presented by Marcus Zarra (@mzarra), of Cocoa Is My Girlfriend fame. I should stress at this point that, despite his blog title, Cocoa is not the only woman in Marcus’s life; he is happily married, and his wife was at the conference too. Marcus’ session was brilliant, in that it was a very hands-on, here’s-how-you-do-this sort of session: the idea was that we had a Core Data application (a recipes database, in this case), and we wanted to add support for both Quick Look previews of recipes and also Spotlight searching. Core Data applications traditionally present a challenge when integrating with those two technologies, because both require a one-entity-per-file model, whereas Core Data naturally uses a central database. Marcus showed us, in clear terms and with all the relevant code, how to overcome that obstacle via the use of files of metadata to represent the entities in the actual Core Data store, to enable support for Spotlight and Quick Look. There was definitely an “a-ha!” moment there when we realised that his approach of using metadata property-lists as “proxy” files for entities took care of the problem elegantly and in an extensible way. He also took us through the creation of the actual Spotlight importer and Quick Look plugin necessary to provide the other half of the integration. There were plenty of useful gems in Marcus’ lecture (not least of which was using HTML templates of metadata as the basis for Quick Look previews of custom file-types), and I really got a lot out of it. A very worthy final lecture.
The final lecture, however, was not the final session of the conference: that honour fell to the developer challenge. The idea was that the speakers were split into two teams (very roughly along the Europe vs America line), and a few attendees from the audience were randomly chosen to join those teams. The teams were then set the task of designing an application according to a given specification (in this case, an app to help you to organise a conference, funnily enough), and were sent out of the lecture theatre to work for 40 minutes or so. During that time, speakers’ names were chosen in random order, with each chosen speaker having to return and give a quick development tip for 3 minutes before rejoining his team.
For such a potentially-chaotic arrangement, it actually worked amazingly well. The actual task itself was taken somewhat more seriously and literally by the “American” team, but in the end the “European” team (of which I was a member) narrowly won out by a combination of creative interpretation of the rules and tawdry crowd-pleasing tactics; a victory due in part to the inclusion of that Danny Greg (@dtm3dd) on our team. Danny, you’re a national treasure – now please get a haircut.
With that, the first NSConference came to a very successful close, and I honestly didn’t met anyone who hadn’t had a brilliant time. The speakers and staff went out for a gigantic curry that evening (during which, true to form, Fraser got into a lengthy political discussion with myself and Mike, but I can assure you that no glassware or crockery was damaged) and had a few drinks before retiring for the night. I fell asleep the moment my head hit the pillow, already eager for NSConference 2010.
I’ll just close by saying that I’m very grateful to everyone who attended the conference: you were the ones you were willing to put your money up and attend, and I hope that you got as much out of it as I did. I’m certain I speak for my fellow speakers when I say that it’s a rare privilege indeed to be invited to talk about work that you love in front of a friendly, receptive audience of smart people – and then to be able to meet and talk to those people and hear or see their ideas too.
Speakers get the best of both worlds because we get to (hopefully) feel the energy in the room when we’re presenting and to enjoy the other speakers’ sessions, but also to personally meet everyone who attends and see the stuff they’re working on – which inspires us all the more.
If you enjoyed yourself even half as much as I did, then I imagine I’ll be seeing you again next year.