By Casey Liss
Much Ado About WWDC

There has been some varied chatter over the last couple days about what can be done regarding WWDC. For those that aren’t familiar, WWDC is Apple’s annual developer event that happens in San Francisco every June. It’s where the new version of iOS is announced, and developers can attend sessions and labs to learn about these features.

I’ve gone every year for the last several; my first WWDC was in 2011.

There has been increasing angst each year as two things happen: tickets become harder to get (though the lottery seems to have leveled the playing field), and hotels get ever more expensive. I’ve stayed at the same hotel for the last three years. My final bill each year is as follows:

Year Bill (USD)
2013 $1123.46
2014 $2036.58
2015 $2043.70
2016 ~$2500

Naturally, I haven’t paid the 2016 bill yet, but that’s what my reservation has me down for.

This is a 225% increase since 2013. For the same hotel. One that is roughly 5 blocks from Moscone. Yikes.

This $2500 hotel room is on top of the $1600 conference ticket, if I’m lucky enough to win one. So my hopeful WWDC trip starts at $4000, and I haven’t flown there yet. Flights from the nearest large airport are roughly $500 round trip.

I’m looking at $4500 and I haven’t yet eaten anything outside of the Apple-provided breakfasts and lunches.

For so many of us—most of us—this is a non-starter. Hell, I could buy a car for that kind of money.

So what can Apple do?

There was some Twitter chatter about this, and Charles Perry had the same idea I had been kicking around:

Vegas seems like the obvious answer, for all the reasons Charles laid out. Unfortunately, I don’t think WWDC can ever really move away from San Francisco.

Tim at WWDC

As Tim Cook tells us during every WWDC keynote, Apple generally sends around a thousand developers to speak, work the labs, and be available to developers. To move all of them to Vegas is a tremendous burden. The burden isn’t just financial, either. Quite obviously, Apple has enough money to charter some very nice airplanes to fly from SFO to LAS.

Moving all those engineers would mean more than just moving 1000 bodies to Las Vegas. It would also mean disrupting the lives of 1000 families. Which is a considerably larger burden to bear.

WWDC is not perfect. It’s announced frustratingly late for American travelers, and uncomfortably late for foreign ones. It’s expensive, and exclusive. People doubt its worth every year. As do I. But every year, I hope to be lucky enough to make it back. When it’s all over, I’m always glad I’ve participated.


Can You Hear Me Now?

I really love my new Apple TV. Though I only have a handful of apps on it, they’re wonderful. (I’m looking at you, Plex and Netflix.) I find that our new Apple TV is on considerably more than the one it replaced.

The one thing the new Apple TV is missing for me is optical output. I have a peculiar AV setup—one that I’m not looking to change at the moment—and a lack of optical output is a real bummer.

Suffice it to say, the Apple TV is connected to my TV directly via HDMI, and then the TV pipes audio back to the receiver via optical. That means I cannot listen to the Apple TV without the TV on. I discussed this in more detail on ATP.

Often times, I want to hear my Apple TV, but I don’t want to see it. AirPlaying music is a common occurrence around the Liss household. Be it from Spotify or iTunes Match, no matter what there is no video to display.

Given we have little eyes in the house, we try to keep the TV off as much as possible while he’s running around. We also like to have music on constantly. What I really needed was a way to get the audio carried on the HDMI out of HDMI and onto optical. I already had an optical port on my receiver dedicated to the old Apple TV; all I wanted was a way to drive it.

Tendak HDMI Splitter

Around the time the Apple TV came out, I stumbled on the Tendak HDMI Splitter which appeared to do exactly what I want. I finally got one and set it up this weekend. The Tendak serves as both a HDMI passthrough (for continued/normal video operation) as well as splitting off optical audio. At the time of this writing, it’s around $30[1]. If RCA is your thing, the Tendak provides RCA outputs as well.

Regardless, the Tendak does the trick, and does so for half the cost of this alternative Kanex Digital Audio Adapter. The Kanex is considerably prettier, doesn’t appear to have an annoying red power LED, and appears to be far smaller. However, the Kanex is also nearly double the price.

My setup is odd, but the Tendak has given me back what the fourth-generation Apple TV took away: ability to play audio without the TV being on.

