Jim Dovey Chief iOS Engineer at Kobo
Who are you and what do you do?
I’m Jim Dovey, and I’m the chief architect on the iOS team at Kobo in Toronto, Canada. I’m also a Brit.
I drifted into computer programming properly about 14 years ago, after a few years attempting to make my way as a professional musician. During my youth in the 80’s and 90’s, my father taught computing for both the British military and the Open University. In the mid–80’s I learned a little about programming with LOGO and BASIC on a BBC Master System my dad brought home, but did little else along those lines for the next 12 years or so, until around 1998 when I discovered Linux and Java, and began working as a programmer, learning C and C++ on the job.
I first got attached to the Macintosh in mid-late 2000 when the company I worked for at the time was looking at a Mac port of its software. Our documentation guy used a G3 PowerBook, and we’d all become quite enamoured of it, so I leaped at the chance to get the post of Mac software engineer. I ran out & bought a G4 Cube and delved into the Mac APIs courtesy of CodeWarrior, and landed myself the title of ‘resident Mac expert’.
Following that, I worked on a variety of different Mac software, frequently low-level system daemons and the like, which gave me a relatively encyclopaedic knowledge of the inner workings of OS X. This was later put to use in hacking the AppleTV as a member of the AwkwardTV group, and developing the original third-party AppleTV SDK. This left me in an ideal position when the iPhone arrived. After a stint in the consulting business, I joined Kobo shortly after its foundation, in January 2010.
What is your computer and workspace setup while developing?
My setup at work is a top-end 27" iMac from early 2010; this was bumped up to 12GB of RAM ready for the Lion & Xcode 4 upgrade last year. Beside that I have an iPad 2 sitting in a keyboard dock (which is incredibly useful) for most of my on-device debugging purposes. I use a magic mouse there, as the multi-touch surface on that supports all the gestures I find I need to switch between spaces and the like.
I love using full-screen apps on this machine; I commonly have a full-screen Terminal running, Mail is always full-screen, and the main Kobo project has its own space set aside at all times.
At home I have a 2008 Mac Pro attached to a 30" cinema display. I don’t tend to use full-screen apps quite as often here, although I do drop iTunes and Mail into their own spaces just to clear them out of the way. I have a trackpad for this one (just for the variation really) and an old Microsoft ergonomic keyboard. I used to do all my work on this machine in my consulting days.
I also have a late–2010 15" MacBook Pro which I use when travelling and keep on the main floor of the house for occasional use there.*
What are your favourite Apple iOS API's to use within apps you develop?
I love Core Data, and have recently become enamoured of NSLinguisticTagger and the sorts of things one can do with part-of-speech tagging in general. I think the best thing on iOS right now is Grand Central Dispatch, though: there’s just so much possibility there to bring in functional programming techniques. Also, anything which helps humanize multi-threading has to be a Good Thing.
Most of my real favourite APIs though aren’t available on iOS, only on the Mac. Top of the list there right now are the SecTransform APIs from Security.framework. The iOS version has just about everything else from there now, but no sign of SecTransform. Nor is the source code for that API available yet, despite everything else in the Security framework being open-source since 2001. This makes me a Sad Panda, because I’d love to cleanly port it to iOS.
What is some software that you use outside of Xcode for development?
I use TextMate for all my Ruby, Rails, and Go programming. I used to use a Mac version of Epsilon, as that’s what I started out using on Windows and Linux, but recently the improved auto-completion in Xcode has proved to be too difficult to leave behind. I still keep a copy of Epsilon on-hand in case I need to run macros and the like across my code; the ability to record relative keystrokes, including buffer switches and so on, is an absolute dream: being able to construct case statements and the like directly from an enum declaration in another file, by copying one item, typing some boilerplate, and holding down a key to repeat 200 times for the rest of the enum. It’s great.*
What do you do to stay up to date on new iOS features, frameworks and SDK's?
I dive through the API diffs for new releases the instant they’re posted by Apple, downloading the latest Xcode/iOS betas at the same time. If an API looks interesting, I’ll dive into the header files to look around. When new major versions of iOS and/or OS X arrive, scanning through all the available frameworks and header files is just about my first order of business: you can find some wonderful stuff that way which you can easily miss in a flat list of modified APIs on the web somewhere.
From a developers perspective, what are your hopes for the next major iOS update?
From an eReading perspective, I want access to WebKit. Specifically I want access to the DOM model so that I can locate elements on-screen without thunking to JavaScript code, and so that I can intelligently modify CSS attributes on elements based on their existing attributes, rather than resorting to a CSS file with lots of !important clauses.
Outside of that, I’d like to see SecTransport arrive on iOS, and some means of doing raw Bluetooth communication without requiring GameKit or custom hardware and the iPod Accessory protocol.
Finally, what is your favourite app?
I love Twitter, and I use Twitterrific on the Mac and TweetBot on iOS. I use Twitter for all sorts of stuff, although most notably I’m sure for catharsis – I vent any and all my frustrations on there, which leads to some interesting and heated conversations sometimes, especially around Apple’s App Store rules changes and how they affect iBooks’ competitors (don’t get me started…).
Aside from that, I’d have to say my most-used app (other than the Kobo reader, of course) is Ego. Being an introverted nerdy type, it’s good to be able to massage my ego privately by looking at some pseudo-popularity statistics sometimes ;o)