Mark has been a Mac programmer since 1985 and a professional Unix programmer since 1990, gleefully enjoying the combined world in Mac OS X. Mark has experience on the client side and server side, being a veteran of several startups, and larger technology operations like AOL and Google. On the back-end, he has been the technical lead for AOLserver, a high-performance web server handling billions of requests per day. On the client-side, he has worked with numerous toolkits, has had code running in space, as well as code running on millions of Macintosh desktops world-wide. Currently Mark is building iPhone software for Cycling Fusion, helping to bring the worlds of indoor and outdoor cycling together; as well as building training materials for Big Nerd Ranch. In addition to being the principal author of Learn Objective-C on the Macintosh and Advanced Mac OS X Programming, now in its third edition, he has been the technical reviewer for many Cocoa and iPhone titles with Apress. He is also the co-founder of CocoaHeads, the international Mac programmer's group, with chapters in 41 countries on six continents, and organizes the Pittsburgh CocoaHeads chapter. In his spare time he plays music, wrangles a camera, and makes balloon animals.
Oftentimes, what separates an average developer from a great developer is the ability to debug. When faced with software that Just Doesn't Work, how do you go about finding the problem quickly and fixing it? In this session we'll cover some tools and techniques that can improve your debugging chops.
We all want our apps to perform better. Run faster. Consume less memory. Burn less battery. Sometimes it's hard just to figure out what our performance problem _is_, much less fixing it. This session will cover common performance problems on iOS and Mac OS X, how to track down problems using tools such as Instruments, and ultimately, how to get the mindset to get your apps fast, and keep them there.
Even though the built-in Cocoa Touch controls are easy to use and powerful, they're kind of boring. Adding your own special sauce can make your app look cooler and make it easier to use. And it's easier than you think. This session shows you, step by step, the design and implementation of a custom user interface (http://borkware.com/hacks/keiser-keyboard.mov). Starting from a simple jpeg, using custom views with a bit of Core Graphics and Core Animation, along with a little Delegation, and ending up with a fun piece of UI.
.h files are everywhere. We create and edit them every day. Yet, they're something we tend not to think about very much. Over the years we've added layers of responsibility on these files, some of which make sense, and some that are misguided. Find out which is which in this meditation on interfaces.
Frameworks, algorithms, and design patterns are fun, and are very important tools for our day to day work. But there's a meatier, more human side to the whole programming business that often gets overlooked, and is rarely talked about : the attitudes and tools to build and maintain relationships amongst the humans, rather than the code.
Ever wanted to put your software and your machine in the X-Ray machine? Sometimes the solution to a tough bug is finding out exactly when and where something is happening. If some random NSUndoManager is messing up your day, wouldn't it be nice to see where they're all created and used, even those that come along for free from Cocoa or CocoaTouch? What methods are called when I trigger a memory warning in the iOS simulator? Who keeps opening Hasselhoff.mov on my machine?
DTrace is a powerful command-line utility that lets you investigate the guts of your code (Mac and iOS Simulator) and your system as a whole. DTrace lets you answer all of those questions, and more. You'll learn where DTrace came from and what it does, as well as some tips and tricks tuned specifically for Objective-C developers. As an added bonus, you'll get a script you can use to peer into your own programs.
Want to take your skills to the next level? Ever wanted to find hidden secrets that lurk in the undocumented underbelly of the Mac or iPhone? Join MarkD for a ride through reverse engineering, disassembly, swizzling, spying, and general mayhem.
Details coming soon!
Know yourself. By knowing yourself you can go beyond yourself, and make yourself, and your world, a better place.
Swift's pretty cool - it has some good points, some bad points, some weird points, and some wonderful points, some of which make more sense in the light of the history of where we came from. MarkD talks about Swift in this context.
Paths. Strokes. Gradients. Fills. Dashes. Transforms. Contexts. Pixels. Images. PDFs. Core Graphics is the fundamental toolkit in iOS and OS X for rendering graphics. It's powerful, and can seem opaque at times. This session introduces to the Core Graphics moving pieces and how you can write your own drawing code in Swift and Objective-C.
Performance tuning is a big topic, and there are optimization opportunities both algorithmically and how you use your programming language. Swift gives us a lot of opportunities to write high performance code, but you have to be aware of some of the inner details to take full advantage of them.
The act of debugging boils down to asking, and answering questions. The better you can make your questions, the more effective you get at debugging. This session shows you how to question reality to become a better debugger.
Polymorphism is an important tool in modern development, from Objective-C's classes to Swift's protocol-oriented programming. Learn under-the-hood details of how it all works, from vtables to code piles to existential containers.
Polymorphism is an important tool in modern software development, from C++'s and Objective-C's classes to Swift's protocols. Learn under-the-hood details of how it all works, from vtables to code piles to existential containers.
Making efficient use of your debugging time gives you more time to do other stuff, such as introducing brand new bugs in to your app! You'll learn some tips and tricks for zeroing in on bugs faster.
You've seen and used Swift attributes, such as @IBOutlet, @escaping, and @discardableResult. What are they really, and what do they do? Come meet the menagerie of these things (documented and not) that I've collected.