My only gripes are the bright red power LED, and that the box is physically setup as a passthrough. HDMI enters one side and comes out the other. In my setup, it would have been far more convenient to have all the inputs and outputs on one side of the Tendak. I’d also love for it to run off the power on the HDMI cable, but I know that’s a bit much to ask.


  1. I should note there seem to be many equivalent devices for sale on Amazon from different brands, so another brand may be slightly cheaper. Your mileage may vary.


Poor Apple Watch
Current Watch face. Four complications: activity rings, sunset, Fantastical, Carrot Weather.

Increasingly, I feel like I’m the only one.

I still really like my Apple Watch.

Many of my friends and peers seem to be getting rid of their Apple Watches. They’re either no longer wearing watches at all, or are switching to mechanical watches instead. I can’t help but feel like it’s trendy to be smug about the Apple Watch.

I last discussed my thoughts about the Apple Watch in December. I wrote then:

Insignificant as [receiving notifications on your wrist] may seem to be, it actually isn’t. The Apple Watch has allowed my iPhone to transition from being a personal device to being a private one. That’s a really profound change. More so than I expected.

I feel that exact same way today.


Thinking of the Apple Watch as a standalone device that replaces the functionality of your phone is a fool’s errand. The Apple Watch improves your visibility into what is happening in your phone, like a satellite giving you a bird’s eye view of the earth. Neither will give you great detail about what is happening, but either can give you a lot of general information very quickly.

The Watch does its best work when it is showing notifications, allowing hyper-terse replies to messages, or showing you little snippets of data by way of complications. It does not do well as a standalone platform for applications.

And you know what? That’s okay.

Perhaps it’s because I have a job where I leave the house, but I can’t imagine looking down at my wrist and not seeing when my next appointment is. I can’t imagine looking down and not seeing what the temperature is outside.

I find it very convenient to see the weather forecast on my watch, even if my phone is on my desk upstairs. If my phone is across the house, I can decide by my wrist whether the call I’m receiving is worth sprinting to my phone for. I can glance at a text message while I’m driving, and see if it’s worth pulling over to take a closer look at; or I can reply easily and quickly with my voice.


I understand why one would give up on the Apple Watch. The apps are, by and large, useless. The glances are nearly as bad. But custom complications have changed how I think of my Apple Watch. Complications have turned my Watch into an information appliance.

For others, that may not be the case. And you know what? That’s okay too.

So many are lamenting the slow speed of the Apple Watch. I can’t argue; it annoys me as well. While I’d love to have increased performance in the next version of watchOS, and I’d love to see the next version of the Apple Watch get a little faster and thinner, I don’t feel like I need either of those things.

I could sure use custom third-party watch faces though.


I’ve found another reason to keep my Apple Watch around just in the last few weeks. I had heard many people telling me that Amazon has a ton of third-party watch bands, but was too scared to try them. The prices on these bands are unfathomably low as compared to the Apple equivalents, but wasting $20 is still wasting $20.

That in mind, I really wanted to try a Milanese Loop once Apple’s Space Black loop debuted. I didn’t want to spend $200 to do so. I found this knockoff on Amazon for around $20. I’ve been wearing it for a couple of weeks now and I quite like it. The color doesn’t perfectly match, and there are a couple of spots where silver peeks through. But for one tenth the cost, I’m a happy camper.

I’ve been eyeing this link bracelet for a while now, but ~$100 is too much for me to try on a lark. Whether I pull the trigger or not, it’s awesome to feel like I have so many options.

The beauty of the Apple Watch is that changing bands is super easy, and just when I was getting bored of my black Sport Band, I discovered a whole new world of bands, ripe for the picking. My Apple Watch may not look any different, but I can already tell the bands will be ever-changing.


  Permalink

My good friend and prolific iOS app developer _David Smith has released another new app. This one, Activity++, shows you your activity history that your Apple Watch has gathered. Sure, the Activity app does the same, but Activity++ is a vast improvement.

Activity++ screenshot

The app is a long list of your days, from most recent to least recent, stacked vertically. What I really love about the app are the statistics it shows. In the main screen, you can see how long you’ve maintained a run of one of your circles. In the example above, the last three days running I’ve hit all three goals; the last 25 I’ve hit my move goal, the last 3 I’ve hit my exercise goal, and the last 321 I’ve hit my stand goal.

I am the Blue Ring Stud, after all.

Tapping on any of these circles causes this awesome animation to happen:

