Category Archives: technical

WWDC 2015: Session Video Guide

(UPDATED: 14:05 PDT, 12 June 2015)

If you’re looking for a starting point to traverse the immense number of session videos now available from WWDC 2015, I’ve listed my favorites below in an order I think makes most sense if you have no ordering constraints and you’re starting fresh. I’ll be adding notes throughout the weekend, but I wanted to get a quick list up for anyone who wants to get started right away. (Scroll to the bottom for more info on the underlying rationale.)

Phase 1: Prepare yourself

  • Keynote – duh.
  • Platform State of the Union – Get the global view of what are thought to be the most important features of the new releases. (I found that this year it skewed pretty far from what I thought was important, but it’s good to know what’s on their mind.)
  • What’s New in Xcode – No matter what, you’ll be using Xcode 7 soon.
  • What’s New in Swift – If you’re going to be using Xcode 7 soon, and you use Swift, you must migrate your Swift code to Swift 2. Error handling and method availability APIs are all-new and very useful.
  • Introducing WatchKit for watchOS 2 – Big changes are afoot for watchOS 2. If you haven’t already built a WatchKit app, this is more compelling – WatchKit 1 apps will continue to work on watchOS 2, albeit with their characteristic slower UIs.
  • What’s New in Cocoa (Mac dev only)
  • What’s New in Cocoa Touch – Hope you read between the lines last year and migrated to size classes and Auto Layout! Multitasking relies on these features to make your app look good. I think this is also the start of a thematic thread for iOS this year: UIStackView.
  • What’s New in Storyboards – I’m a fan of Storyboards, and this year we got a few key feature updates, but one stands out to me: Storyboard References. You can break your massive MainStoryboard.storyboard into smaller functional segments but retain the benefits of other Storyboard features.
  • UI Testing in Xcode – MY PERSONAL FAVORITE NEW FEATURE. Similar to KIF, but with a VERY fancy test recorder. Writing new UI tests looks like a breeze with the recording feature. You can also take screenshots during UI tests – perhaps we can use this to automate taking App Store screenshots.
  • Continuous Integration and Code Coverage in Xcode – A close second for my personal favorite new feature. The code coverage is based on llvm-cov, which as been around for a while now. The combination of CI, Xcode’s new UI testing, XCTest unit testing, and code coverage data is going to be amazing.

Phase 2: Swift updates and depth

  • Swift and Objective-C Interoperability
  • Improving Your Existing Apps with Swift
  • Protocol-Oriented Programming in Swift – If you’re finding yourself force-casting and force-unwrapping everywhere in Swift, or just perplexed, this can reveal important features of the language that will explain your problems and even give you architectural enhancements. (Some found the pedagogy of this session confusing, but the underlying concepts are very important and useful.)
  • Swift in Practice
  • Optimizing Swift Performance

Phase 3: Important iOS 9 Features

  • App Thinning in Xcode
  • Getting Started with Multitasking on iPad in iOS 9
  • Introducing Search APIs
  • Seamless Linking to Your App – This is an extraordinarily important feature for anyone whose iOS app mirrors content on the web. You can now “hijack” http:// links to your site to open natively in your app, saving a ton of JavaScript and redirection hooey. The user experience will also be vastly improved.
  • Introducing On-Demand Resources (for apps with assets) – Very useful for the class of apps it targets like games and media; not so much for most utility-based apps.

Phase 4: Important WatchKit Features & Info


  • WatchKit In-Depth, Part 1 – Covers migrating your watch extension from living on an iPhone under watchOS 1 to living on the watch under watchOS 2.
  • WatchKit In-Depth, Part 2
  • Creating Complications with ClockKit – A highly-anticipated feature for watchOS 2, but it’s best applicable to a relatively narrow set of apps.
  • Designing for Apple Watch – tl;dr: Do fewer things, and be careful about your presentation format.

Phase 5: Layout Improvements & Techniques


  • Mysteries of Auto Layout, Part 1 – Here we continue the theme of “adopt UIStackView and stop being clever”.
  • Mysteries of Auto Layout, Part 2

Phase 6: Other iOS 9 Improvements


  • What’s New in Core Data – A new batch deletion method is stunningly useful. Scott Perry gives us a great Core Data performance debugging example.

Everything Else


  • Cocoa Touch Best Practices – Revisit core parts of UIKit.
  • Introducing the new System Fonts – San Francisco!


We will be able to use Swift 2.0 features in shipping apps as soon as Xcode 7 is GM, but iOS 9-only features are almost… advisory… unless you’re going to a 9.0 deployment target. There are also a lot of high-detail talks that will be great references after implementing these new features, but that are less useful before then.

Taking Arduino to the next level with avr-gcc: part 3.5

Since I wrote my last post on this, a few minor things have come to my attention or changed:

  • Dane pointed out that the digital pins of the Arduino output a maximum of 40mA of current. Each LED can probably handle 40mA of current itself. In short, that means that right now, we’re only getting about 1/6th of the potential brightness. (Perhaps more than that, since the voltage-brightness response is not linear, but still – less than we could be getting.)

    My ideas for dealing with this are:

    1. Pull current from more PWM pins. The most straightforward, though it puts the most load on the Arduino. At this point it looks like I have enough pins to do this since I’m multiplexing the display.
    2. External power supply, emulating PWM with some kind of external switching IC. I really don’t like this because if the software doesn’t do PWM correctly, there could be several amps going into the LEDs, which would have no good consequence. It also involves buying more hardware, which, well, yeah.
    3. Something else clever commenters come up with…
  • I moved from a design using several smaller breadboards (“modules”) to one larger breadboard. I’ll draw a line visually between the two next time I’m at the workbench. Functionally, it should make no difference if you don’t want to transfer, the wiring just might get a bit unwieldy.
  • I messed up the fuse and bootloader on my Arduino Nano. I may have to buy a reprogrammer to fix that. In the mean time, I’ll be using the Diecimila like I have been rather than trying to breadboard the whole thing. Someday, perhaps. In the mean time, that makes me a bit nervous to push binaries to hardware, which means…
  • Next time we will cover how to use to toolchain to manage and compile a C-based AVR project, particularly in Xcode. We won’t be getting to avrdude just yet – it’s one thing when I brick my own hardware, it’s another thing when I tell someone how to brick theirs. 🙂