Activity++ animation

I could watch it all day.

Furthermore, there’s a statistics screen that shows you even more about how you’re doing:

Activity++ stats

Not stopping there, David added one other great feature: “Rest Days”. If you’ve reached your goal for six consecutive days, one missed/rest day will not stop your streak.

Before you claim my Blue Ring Stud status is a farce, I will note that even without rest days, I had a 251-day streak. Damn you, flights back from the west coast.

As a final note, Activity++ also includes a handy Watch complication that makes it super easy to see the current state of your three goals, as a bar graph.

Activity++ makes your health data easy to digest, and your statistics quick to find. I’ve found this is already encouraging me to do anything I can to keep my streaks alive.

David is a dear friend, but I’d recommend Activity++ highly even if he wasn’t.


Node.js is Weird
Camel SLOC

Camel itself is around 900 lines of code.

It takes nearly 200,000 lines of dependencies.

I like Node.js quite a lot, and I plan to stick with it for this blog for the foreseeable future. However, I can’t help but question my own choices.


  Permalink

Today I joined Christina Warren, James Thomson, and Dan Moren on this week’s Clockwise. As always, four of us, four tech topics, less than 30 minutes.

This week’s episode included the appeal (or not) of Apple News, how social media and forensics could have dramatically changed high-profile court cases, ways to intertwine the real and virtual worlds, and whether or not we would appear on the show Techno-Hoarders.

I always love to do Clockwise, as it’s so different from every other show I’ve been on. Do give it a listen.


Turbulence

It is an impossible task to describe what being a parent is like. That doesn’t stop me from trying though.

Yesterday, on a flight back home from a trip to Las Vegas, it occurred to me how different my life is now that I’m a father.

Once you become a parent, every time your plane jostles, you freak out. You suck your breath in. You hold on tighter, as if that will somehow keep you safer, in your flying tube, 35,000 feet up.

Every time there’s a sudden shift, you take stock. The extra life insurance you wanted to look into but completely forgot about? You remember it now. Your will that you know you should write but haven’t yet? You kick yourself for it.

It’s not that things didn’t matter to me before. It’s not that I don’t care about Erin. I have the utmost confidence Erin would be fine. In fact, I also know that she’d be fine raising Declan by herself.

But she shouldn’t have to. That’s what keeps me up at night.

That’s what makes me uncomfortable flying. The uncertainty, the lack of control, and the fear. The fear that I’ll leave them alone, bewildered, and with a pile of new problems. A mountain of messes to clean up that they didn’t make, and they don’t deserve.

That’s what being a parent is like. At least, that’s what it’s like on a turbulent flight across the country, in an eery grey fog, with everything you care about in the world on the planet thousands of feet below you.


  Permalink

Oklahoma high school teacher Steven Wedel writes an absolutely scathing open letter to local lawmakers and voters. Much of it rings true in other states. As the husband of a teacher, I know this all too well.

…[politicians] keep passing mandates to make us better while taking away all the resources we need just to maintain the status quo. We fear that our second jobs will prevent us from grading the papers or creating the lesson plans we already have to do from home. We fear our families will leave us because we don’t have time for them.

It tears at my heart to know that my best teacher cries over the dilemma she’s facing right now. She loves her job, but she’s afraid she can no longer afford to continue in this profession. It’s something we’re all dealing with. How far will you push us?

Not only do we not pay teachers an appropriate salary, we steadfastly refuse to fund our schools appropriately.


In my new gig, my first assignment has been to work on a proof-of-concept app that demonstrates a new architecture we’re considering. (If you care, a combination of VIPER and RxSwift.)

This new app is written entirely in Swift. I’m new to Swift.

Taking inspiration from Brent Simmons’s Swift Diary, there are a few things about Swift that are deserving of praise and I plan to call out as I’m learning the language.

Today’s case study: Enumerations.


Enumerations are not a new construct; they’ve been in most languages I’ve worked with. Generally speaking, they look something like this, in most C-derived languages:

enum LibraryBookState {
    CheckedIn,
    CheckedOut
}

Think of it as saying “For a library book, it can either be CheckedIn or CheckedOut. Nothing else.”

As with life, things are rarely that simple.

In this contrived example, it’s useful to know that the library book is checked out to someone, but to whom? We’d need another variable to track the patron the book is checked out to. So, if we were designing a Book class in Swift, it may look like this:

class Book {
    var status: LibraryBookState
    var checkedOutTo: Patron?
    var title: String
    var author: String
}

That’s a little, well, weird, if you think about it. The patron the book is checked out to is really part of the state of the book. A part of the state that we’re capturing in the LibraryBookState enumeration.

Wouldn’t it be nice if we could keep track of who the book is checked out to within the LibraryBookState enumeration?


In Swift, we can. All thanks to associated values.

We can write a Swift version of our enumeration like so:

enum LibraryBookState {
    case CheckedIn
    case CheckedOut(patron: Patron)
}

Note the change in CheckedOut: now it looks like a function call. Though syntactically a little curious, CheckedOut is still just an enumeration value. However, it has a super power: it carries with it an associated value.

The only way to set a variable to the CheckedOut enumeration value is to also provide the associated Patron along with it.

let casey = Patron(name: "Casey Liss")
var state = .CheckedOut(patron: casey)

Similarly, when we are using a switch to evaluate the value of that enumeration, we can get the value back out:

switch state {
case .CheckedIn:
    // ...
case .CheckedOut(let p):
    // p is the associated Patron
}

Associated values are a perfect solution to a problem I didn’t know I had. To return to our Book class, we can now simplify it:

class Book {
    var status: LibraryBookState
    var title: String
    var author: String
}

We no longer need checkedOutTo since we’re capturing that within LibraryBookState. The revised class is much cleaner, and more directly represents the way we wish to model a book.


I’ve found associated values are used very frequently for the results of network requests. Many take a form like this:

enum FetchBookResult {
    case .Success(book: Book)
    case .Failure(error: ErrorType)
}

Using enumerations in this way makes it so much easier to return a value from a function, as you don’t have to do any awkward dancing with tuples or multiple callbacks or equivalent:

func fetchBook(id: Int) -> FetchBookResult {
    // ...
}

Enumerations in Swift have many other tricks as well:

  • Properties
  • Methods
  • Extensions
  • Protocols (think interfaces)

It’s stunning how powerful support for these paradigms makes enumerations.

I’m only three weeks in, but so far Swift is really impressing me. It’s bringing a joy to development that I haven’t felt in quite some time. I often feel like I’m fighting my own ignorance; I rarely feel as though I’m fighting the language.

There’s a lot in flux with Swift these days, which makes many people I deeply respect shy away from it. That may come to burn us, if we try to go all-in on Swift; especially once Swift 3 comes along. However, I’m very hopeful and excited for the future, as it’s clear Swift is a language that is somehow able to be both well-considered and improving rapidly.


  Permalink

If memory serves, I met Dave Wiskus at Çingleton in 2013. I had heard the name numerous times, as I was starting to really travel in the same circles. I knew him as a designer, and frequent speaker. We hung out a bit, and I like to think, clicked pretty quickly.

Through a couple WWDCs after, and at CocoaConf DC 2014, we got to know each other better and better. For a time, we worked together. I got to learn that, as with almost anyone you meet, there’s way more to Dave Wiskus than meets the eye. We became as close as new friends, separated by a few hundred miles, can reasonably be expected to be.

I knew that Dave had dabbled with music on and off throughout his life. I also knew his current career was as a designer, speaker, and producer. Over the last year or so, I noticed him getting more and more serious about his side project, Airplane Mode.

Late last year, Dave explained how serious he really was.

Today, Airplane Mode released their first studio EP, Amsterdam. A commendable achievement, but one that is not altogether remarkable.

Dave being Dave, and Airplane Mode being Airplane Mode, they did more.

In addition to being available on iTunes and Spotify, the album is also available in book form. (Apple links are affiliate links)

It’s a quick read—it took me well under half an hour—but it tells the story of how Amsterdam came to be. The story of what motivated this quartet of musicians to perform this quartet of songs that is now an EP.

The book goes further; Dave explains:

Over time, as we make music videos or play shows to support the album, we can update the iBook with new content. In the digital age there’s no reason why a record can’t be a living document.

Like so many truly clever ideas, this one seems so obvious, but only in retrospect. Though the only thing I can play with any efficacy is the stereo, I still wish I had thought of it.

What’s more, it’s only $4.

Go check it out. Between the album and the book it’s an hour of your life. I can think of many worse ways to spend $4 and 60 minutes.