0:00:00Jon, did anything bad happen in the last week?
0:00:02Did the world end?
0:00:04Or did any other negativity or horrible result
0:00:08happen in the last week?
0:00:10- I'm sure horrible things happened everywhere
0:00:12in the last week.
0:00:13- Well, did anything happen to our show
0:00:15that was really horrible?
0:00:16- Oh, I don't think so.
0:00:18- Oh, okay, because what was missing from last episode?
0:00:22- The song was there.
0:00:25Did you forget the modem thing in the beginning?
0:00:28- No.
0:00:28John, John, John.
0:00:30- Show notes?
0:00:31- Nope, that was there too.
0:00:32- Keep trying.
0:00:33- What was just completely missing from last episode?
0:00:36- Any mention of the thing
0:00:39that I was most excited about at WWDC?
0:00:41- No, no.
0:00:42- Are you talking about like the release show,
0:00:44like the production process has fallen down?
0:00:46- Oh my God, John, how have I figured this out
0:00:49and you haven't?
0:00:50- I don't know, I just listened to the most recent episode.
0:00:52It had a song, I guess it had the modem beep.
0:00:55Did it have the ending noise?
0:00:56- Yeah.
0:00:58We'll just sit here patiently.
0:00:59- I don't know.
0:01:00All the ads?
0:01:02- No, those are there too.
0:01:03All right, well I guess we should do something
0:01:06up front in the show.
0:01:07- Oh, 'cause you didn't have follow-up
0:01:09for the WDC show.
0:01:09- There we go.
0:01:10- We never do.
0:01:11We never have follow-up for the WDC show.
0:01:13(laughing)
0:01:14Because we always have so much to talk about.
0:01:16We haven't had it on any of the WDC shows.
0:01:18Like, where would I get it from,
0:01:19especially when we were live?
0:01:21I don't have notes in front of me.
0:01:22- Oh, come now, Jon.
0:01:23We always have something to follow up on.
0:01:25- Did we when we were in Macworld last year?
0:01:27I don't think so.
0:01:28I mean, maybe someone can look it up and see, but like, certainly I didn't have a laptop
0:01:32in front of me, right?
0:01:33No, you just had a tremendous wallet.
0:01:35No, I mean like last year at the Macworld studio.
0:01:39Yeah, you still had a tremendous wallet, I'm quite sure.
0:01:41I don't know.
0:01:42You might not have been with me.
0:01:43Hey, speaking of wallets, and now we can segue into the follow-up that Marco's trying to
0:01:47avoid.
0:01:49We all went to dinner at our dear friend Jason Snell's house, and we left that house.
0:01:58We left Jason's house and got onto the interstate highway, freeway, whatever California calls
0:02:05it.
0:02:06And then you had an epiphany, Jon.
0:02:08Would you like to tell us what that epiphany was?
0:02:10I left my backpack at Jason's house.
0:02:13And somebody pointed out to me—I genuinely don't remember who it was, and so I'm
0:02:18sorry to whomever that is, that at two minutes, excuse me, two hours, two minutes,
0:02:23and 45 seconds, you explained to us in the last episode how you would never
0:02:26lose your backpack. Did I lose my backpack? Briefly, yes, because you said you had no
0:02:31other-- Was it lost? Define "lost." You didn't know where it was within Jason's house. I did
0:02:35know where it was. It was at Jason's house. Was I correct in believing it was
0:02:39at Jason's house? Yes, I was. Did I ever wonder where it was? No, I did not. I think you did
0:02:43briefly.
0:02:44No, I knew it was at Jason's house.
0:02:46So anyway, I just thought that was very funny, that it turns out that after declaring authoritatively
0:02:53that you would never—okay, yes, you said lose, but I will take it—you will never
0:02:57leave your home.
0:02:58What do you mean you will take it by changing the word that I said to a word that makes
0:03:01you right, and then you will bask in that imagined glory.
0:03:05This is the internet.
0:03:06This is how these things work.
0:03:07Anyway, I did not lose my back.
0:03:11And if I had got all the way back to the city, I would still have known exactly where it
0:03:14was.
0:03:15That is true.
0:03:16Yeah, that is true.
0:03:17Maybe you'd have a case if I knew exactly where it was and that knowing was, "I know
0:03:20where it is.
0:03:21It's on the BART platform."
0:03:22I would give you a strong case for a loss at that point because even though I believe
0:03:26it to be on the BART platform, it would probably not be there anymore.
0:03:30But Jason is slightly more trustworthy than the average citizens of San Francisco.
0:03:35- Well, but, you know, I think the big picture here,
0:03:38the lesson here is that had you owned a wallet
0:03:42that would fit in your pocket,
0:03:43you probably wouldn't have brought a backpack to this dinner
0:03:47and therefore it wouldn't have been a problem
0:03:49and it wouldn't have--
0:03:50- I probably wouldn't have bought it anyway.
0:03:51I don't go anywhere.
0:03:52It's like the towel, another reference you don't get.
0:03:54Don't go anywhere without it.
0:03:55- Hitchhiker's Guide to the Galaxy.
0:03:57- Hey, hey, Casey read a book.
0:03:58- All right.
0:03:59- Anyway, yeah, I'm like that with the backpack.
0:04:02Even if it's just for like the little battery pack
0:04:04I have in there to recharge my phone.
0:04:06You never know.
0:04:06- How big is the battery pack?
0:04:08- I still showed you.
0:04:09It's a little tiny Duracell thing, you know.
0:04:10But I got lots of crap in there.
0:04:12I think I even have my iPad in there.
0:04:14I don't remember.
0:04:15- Honestly, I'm not trying to make fun of you here.
0:04:19Do you keep anything in your pants pockets?
0:04:21- My phone, I mean, I tried,
0:04:25like the 6 is a little bit big to have in my pocket,
0:04:28but generally, my phone is on me
0:04:30and it's in my front pocket.
0:04:32Don't like to sit down a lot with it in my front pocket like when I get in the car
0:04:35I tend to fall it's Bluetooth. I take it out and put it in the little cubby thing for
0:04:39Bluetooth thing in the car, but yeah, basically my phone. I guess my keys if I I don't know yeah
0:04:45Yeah, my keys if I'm going like if I go to the store
0:04:48I'm not bringing my backpack with me right so that my wallet has to go in my pocket when I go to the store or something
0:04:52But that's not a usual
0:04:53Thing but that we already see is a different different experience. I'm it's like
0:04:57Going out into space you gotta get your spacesuit on
0:05:01I could see some of that.
0:05:03- Yeah, I can understand that.
0:05:04- But anyway, I don't know why you're arguing with this.
0:05:06Like, I agree, I need a thinner wallet.
0:05:08And I thank everyone who has sent me
0:05:09all the suggestions for thin wallets.
0:05:12And now I feel slightly overwhelmed
0:05:13by the million possible choices.
0:05:15The only thing I know is I don't want one
0:05:17that makes your money visible on the outside,
0:05:19'cause that makes me uncomfortable.
0:05:21- Yeah, that's why I like the one that I have,
0:05:23which is a Ubi wallet, Y-U-B-I.
0:05:25- Maybe you said it's discontinued.
0:05:26- Yeah, and that's the thing is, after we talked,
0:05:28I was like, you know what, I should go ahead
0:05:29and order a new one, 'cause some of the elastic
0:05:31after the last couple of years has kind of fallen off or whatever.
0:05:35And it was originally Kickstarter, then I believe it was either an individual or a company
0:05:40was selling it outside of Kickstarter.
0:05:42And I went looking to try to find it and I could not find it anymore.
0:05:46And I'm really bummed about that because part of the beauty of the Ubi was that you had
0:05:49cards on either side of the wallet and then there was like a little cubby, if you will,
0:05:54it's a terrible description, but a little slot where you could stick bills.
0:05:58And it was, I thought it was really clever and I really liked it.
0:06:01And so now I'm going to have to figure out what you buy, Jon, and buy one of those for
0:06:06myself because I don't know what to do now.
0:06:10I can't get another Yubi.
0:06:11There are a lot of choices though.
0:06:12Like, seriously, it's overwhelming how many, this is not a new trend, this slim wallet
0:06:17thing, but there's a million of them and everybody loves the one they have.
0:06:20And I look at them all and I'm like, they all look very similar.
0:06:23I feel like it's something I need to see in person.
0:06:25Like it'd be difficult to buy online just by looking at pictures.
0:06:27you got to kind of feel it, how squishy it is, how bendy it is, how big it really is,
0:06:31how nicely the credit cards fit in and stuff like that.
0:06:33Yeah, I don't know. I personally can very -- I'm very happy with my Slimy wallet by
0:06:39a company called Koiono. Don't call it slimy. No, it's a slimy. It's black outside with
0:06:45red inside. It looks really cool and it's relatively inexpensive. I guess right now
0:06:50they're selling it for $45 and it's really nice. I've been using it now for something
0:06:56like four or five years.
0:06:57Yeah, but this is a non-starter for me, though, because it's a front pocket wallet, and that's
0:07:01just barbaric.
0:07:02What makes it a front pocket wallet?
0:07:04You can keep it in any pocket.
0:07:06It says in the URL, slimmy minimal front pocket wallet.
0:07:09Yeah, but what makes it?
0:07:10Other than the words, what makes it a front pocket wallet?
0:07:12It doesn't have one of those weird curves in it or anything.
0:07:15It's still a rectangle.
0:07:16If you put it in your back pocket, it will have one of those curves.
0:07:19That's true.
0:07:20Like Casey's Field Notes.
0:07:21That's very true.
0:07:22Well anyway, I'm giving you a hard time about the backpack thing, just out of fun,
0:07:27I am already envisioning all the emails I'm getting about how wrong I am and how right
0:07:31you are, because anytime anyone doubts you, Jon, the internet comes to your defense.
0:07:34I'm sorry to ruin your fun with facts.
0:07:36Well, you know, ultimately though, the wallet is not your problem. It's the contents of
0:07:42the wallet. Like, you have to fix yourself before you can fix the wallet.
0:07:46Obviously, you know, taking stuff out of my wallet now will only help so much, because
0:07:51is a very large wallet. So obviously if I got a slim wallet, not everything would make
0:07:54it from the old wallet to the new one, clearly, right?
0:07:58Yep. It's true. All right. Well, anyways, what else? Oh, the entire internet wrote to
0:08:04tell us, and we observed ourselves at WWDC, that the Notes app, as written by Apple, the
0:08:11backend is now indeed iCloud. It is no longer IMAP. Thank you to the entirety of the internet
0:08:17for letting us know that, because that is the case.
0:08:21And there's a one-time porting of your data.
0:08:23Like kind of like, what did they do with that in Yosemite?
0:08:25Like maybe it was iCloud Flow Library?
0:08:28I don't know.
0:08:29Something else.
0:08:29Anyway.
0:08:30You're talking about the documents moved to iCloud Drive.
0:08:33Oh, yeah, yeah.
0:08:33When they changed the storage, the document--
0:08:35there's a one-time operation.
0:08:37We say, are you ready to move everything over
0:08:38to the new system?
0:08:39Once you do that, you have two sets of information,
0:08:41one visible on the pre-LKAPU10 systems
0:08:44and one visible on the post.
0:08:45And they're divorced after that.
0:08:47And anyway, so I'm very happy to hear that it's not IMAP.
0:08:49And specifically, in case you said iCloud,
0:08:51specifically it's CloudKit, which is worth noting
0:08:55because iCloud as an umbrella term has a fairly mixed
0:08:58reliability history because some of the parts of it
0:09:01were not that great, like the core data sync
0:09:03or the original document store.
0:09:04A lot of people had problems with those.
0:09:06Whereas CloudKit-based things, including the new Photos app
0:09:10and a lot of apps written since last year,
0:09:13tend to be pretty well regarded.
0:09:14I don't think anybody has really had major problems
0:09:17with CloudKit so far.
0:09:18And even like any issue people have had with the Photos app
0:09:22seem to be related to the locally running code
0:09:25and in the app itself, not the cloud back end,
0:09:28which seems pretty solid.
0:09:30That's another follow up item.
0:09:31I'm pretty sure I said this to you in person and not
0:09:33on a podcast.
0:09:34This is the problem about seeing each other in person,
0:09:36talking about my experience using photos on the MacBook
0:09:38One and the Apple Store.
0:09:40How did it go?
0:09:41Yeah, so I went to the Apple Store
0:09:43finally to see the MacBook One, try the keyboard.
0:09:46I'm not going to talk about the keyboard now.
0:09:48save that for later. The short answer on the keyboard is my results were inconclusive.
0:09:53Anyway, it also had photos on it. I was trying to make the thing heat up, like, "Oh, it's
0:09:57fanless, blah, blah, blah. Can I do something to make this heat up?" And I immediately thought
0:10:00of running the new Photos app. Surely that will make it heat up, it will grind away when
0:10:03it launches and everything like that. And the MacBook One has a very wimpy CPU. I haven't
0:10:08looked at the specs, but I'm going to guess that it's probably in the same ballpark as
0:10:13my Mac Pro, like maybe even slower possibly.
0:10:17It might, I mean, in parallel tasks,
0:10:19it's almost certainly slower.
0:10:20In single-threaded, it's roughly equivalent to like a,
0:10:24I think it was like a 2011 era MacBook Air CPU.
0:10:28- Right, and that's what we have here.
0:10:29We actually do run photos on our 2011 Air
0:10:32that's back there, I can hear the fans worrying now
0:10:34because they're doing some backup stuff.
0:10:36And I wanted to try it out to heat up the MacBook One.
0:10:41And I was shocked by how incredibly fast and responsive
0:10:44everything was on that MacBook One using photos.
0:10:48I did all my normal stuff.
0:10:49It launched fairly quickly.
0:10:51I went through photos, I selected them,
0:10:53my favorite of them, I added keywords,
0:10:55I added keywords to big selections of things,
0:10:57like everything was instant.
0:10:58And the only thing I can think of is their photo library
0:11:00was of course like 2,000 photos and mine is 60,000.
0:11:03And the MacBook One, does it have eight gigs of RAM?
0:11:06Yes, and it has twice the RAM.
0:11:08So I still don't quite know exactly what it is
0:11:11about my 2011 MacBook Air that has so brutalized
0:11:14My best guess now is, I imported from iPhoto.
0:11:18I imported from iPhoto, assuming it shoved all the metadata
0:11:21into whatever it's using,
0:11:22probably maybe a SQLite database or something.
0:11:24Maybe all the operations I'm doing
0:11:26cause a database operation that takes a ton of time
0:11:29because my database is stuffed with everything.
0:11:31And if I took all these photos out and re-imported them fresh
0:11:34with no metadata, it would be fast, I don't know.
0:11:36I'm not excusing the Photos app
0:11:38because I basically did exactly
0:11:39what Apple expected me to do.
0:11:40I bought their program,
0:11:41I used it to store my family photos for years,
0:11:43the new one came out, I did the import process
0:11:45and imported my photos and everything is super duper slow.
0:11:48So I'm disappointed, but I have some amount of hope
0:11:52seeing that it's obviously not CPU related.
0:11:55I can't tell if it's RAM related.
0:11:57I'm hoping somehow things get faster in a future version
0:12:02because the experience of using photos
0:12:03when everything is fast is actually not horrible.
0:12:06- Excellent.
0:12:07The other piece of follow-up we have,
0:12:09and then I think we're done,
0:12:10is the keyboard trackpad thing on iOS 9.
0:12:15Is there a name for that?
0:12:18- Swipe not to type?
0:12:19I don't know.
0:12:20I think it was called QuickType.
0:12:23- Well, whatever it's called, whatever that thing is,
0:12:26it apparently does work on not only the 6 Plus
0:12:30in the iOS 9 beta, but interestingly, the 6 as well.
0:12:33Serenity Caldwell, friend of the show,
0:12:35has a 6 that she put iOS 9 on,
0:12:39and it was working on her phone as well,
0:12:41which was slightly surprising to me.
0:12:43Not a bad thing, of course, but a little surprising.
0:12:45So we should point that out as well.
0:12:47Are you guys running iOS 9 on your carry phones?
0:12:50- No.
0:12:51- Who would do that?
0:12:53- Apparently, Serenity.
0:12:54- Some people do that, actually.
0:12:55- Some people have to do it for a living, we don't.
0:12:57- Three or four years ago, I probably would have done that.
0:12:59But no, this year.
0:13:00I have it on my iPad, which I hardly ever use,
0:13:04and I keep coming back to it every couple of days
0:13:08to do something on it, and the battery is just completely dead.
0:13:13My experience on my beloved RetinaPad Mini, hi Steven Hackett, is not quite that bad,
0:13:17but it is certainly very slow. It is certainly randomly rebooting, and I know that because
0:13:24it says when you reboot, you know, you have to enter your passcode once you reboot, blah
0:13:28blah blah. And it definitely is not getting the battery life I'm used to it getting. However,
0:13:33I do like it and I did use picture-in-picture when I was on the plane back from San Francisco.
0:13:38I was watching the complications video while doing something else.
0:13:42I don't recall specifically what.
0:13:44And the picture-in-picture even on my now almost two-year-old iPad Mini was really,
0:13:50really cool.
0:13:51And it worked reasonably well.
0:13:52The only problem is it only works as with all these new hotness features.
0:13:56It only works with Apple apps or at least that's been my experience so far.
0:13:59But all in all, two thumbs up in principle for iOS 9,
0:14:03one thumb up for the beta so far.
0:14:05- Our first sponsor this week is Automattic.
0:14:09Automattic is a connected car adapter
0:14:11that plugs into your car's diagnostic port,
0:14:13and then they have smartphone apps
0:14:15that you can then do cool stuff with this,
0:14:17and it integrates with over 20 different apps
0:14:19to give you a better driving experience.
0:14:22They've sponsored us before.
0:14:23There's a bunch of new stuff since then.
0:14:24So what it's always been able to do
0:14:26is you pair it with the automatic iPhone or Android app,
0:14:30and then it can do a few cool things.
0:14:32It can diagnose your check engine light,
0:14:33it can tell you in plain English what's going on,
0:14:37it lets you clear the error code if it's a temporary error,
0:14:39like you let your gas cap open or something like that.
0:14:42It can give you a log of your trips
0:14:44and your parking locations,
0:14:46so you can track things like your fuel efficiency,
0:14:49you can never lose your car in a parking lot.
0:14:51If you have an accident,
0:14:52it can automatically call emergency services for you
0:14:55to help get you the help that you might need.
0:14:57And then it can also evaluate your driving efficiency.
0:15:00It gives you a score, you can match your goals,
0:15:03so that you can save money on gas.
0:15:05This can really add up to big savings over time.
0:15:08Now, they actually launched their own little app store
0:15:11for the car.
0:15:12They have over 20 apps available,
0:15:13and this allows you to use your car's data
0:15:15in all kinds of ways.
0:15:17So, just a few examples here.
0:15:18They have an app called Concur,
0:15:20which lets you pull your trips easily
0:15:22into your expense reports.
0:15:23So if you work at a company, Casey, you might have to do things like this. They also have
0:15:28integration with If This Then That, IFTTT, which gives you the power to build all kinds
0:15:33of recipes based on your driving. Recipes, of course, is an IFTTT term for various workflows
0:15:38and triggers and various things you can do based on certain events or stats that happen
0:15:43while you are driving. They also have a developer platform so that you, you developers, can
0:15:49and build apps using the cars data as well.
0:15:52There's three levels of data available for developers.
0:15:54There's a rest API, a real time events API,
0:15:57and a streaming SDK.
0:15:59The rest API is very, very full featured.
0:16:01It has, you can request drivers trip histories,
0:16:04distance, routes, times, locations, miles per gallon,
0:16:08and then you can even quickly launch your app on Heroku,
0:16:10Casey, you can use your dinosaurs or whatever
0:16:12and make that work.
0:16:13Anyway, go to developers.automatix.com
0:16:15to learn more about that.
0:16:16So anyway, back to Automata device.
0:16:18check it out whether you're a developer or not. If you are a developer, this is a pretty
0:16:21cool way to do new stuff that you can't really do without something like this. If you're
0:16:26not a developer, check it out to help improve your driving and to give you all the cool
0:16:29features to maybe to use some of these cool apps, use some of the APIs, use some of the
0:16:33triggers or just look at your metrics and get your measurements or check your engine
0:16:37light, stuff like that. Very cool stuff. Normally, this is a hundred bucks but for us, it's 20%
0:16:43automatic.com/ATP, that's automatic.com/ATP for 20% off,
0:16:47brings it to just 80 bucks, that's free shipping
0:16:52in just two business days, 45 day return policy,
0:16:55and there is no subscription fee per month.
0:16:58You don't have to pay like five bucks a month
0:16:59for the service or whatever, no, you buy the automatic
0:17:02device up front for 80 bucks with our coupon code,
0:17:05automatic.com/ATP, 80 bucks up front, and then that's it.
0:17:09No monthly fee, ships to you in two business days,
0:17:11check it out, automatic.com/ATP.
0:17:14Thanks a lot.
0:17:16All right.
0:17:17So we should probably talk a little more
0:17:19about what was released and discussed
0:17:22at WWDC to the best of our ability.
0:17:24I don't know what is and what isn't ND8 anymore.
0:17:27As far as I know, nothing's ND8, right?
0:17:29You can download all the WWDC videos
0:17:32without logging into Apple's website.
0:17:34So I think we could talk about anything
0:17:36that is in the WWDC videos.
0:17:38Excellent.
0:17:39So with that in mind, let's talk a little bit about the state of the union and some
0:17:43of the stuff that's been making the rounds over the last couple of days in the really
0:17:47nerdy developer circles, specifically around Bitcode.
0:17:50So Jon, do you want to kind of give us an overview as to what this is?
0:17:54First, after we recorded an episode of WWDC, I realized that we didn't talk about Bitcode.
0:17:59I'm like, "Oh my god, did I totally space on that?
0:18:01Did I forget because we didn't have any notes and I was just sitting there?"
0:18:04And no, because we said we were going to cover the keynote and we went through the keynote
0:18:08and Bitcode was not in the keynote.
0:18:11So that in itself is interesting.
0:18:13That what, this is what I was referring to before, the announcement that I was most excited
0:18:17and intrigued about at WWDC was Bitcode and State of the Union.
0:18:21And for the rest of the week, like boy, I can't wait to learn more about Bitcode in
0:18:25the sessions.
0:18:26And I, you know, obviously you can't go to all the sessions because it's a multitrack
0:18:30conference.
0:18:31I didn't go to all the sessions.
0:18:33None of the sessions I went to mentioned the word Bitcode.
0:18:36I believe that any of them have the word on a slide.
0:18:39I later found out from someone tweeting screenshots that the app thinning session that I did go
0:18:43to previously had bitcode in the description of the session and that was later removed
0:18:47and having gone to the session I don't think bitcode was mentioned there either.
0:18:52So that didn't tell me much of a bitcode but the reason I was excited by it is in the state
0:18:57of the union, a video that we will link in the show notes because everybody can download
0:19:00it and you don't have to, you know, log in or anything, was that it was going to be a
0:19:04a way to have a processor agnostic platform, agnostic-er, slightly more agnostic representation
0:19:14of your application that would be optimized for the specific platform that it's downloaded
0:19:19for.
0:19:21And this was an intriguing announcement because it freaked developers out and because it is
0:19:26great fodder for speculation about rumors.
0:19:30Right now when you submit an app to the App Store, you compile it, you build a release
0:19:34that you uploaded in some, what is it, like,
0:19:36it's all through Xcode, right?
0:19:37I've never actually done this, so I don't know.
0:19:39Marco?
0:19:39- The regular way to do it is now,
0:19:41it used to be like build an IPA, zip it up,
0:19:44upload it through a terrible web interface.
0:19:46Now you leave the terrible web interface to go to Xcode
0:19:50to prepare the upload and do it off there.
0:19:52There's probably a way to do it without that.
0:19:54There's probably some kind of like advanced enterprise tool.
0:19:56Yeah, but the way almost everyone does it is through Xcode.
0:19:59- But anyway, it does a release build
0:20:01with all your optimizations enabled
0:20:03enabled and it uploads the result to Apple and that is, you know, obviously it's signed
0:20:11by Apple and they do some other things with it, but in general, there's the expectation
0:20:15that the thing you built on your machine, especially for Mac apps where it's like literally
0:20:19running on the thing, like it's not, you know, maybe less so for iOS apps where you're always
0:20:22running it in a simulator and then you do the release build and you're running that
0:20:25on your device or whatever.
0:20:26But anyway, the expectation is the binary that you have made and tested is going to
0:20:31to be the binary that lands on people's computers.
0:20:33And that binary is a compiled binary
0:20:36targeting a specific architecture.
0:20:37You can make it for x86-64,
0:20:39you can make it for ARM7, ARM7s,
0:20:41like it's all sorts of processors you can target
0:20:43that limit the hardware you can go on.
0:20:44But the bottom line is you are creating
0:20:47a native binary executable that can run
0:20:50in iOS or OS 10 exactly as it is.
0:20:53And if you were to do an MD5 checksum,
0:20:55well, maybe not for the signing.
0:20:56I don't know, I'm trying to express the idea
0:20:58that like the thing that you debugged on your device,
0:21:00You make a release build, put it on your device,
0:21:02and you use it.
0:21:03That's the same code that's gonna be executing
0:21:04on somebody else's device
0:21:07when they download the app from the store.
0:21:09But Bitcode is saying, "We're going to build something
0:21:11"that is not native code for any processor,
0:21:15"and that's what we're gonna have on the store."
0:21:17And at some point in the future,
0:21:20I assume at the point of download,
0:21:23but really it could be almost any time,
0:21:25that code will be converted to native code
0:21:28that is specifically optimized for whatever it happens
0:21:30to be running on.
0:21:31Bitcode itself is not new.
0:21:34It's part of LLVM since I think version two.
0:21:37Previously, I think they called it bytecode.
0:21:39I don't know if it ever was bytecode
0:21:40or just differences how the stream format is made.
0:21:43But either way, it's just a compact binary representation
0:21:46of LLVM IR, which is the intermediary representation.
0:21:49And boy, there's a lot of acronyms for expanding.
0:21:52LLVM originally was an acronym
0:21:54that stood for low-level virtual machine.
0:21:55Now LLVM encompasses a much larger project
0:21:58but then that's kind of a misnomer at this point.
0:22:01But LLVM IR really is kind of assembly code
0:22:04for an imaginary processor
0:22:06with some vaguely idealized characteristics.
0:22:10I guess we'll link to my Swift thing.
0:22:11I think I talk about LLVM IR in there.
0:22:13So bit code is just LLVM IR,
0:22:15but instead of looking like text,
0:22:16it is a compact representation.
0:22:19If you can think of compiling your code,
0:22:20starting from source code,
0:22:22and it being transformed several times
0:22:24till eventually ends up at a binary,
0:22:25LLVM IR is slightly before it's changed
0:22:29into machine code.
0:22:30So they're saying we're gonna turn your program
0:22:33into LLVM IR and code that LLVM IR as bit code
0:22:35and that's what we'll have on the store.
0:22:38And when someone, again, we don't know
0:22:40when this is gonna take place.
0:22:41I assume it's on download, but you could take that bit code
0:22:44and download it to everyone's device and when they run it,
0:22:46it could be compiled just in time
0:22:47for their particular architecture.
0:22:48I assume they're gonna do it when you download it.
0:22:51So that's the technical gist of what they're doing here.
0:22:55they didn't talk a lot about it, so we don't know when this is all going to take place.
0:22:59Bitcode is, I'm going from memory here, mandatory for native WatchKit apps, is that correct?
0:23:04I believe that's right.
0:23:05And it said optional for iOS apps for now.
0:23:08Yeah, and it didn't say anything about the Mac, but I mean, there is nothing technical
0:23:13that makes Bitcode not able to work on the Mac, or that means it would have to be mandatory
0:23:18on the Watch.
0:23:19These are policy decisions.
0:23:20And it's, you know, but why is it mandatory on the Watch?
0:23:23Well, that's the newest platform.
0:23:24Nobody has made a native app for the watch except for Apple, so it's not like it's a
0:23:29big change.
0:23:30It's like, "Look, this is just the way it is in the watch.
0:23:31You're going to submit bitcode, right?
0:23:34Your release builds are going to upload bitcode to us, and then everyone else who gets it
0:23:37is going to get an executable binary optimized for the particular piece of hardware they
0:23:43have it on."
0:23:44So when they made this announcement in the keynote, I made a bunch of silly tweets about
0:23:49how this could...
0:23:52the obvious rumors to people are gonna say is,
0:23:53oh my God, this means ARM Macs,
0:23:54because if you're trying to change
0:23:57the application representation to be this thing
0:24:01that's not specific to any one processor,
0:24:02and then you optimize it on the fly,
0:24:04then you could change the processor architecture
0:24:05at any time, right?
0:24:06And then you would just recompile this bit code
0:24:08for the new architecture.
0:24:09So if they got everyone onto bit code
0:24:11and they changed to ARM Macs,
0:24:12developers wouldn't even need to rebuild their apps
0:24:14and resubmit, and you wouldn't need to have fat binaries,
0:24:16it would just be everything is bit code,
0:24:18and then you download it to your ARM Mac
0:24:19and it turns it into an ARM executable,
0:24:21you download it to your x86 Mac, turns it into x86 executable.
0:24:24That is the immediate fantasy rumor when people hear about bitcode.
0:24:29Unfortunately, as fun as that would be to speculate about, that's not really how LLVM-IR
0:24:34and bitcode work.
0:24:36LLVM-IR, although it is kind of imaginary assembler for an imaginary processor, it has
0:24:41things in it that are specific to an instruction set or an architecture.
0:24:48It's not completely pinned down, but it's not the type of thing where—I think you
0:24:53brought this up when we were talking about the endianness.
0:24:55In my research, I've determined that there is much more instruction set-specific stuff
0:25:02in LLVM IR than you would imagine, and it's not as trivial as just saying, "Well, LLVM
0:25:06R is completely processor-agnostic, and when we turn it into machine code, we can turn
0:25:09it into machine code for any processor."
0:25:11That seems not to be the case.
0:25:13I've been trying to find out what are the nature
0:25:16and number of those things, like what is it about LVMR
0:25:21that's pinned down to a particular instruction set
0:25:22and how deep does it go?
0:25:24I haven't been able to find any good examples
0:25:26of looking at the point I'm looking at the LVM source code.
0:25:29I realize I'm in over my head, I don't quite understand it.
0:25:31But anyway, if you are entertaining fantasies of bitcode,
0:25:35meaning that if all our apps are updated to bitcode,
0:25:39they can change processes without any problem with that,
0:25:41as far as I can tell is absolutely not the case.
0:25:44So the next question is, why the hell does bitcode exist
0:25:49if not for my fantasy scenario of enabling our Macs?
0:25:52Guys have any theories?
0:25:54- Well, I mean, there's a lot of other optimizations
0:25:56they could do, like, you know, maybe this would just
0:25:59help them, first of all, there's like,
0:26:01just better optimizations for the next step, you know,
0:26:04I don't know quite how low level the bitcode is,
0:26:08but I imagine it's not just like a text version
0:26:11of assembly code, like I imagine it's like a little bit higher than that, so you know,
0:26:15if they develop new optimizations for how they translate that into the assembly language,
0:26:21even within the same CPU family, just over time, they develop some cool optimization,
0:26:25they can then apply that to apps. More significantly probably, they could, you know, when you move,
0:26:33when you make a minor update within a CPU architecture, so you go like, you know, from,
0:26:38ARMv7s to ARMv7k or whatever, I don't know all those code names and which ones are minor,
0:26:46but when Intel releases a new CPU with new streaming instructions, new vector instructions,
0:26:54if there's a way for them to use bitcode to retroactively optimize apps for new instructions
0:27:01and things like that for more minor CPU revisions, that could be useful. I don't know how
0:27:08useful that is, you know, as like a percentage of overall performance and, you know, like
0:27:12I don't think, I don't see why this is worth the trouble yet. And I think over time we
0:27:21will see why it's worth the trouble. But right now it is not immediately apparent because
0:27:25you're right, like the big changes would involve things like byte order changes where like
0:27:31that that's a bigger problem and this can't automatically deal with that properly because
0:27:35at the level at which byte order assumptions happen, this can't do it.
0:27:39I think it's even deeper than that.
0:27:41Even if you had an architecture that had the same byte order, that LLVM IR still pins things
0:27:46down with a target architecture in mind.
0:27:49Because that representation is the thing that the optimizer can work on.
0:27:51It's marked up more than assembly would be.
0:27:54The thing that consumes LLVM IR and outputs machine code, it knows much more about the
0:28:00structure of things.
0:28:01LVM are sort of annotated with much more information
0:28:04that assembly would be to indicate types
0:28:08and from whence each bit of code came and what a function is.
0:28:13And it's not just an ASCII representation of machine code.
0:28:18Far from it.
0:28:18So that's why the thing that produces a machine code
0:28:22can optimize it in ways that you can't optimize if you just
0:28:25have a .s file and say, oh, now I'll optimize that.
0:28:27There's lots of optimizations you
0:28:28can't do to plain old assembly because you just
0:28:30enough about the meaning of the original program. It's like, well this assembly
0:28:34does what it does, I don't know if it's safe to make this transformation, but LVM IR
0:28:38has more information about it. Before we get into like the worth the trouble, like
0:28:43probably into the trouble aspect of it, it's interesting to think about why this
0:28:48is even possible or a thing. This is only possible if, only feasible, because Apple
0:28:55controls the means of distribution for all iOS
0:28:59and watch applications, setting aside jailbreak
0:29:01and blah, blah, blah, right?
0:29:02That means that they can, A, they can mandate this
0:29:06and say, guess what, you're gonna submit
0:29:08bit code for the watch.
0:29:08You're like, all right, I guess I'm gonna submit
0:29:10bit code for the watch.
0:29:12And B, they know where everybody's getting
0:29:14their WatchKit apps from.
0:29:15So if the only source for WatchKit apps
0:29:18only ever has bit code, any benefits,
0:29:21which we'll talk about in a second,
0:29:22that they might have will benefit the entire platform.
0:29:26It's not like, well, it'll benefit like on the Mac,
0:29:28if they did it on the Mac,
0:29:29well, it'll benefit for people
0:29:30who download from the Mac App Store,
0:29:31but people can put DMGs up on their websites
0:29:34that do or don't have bitcode in it.
0:29:35So, you know, like you're not getting that advantage
0:29:39across the platform, but for iOS and the watch,
0:29:41whatever benefits Apple thinks it's getting,
0:29:43it gets everywhere.
0:29:44iOS, of course, would have to go through a conversion.
0:29:46The watch will be bitcode, all bitcode from the beginning.
0:29:49So, lots of interesting things become possible
0:29:54when all of your software funnels through a single point.
0:29:57Lots of good things and bad things,
0:29:58and I think Apple's hoping this is one of the good things.
0:30:02- Right, and the bad things, I think, about bitcode,
0:30:06what scares me as a developer,
0:30:07you know, like a lot of developers are saying,
0:30:08"Well, this is gonna change my binary,
0:30:10"I'm worried about crashing," and stuff like that.
0:30:12That's valid.
0:30:13I'm not necessarily worried about that myself,
0:30:16although that does introduce an interesting problem
0:30:18of this would then, like, you know,
0:30:21if this is, say, crashing on an iPhone 5S,
0:30:25and you don't have an iPhone 5S because now that's old
0:30:29and you don't have one anymore
0:30:29or you never got one to begin with,
0:30:31then you might have to go get an iPhone 5S
0:30:33just to even reproduce the crash,
0:30:35if you'll even be able to.
0:30:36So that's a problem.
0:30:38I think that's a minor one, though.
0:30:40To me, the bigger problem here is,
0:30:42if you look at, you know, what you mentioned earlier
0:30:46about how developers want people to build
0:30:49their final binary, ship it to Apple,
0:30:51and then have Apple ship that to devices
0:30:54so they know the final bits they built.
0:30:56In reality, that has never quite been the case
0:30:59because of code signing.
0:31:00And even though it's not technically part of the app binary,
0:31:04it's an important enough part that every so often,
0:31:07as I ran into with this paper a long time ago,
0:31:09and as still happens with somebody every few months,
0:31:13every so often, code signing breaks on Apple's side.
0:31:17And something goes wrong where apps reach the App Store
0:31:20with invalid code signing by Apple.
0:31:24And so what happens to the user is they tap to open them
0:31:27and they appear to just crash immediately on launch.
0:31:30You might see the launch default image,
0:31:34but for the most part, they just crash on launch.
0:31:36They appear to be, at least.
0:31:38In reality, code signing is just failing and exiting.
0:31:40But every so often, you have this problem as a developer
0:31:45where your app crashes because Apple messed up
0:31:48while modifying it on the way to the store.
0:31:51Bitcode is now giving them another way to do that.
0:31:55It's giving them another opportunity for things to go wrong.
0:31:59That, what worries me is not that a Bitcode abstraction
0:32:03would be insufficiently tested,
0:32:04that a Bitcode optimization would go wrong.
0:32:07What worries me is like now there's another step
0:32:10between me and the customers,
0:32:12regardless of what that step is,
0:32:14there's another step that can cause problems when it breaks.
0:32:18And I'm not gonna, not even gonna say if it breaks,
0:32:20'cause we know these things break sometimes.
0:32:22That is what is the big risk here,
0:32:24is like yet another thing that Apple's going to modify
0:32:27about my app on the way to the customers
0:32:28that might occasionally go wrong.
0:32:30- Yeah, and that's what developers are wary about,
0:32:32is it's a loss of control.
0:32:33Like already, you know, you're not controlling
0:32:36who your app is distributed to and so on and so forth,
0:32:38but from a technical perspective,
0:32:39You always want to have the ability
0:32:43to have the exact same thing running
0:32:45that the customers have, even if you can't actually
0:32:46communicate with them.
0:32:47You want to know-- you want a predictable chain of events.
0:32:51And there's always parts that are not predictable.
0:32:54Even though Xcode is running on your system,
0:32:56you don't know the internals of the compiler.
0:32:58There could be a compiler bug and a point release of Xcode
0:33:00that hosts your binary that somehow makes it run.
0:33:02There's always bugs.
0:33:03But adding more of those things makes
0:33:04developers feel uncomfortable.
0:33:06And it's uncertainty.
0:33:08We've been battling with code signing for tons of years now,
0:33:11and it drives people crazy for a variety of reasons.
0:33:14But this just adds another thing.
0:33:15So is this going to be worse than code signing is in terms
0:33:18of things you have to fight with?
0:33:19I think it'll probably be better just because, especially
0:33:22in the short term, this is just sort of stopping short
0:33:26of that final step, targeting at this point
0:33:29a single architecture because there only is one Apple Watch.
0:33:32So there's some runway for them to work out the kinks in this.
0:33:35Because the idea is like, oh, I don't
0:33:36know how it's going to be-- well,
0:33:37you will know how it's gonna be built
0:33:38because when you upload the bitcode to the store,
0:33:40it's going to convert it to a binary
0:33:41exactly the same way it does in your system
0:33:43because everybody has the same watch
0:33:44'cause there's only one watch, right?
0:33:45So it's an ideal platform to test this out on.
0:33:48What people are worried about is,
0:33:49I test it on all my devices, but like you said,
0:33:52when the bitcode gets converted to the A5,
0:33:55it turns out the optimizer does something bad on the A5
0:33:57and it crashes and I don't have an A5 device.
0:33:59And maybe that would still happen with the binary,
0:34:01but you're not entirely sure.
0:34:02Like for example, if the compiler emitted an instruction
0:34:05that has bad performance characteristics
0:34:07or reveals a bug or something on the A5,
0:34:11you wouldn't know that unless you ran it on an A5.
0:34:13So not having an A5 could be a problem in all situations.
0:34:17Trying to think about why Apple would wanna do this.
0:34:20Again, I'm basically ruling out,
0:34:22oh, this makes us able to change
0:34:24processor architectures easily.
0:34:26I don't think this helps or hurts in that regard.
0:34:29But Apple does change, as Marco said,
0:34:34the minor parts of the architecture.
0:34:37They make their own chips essentially at this point.
0:34:40Different chips have different vector units.
0:34:42Maybe they add an instruction here or two.
0:34:44Maybe they tweak something.
0:34:47Maybe they try to change one of their, you know,
0:34:51underlying frameworks or libraries
0:34:54to do something smarter on the new, you know,
0:34:58the A9 or the A10 or the A11.
0:35:00All these things might seem like minor concerns,
0:35:03but from Apple's perspective,
0:35:05if they do something really cool in the A10
0:35:08and they change around a bunch of things having to do
0:35:12with like number registers, pipeline depth,
0:35:16size of the vector units,
0:35:18like a new specialized instruction for a particular thing,
0:35:22they're helpless to change all the, what is it, millions?
0:35:26I don't know how many apps there are on the App Store.
0:35:28Lots and lots of apps on the App Store
0:35:30that are already compiled into machine code.
0:35:32And there's nothing they can do short of nagging developers
0:35:35saying, hey, your app, not so much would run faster,
0:35:39but your app would be much kinder to our battery
0:35:41if you would just recompile it.
0:35:42Because actually all of this, whatever,
0:35:44Core Audio, Core Image, whatever, like VDSP,
0:35:48whatever little library you're using in your app,
0:35:51if you could recompile it for the A10,
0:35:55it would be much nicer for battery life,
0:35:56or for the S2, or for the S3, or whatever.
0:36:00I'm thinking mostly in terms of battery life,
0:36:01not performance because that's where Apple's been concentrating these days,
0:36:04and they have no leverage to do that. So Apple, you know, is such a control freak
0:36:08as a company, but like, you know, it makes their products better. How can they
0:36:11convince a million developers to rebuild their apps? They can't. And people will
0:36:14just keep downloading apps, they keep slaughtering their batteries, even though
0:36:18Apple has done this super hard work in the A9, A10, A11, or whatever, S1, S2, S3,
0:36:23S4, to try to make a more battery-efficient architecture. And
0:36:27because they do control the means of distribution of all the apps, like we've
0:36:31got all these apps, we've got all these binaries, but they're not taking
0:36:34advantage of all this hard work we're doing. Ah, but on the watch, if they make a
0:36:37bitcode from day one, they can be assured that if they make the S2 or the S3
0:36:40massively more battery efficient by tweaking the particular instructions
0:36:43that they have, that they don't need developers to rebuild their apps. They
0:36:46will do it. When they optimize the bitcode to make the native binary for
0:36:51the S3, they will do the transformation that uses the new instructions that are
0:36:56nicer on the battery on the S3. So your same app that you didn't have to
0:36:59recompile that you never looked at that you just put in the store or whatever your you
0:37:02know little doohickey or and probably not gonna be a lot of games but that would be
0:37:06the ideal case will suddenly be more battery efficient on the S3 without you having to
0:37:10do anything and that may seem like a minor thing but I think that is more than enough
0:37:17reason for Apple to want to do this because this is exactly what they always want to do
0:37:20what what can only Apple do only Apple makes its own CPUs makes its own compiler it may
0:37:26the distribution of all the applications, like they have the complete package here and this is
0:37:30one of those things you can do when you have the complete package. And I think that's probably much
0:37:34more exciting for Apple than it is for us on the outside. And I think Apple is going to endure the
0:37:42potential scariness for developers. I mean, they've proven they'll do that with sandboxing, they'll do
0:37:47it with code signing. The developers will endure it because that's where the customers are and
0:37:53and that's where the money is,
0:37:54and you gotta do what you gotta do.
0:37:56But I definitely think this is the most interesting
0:37:58and probably least understood, including by me,
0:38:01because Apple said nothing about it, announcement at WWDC,
0:38:04and I'm very interested in learning more about it
0:38:06from anyone who's willing to tell me anything about it.
0:38:09(laughing)
0:38:11- Now I think you hit the nail on the head, John,
0:38:12that basically this is about keeping their options open,
0:38:15and Apple tends, from what we can tell,
0:38:18to like to keep their options open.
0:38:20So I'm curious to see, like you said, where this goes.
0:38:23And if we'll ever hear of a time where Apple says,
0:38:26which I doubt, but, you know, "Oh, hey,
0:38:28this is all possible because of Bitcode."
0:38:29You know, we've all kind of realized that, say,
0:38:32iPad multitasking is possible because of auto layout
0:38:35and size classes, and that's kind of been a wink and a nod
0:38:40from Apple that has indicated,
0:38:42well, obviously we could all put it together,
0:38:44but also indicated that.
0:38:46So I'm anxious to hear more about this as time goes on.
0:38:49I don't know.
0:38:50I wonder if they'll even mention it again.
0:38:52But in terms of future possibilities, it's not so much future from Apple's perspective
0:38:57because the A9, the S2, the S3, the A10, those are all real things inside Apple with some
0:39:03of them probably done, some of them have designs.
0:39:05So if they're going to fiddle with some instructions for battery efficiency, those instructions
0:39:10already exist.
0:39:11They're already in that situation where they say, "When we release the S2, all of our watch
0:39:15binaries are not going to take advantage of these great new instructions that we've added
0:39:20or that we've tweaked or these new execution units or the different register layout or
0:39:24whatever because the machine code has already been built and the loops have already been
0:39:29unrolled and all that stuff, we can't rely on the rename registers to do all the shuffling
0:39:35for us.
0:39:36If only we could rebuild all the watch binaries, take advantage of what we know is going to
0:39:40be a great feature of the S2 or S3 because it's already done, they already have those
0:39:44features.
0:39:45From our perspective, it's like,
0:39:46oh, this opens up possibilities.
0:39:47From Apple's perspective is, we're doing this now
0:39:49because we know for sure, because we're making the chips,
0:39:52that we don't want a bunch of binaries built for the S1
0:39:55to be stuck in the store for years and years
0:39:57because we can't get developers to recompile them.
0:40:00And iOS, again, they have to transition that.
0:40:02And the Mac, they're stuck in the situation
0:40:04where the bottom line is, I don't know if it's most,
0:40:07but certainly not all Mac software
0:40:10comes from the Mac App Store,
0:40:11so I'm not sure what they're gonna do there.
0:40:13But like I said, this technology,
0:40:14They could do it in the Mac App Store.
0:40:16They are doing it on iOS and the Watch.
0:40:18It just seems like it has less of an advantage there.
0:40:21And frankly, they don't care that much,
0:40:22it seems, probably, on the Mac.
0:40:23Like, oh, you want to rebuild your binaries to take it--
0:40:27because they don't make the CPUs.
0:40:28Intel does.
0:40:29And so they're not as privy to Intel's roadmap
0:40:31as they are to the A-line of processors.
0:40:35I wonder also how much of this is in response to
0:40:39and preparation for the world we live in now.
0:40:42which is like back in the olden days,
0:40:44you know, 2008, 2009, early days of the App Store,
0:40:48Apple could announce any change really,
0:40:50or at least any new hardware,
0:40:52and a very large portion of apps in the store
0:40:55would be updated within a reasonable amount of time
0:40:57to account for that, to accommodate that.
0:40:59They could release like, you know,
0:41:01they released the iPad, and developers adapted to that.
0:41:05They eventually released, you know,
0:41:07even as recently as the iPhone 5,
0:41:09they would release a new screen size,
0:41:11and most apps got updated relatively quickly to it.
0:41:15But I think as we're seeing,
0:41:17the rate of that is slowing down dramatically.
0:41:19So now we have apps like,
0:41:21the iPhone 6 is now almost a year old, and 6 Plus.
0:41:26They're now almost a year old.
0:41:28We're seeing apps from people who have a lot of users
0:41:32but don't necessarily care about their apps, like banks.
0:41:35We're seeing apps like,
0:41:37I still have so many apps on my phone
0:41:39from companies that have plenty of resources
0:41:41to update them that don't even run natively
0:41:45on the iPhone 6 screen, still.
0:41:48Some of them are even adding other features.
0:41:50Like, I think somebody said their bank supports Apple Pay now
0:41:53but their app still doesn't support iOS 6,
0:41:56or I mean the iPhone 6 screen.
0:41:58Like, there are so many of these things.
0:42:00And the way Apple usually adds these new features
0:42:04or new support to apps is they build in
0:42:06some kind of compatibility mode where the app just scales
0:42:09to the new screen size or whatever the case may be
0:42:11or it doesn't get the new features or whatever.
0:42:14And only apps that are built with the new SDK,
0:42:19that are compiled against the new SDK,
0:42:21only they get the new features.
0:42:22And they do this so that when you update OSs,
0:42:25a whole bunch of apps don't break.
0:42:27The limitation, or the downside to this is like right now,
0:42:30everyone's installing the beta of iOS 9
0:42:33on their iPad Air 2s to try split screen,
0:42:36and none of their third party apps work yet.
0:42:38because only third party apps built with the week old
0:42:42iOS 9 SDK, and that are somehow now available
0:42:46to their customers, which can't even exist
0:42:48in the app store yet, it's only through TestFlight,
0:42:50only those will be running in split screen mode.
0:42:53And so you have this new feature,
0:42:54and then when iOS 9 is released this fall,
0:42:58presumably with a larger iPad also,
0:43:01there's gonna be the vast majority of iPad apps out there
0:43:05are not gonna be compatible with these new features.
0:43:07they might not be compatible with the new iPad screen size.
0:43:12And that hurts Apple, it hurts Apple's hardware ambitions
0:43:16and pushing the roadmap forward
0:43:18and pushing the software SDK forward.
0:43:20It hurts them that so many apps are not being updated
0:43:24in a reasonable amount of time to their new stuff.
0:43:27So they have to come up with ways to increase the chance
0:43:31that they can just opt everyone in rather than right now
0:43:34where everyone gets opted out of new changes.
0:43:36And so one of those things is auto layout.
0:43:39One of those things is launch image storyboards
0:43:43instead of just flat images.
0:43:45And maybe Big Code is part of that too
0:43:47in what is probably a small way,
0:43:50but it has to be related,
0:43:52'cause this is a big problem Apple faces
0:43:54in the App Library these days.
0:43:56And I see it only getting worse in the future
0:43:58as not only as the economics of the App Store get harder,
0:44:02but also as Apple seems to be increasing
0:44:05at which they are adding new device capabilities,
0:44:09adding new screen sizes.
0:44:10And on the watch, maybe when watchOS 3 comes out next year,
0:44:15presumably, the watch layout is so simple.
0:44:21It's this kind of like stack view based hierarchy.
0:44:23Like what you get on the watch layout wise, UI wise,
0:44:26is so simple that if they added a new watch screen size
0:44:30next year or this fall or spring or whatever,
0:44:33if they add a new screen size to the watch,
0:44:35they might be able to just opt everyone in.
0:44:38They might not have to do the default opt out
0:44:40and then scale it to some stupid blurry resolution.
0:44:43They might be able to just opt everyone in
0:44:44and it just works because apps are so limited
0:44:46in what they could do layout-wise.
0:44:48They've been beating us over the head
0:44:49from day one with WatchKit saying,
0:44:50don't assume a screen size.
0:44:52And with things like bitcode and auto layout,
0:44:55and maybe this is all going towards that goal.
0:44:59- Only time will tell.
0:45:00But what else is awesome these days?
0:45:03Our second sponsor this week is Squarespace.
0:45:06Squarespace, build it beautiful.
0:45:08You can build so many kinds of websites with Squarespace.
0:45:11It is so hard to justify building a website any other way
0:45:15for so many types of things.
0:45:18So let's say you're building a site for yourself.
0:45:21You have a blog, a portfolio, maybe you're a photographer,
0:45:23you have a photo portfolio.
0:45:25My wife uses it for that and she loves it.
0:45:27Maybe you have a restaurant or a business,
0:45:30you want a site for that.
0:45:31If you want to have a store where you sell t-shirts, you can do that.
0:45:37If you want to have a site for a book or an album or whatever, you can do all this with
0:45:41Squarespace.
0:45:42There are so many kinds of sites you can make with Squarespace.
0:45:45Now, I've used a lot of tools for building websites before, and I can build my own websites
0:45:49from scratch.
0:45:50I know how.
0:45:51I know how to run servers.
0:45:52But in so many cases, it's just not worth it.
0:45:55Even for geeks like us, it is so often just worth hosting on Squarespace rather than setting
0:46:01up your own server somewhere or building your own CMS from scratch, it is so really worth
0:46:06doing that. So Squarespace makes it simple, powerful, and beautiful to make websites.
0:46:12They have a robust and reliable platform, state of the art technology powering your
0:46:16site. They ensure maximum stability under load. If you get slammed by a big traffic
0:46:21load, they will keep your site up. They have maximum security. You don't have to worry
0:46:25about your site getting hacked. I don't think I've ever heard of a Squarespace hack, honestly.
0:46:28I certainly can't remember one, which is pretty impressive for a service that size.
0:46:34All their designs are beautiful and professionally designed and they're all responsive.
0:46:39So your design looks great on every device every time.
0:46:42The screen sizes change over time and as new things are added, Squarespace is on top of
0:46:47it.
0:46:48As I mentioned earlier, if you want to have a store with commerce, you can sell digital
0:46:52or physical goods.
0:46:54It's all included in the platform.
0:46:56So check all this out.
0:46:57There's so much you can do in Squarespace.
0:46:59Everything is WYSIWYG, you know,
0:47:00what you see is what you get.
0:47:01I don't know if I'm allowed to pronounce that like that,
0:47:03but I'm gonna say WYSIWYG.
0:47:05Everything is WYSIWYG.
0:47:06Everything, you know, you can drag and drop
0:47:09and you can move things around,
0:47:10or if you wanna actually inject code, you can do that too.
0:47:14You can write in markdown if you want to.
0:47:16Really cool stuff.
0:47:17Check it out.
0:47:18Now, normally they offer a,
0:47:21they have a free trial with no credit card required.
0:47:24Now, they have a special deal now.
0:47:26If you start your trial soon, before June 30th,
0:47:31if you sign up for Squarespace's professional
0:47:32or business plan, you will get a free year
0:47:36of custom email and business tools when you sign up.
0:47:39So start your free trial now to get into this deal
0:47:42before June 30th, and then when you buy,
0:47:44you can get the free year of custom email
0:47:46and business tools for the professional or business plan.
0:47:49So check it out.
0:47:50Otherwise, if you don't need that
0:47:51or if you missed the deadline, don't worry, try it anyway.
0:47:54Go to squarespace.com, use offer code ATP to get 10% off your first purchase and to
0:48:00show your support for our show.
0:48:02So once again, squarespace.com, start a free trial, no credit card required.
0:48:06It's great.
0:48:07Build a site, see if you like it.
0:48:09If you do like it, use coupon code ATP for 10% off your first purchase.
0:48:14Thank you very much to Squarespace.
0:48:15Build it beautiful.
0:48:16Just want to save you from feedback that you may get, Marco, after your last talk about
0:48:21the analogy between size classes and a lot of those stuff.
0:48:24Oh no.
0:48:25Marco was not suggesting that Bitcode will allow your applications to run at different
0:48:28screen sizes.
0:48:29He was making an analogy.
0:48:31Right, and I'm saying, I think it's part of this overall picture of trying to get to the
0:48:38point where Apple can make a new device that might have a new screen size, that might have
0:48:43a new CPU.
0:48:45They can make a new device and they can opt apps into the new features rather than right
0:48:49now where apps are all opt-out until they're built to the new SDK.
0:48:52Yeah, Apple's getting much better at that.
0:48:54Because you can feel Apple's frustration of--
0:48:56I mean, they kind of did it to themselves.
0:48:58What do you mean, an iPhone SDK?
0:49:00I guess, here, let's slap this together.
0:49:04Everything was fixed size, and they changed the screen size.
0:49:07It's like they're working-- as we said in past years,
0:49:08they're working their way up to what they have now,
0:49:10which is a much more flexible layout system that can lend
0:49:12itself to features like split scheme.
0:49:14But it took them a long time to get there.
0:49:15But it's really hard to do that, even on the watch.
0:49:17Like you said, the watch UI is so limited.
0:49:20Surely the people doing the watch kit and everything
0:49:22like keep in mind that screen sizes may change
0:49:25so we should do everything we can.
0:49:26We've been through this once before.
0:49:28So in the watch kit thing, make sure we do everything
0:49:31so that nothing is fixed size, nothing is specified,
0:49:33just really keep a very limited API.
0:49:38But even then, it's so hard to do things in a general way.
0:49:41It's not like they're trying
0:49:42not to telegraph future stuff.
0:49:43It's just so hard to do everything in a general way.
0:49:45And a good example is, what was it,
0:49:47one of the sessions they were talking about,
0:49:49the complication sizes and the graphics
0:49:51that you can include, and it was like,
0:49:53you can include one graphic for 38 millimeter size,
0:49:55one graphic for the 48 millimeter size,
0:49:57and then an at 2X size.
0:49:59And they said, you know, if you don't include
0:50:01any of the other ones, we'll just fall back to at 2X.
0:50:03Also, if there's a watch that is not 48,
0:50:06and not 38 and not 42 millimeters, we'll use the 2X.
0:50:11And so they don't wanna say we're gonna make
0:50:14a 38, a 42, and a 46, 'cause that would telegraph
0:50:17they're having a 46, but at the same time,
0:50:20if they come out with a different watch size,
0:50:22good app developers are going to want to make
0:50:24a pixel perfect native size for their new watch size.
0:50:27Because they don't know what that watch size is,
0:50:29they just have one kind of fallback
0:50:30that they can kind of use in a pinch.
0:50:32So, you know, it's better than not having a fallback.
0:50:35It's better probably than scaling the 38 to the 42 size up.
0:50:39But, you know, it's just so,
0:50:41there are some things that just have to be fixed
0:50:43for the device that you're doing,
0:50:44particularly artwork, because, you know,
0:50:45the whole fantasy back in the day was like,
0:50:47everything will be vectorous and it will look good,
0:50:48but that's not the reality of pixel art.
0:50:51Good UI designs, especially when they're microscopic
0:50:54like they are on the watch.
0:50:55Someone's gotta sit in there with the individual pixels
0:50:57and lay them out.
0:50:58If they come up with a new size,
0:50:59having something scaled is better than nothing,
0:51:01but you're gonna have to go through and change it anyway.
0:51:02And I mean, it just goes to like this,
0:51:05you can't make it so that we can do anything
0:51:07and all your apps will run perfectly
0:51:08and take advantage of all the new features.
0:51:10They're just trying to do everything they can.
0:51:11And bit code is the hardware side of that.
0:51:13Like under the covers,
0:51:14we keep doing a bunch of crap down there
0:51:16and we hate the fact that your binary
0:51:17that you haven't updated in two years
0:51:19is gonna be plunking onto people's phones
0:51:20because they love your game or whatever.
0:51:23- Or feet. - Yeah.
0:51:24So the motivation for Apple to do this is so clear to me
0:51:30and the discomfort from developers,
0:51:35I don't wanna make a prediction,
0:51:37but I'm really hoping that it turns out
0:51:40to be mostly a non-issue in the same way
0:51:42that compiler bugs and stuff like that,
0:51:44or even code signing difficulties.
0:51:46In the grand scheme of things,
0:51:49app review policies feel like a much larger,
0:51:52both potential and actual damage
0:51:54to the experience of developers than bugs.
0:51:56'Cause bugs get fixed.
0:51:57Bugs, even when they did that thing with the code sign,
0:51:59that was pretty much the biggest disaster
0:52:01you could possibly imagine, they fix it, right?
0:52:04Whereas app store policies try to convince someone
0:52:07that it's a bug.
0:52:08Is it a feature?
0:52:09Is it a bug?
0:52:09Is it intended?
0:52:10Is it not?
0:52:11Is it accidental?
0:52:12What are the actual effects?
0:52:13Much more difficult.
0:52:14I have confidence that bugs will be addressed and fixed,
0:52:18and I hope there aren't too many of them.
0:52:20- All right, we should probably talk about Swift 2.
0:52:23And I don't remember if we got to this
0:52:25during the last episode or not,
0:52:27but among other things, it's going to be open-sourced
0:52:29later this year, including support for Linux
0:52:33coming directly from Apple,
0:52:35which is pretty exciting and interesting.
0:52:37And I, for one, am extremely curious to see
0:52:41what kind of adoption it gets from the Linux neckbeards
0:52:45and all the server-side developers that run on Linux.
0:52:49And Marco, you're one of those.
0:52:52I'm curious to see how that goes,
0:52:53because obviously JavaScript seems to, in many ways,
0:52:57be the flavor du jour for new server development,
0:53:02obviously Node.
0:53:03- Which just goes to show that it doesn't need
0:53:04to be a good language to get successful on the server.
0:53:06(laughing)
0:53:08- Although JavaScript isn't that bad, but anyway.
0:53:10- The whole reason JavaScript is on the server
0:53:12is because it's on the client.
0:53:13That's the whole, because people are like,
0:53:15I don't wanna have two different code bases
0:53:16to do similar things.
0:53:17Can I have the same code in all places?
0:53:19I can't change the code in the browser,
0:53:20therefore I kinda only have to change it.
0:53:21It's a tragedy is what it is.
0:53:23(laughing)
0:53:25It's just, it's like an infection that's just leaking out.
0:53:27You know, I have never played Pandemic,
0:53:29but I imagine this is what the game board looks like.
0:53:31(laughing)
0:53:32Board game reference for Marco.
0:53:34- I have Pandemic, thank you.
0:53:36- I'm sure you do.
0:53:37I'm waiting for next year's big web framework thing to be VBScript.
0:53:42Oh, God, no.
0:53:44Just no.
0:53:45Anyway, so with Swift 2, we're going to get Swift for Linux.
0:53:49And the other thing that was interesting about Swift 2, and this seems to be kind of the
0:53:55darling WWDC talk of this year, more so than I can recall from previous years, everyone
0:54:02seems to be consistently pointing to protocol-oriented programming in Swift, is that correct?
0:54:09Before I take a big dump all over this protocol extensions, I wanted to say one thing about
0:54:15Swift for Linux. We did talk about open sourcing Swift in the previous show, because that was
0:54:20in the keynote. The reason I put it in there is what we didn't talk about is what you just
0:54:22mentioned, that Apple said, "Hey, we're open sourcing it, blah, blah, blah." And open source,
0:54:28the standard library and Swift will be available for iOS, OS X, and also Linux.
0:54:34The word Linux was on a slide in an Apple keynote presentation.
0:54:37Apple is not, I assume, making Swift for Linux the goodness of their heart.
0:54:44And so you have to ask, why are they making it?
0:54:46One potential reason is, if you're going to open source something with the idea of,
0:54:50you know, we talked about this last show, making Swift viable for a larger community.
0:54:57can't be confined, it can't be proprietary, that limits, you know, you're not going to
0:55:02get world domination with Swift if it's just an Apple thing, it has to be everywhere.
0:55:06And if you just open-sourcing it isn't enough to show that it's everywhere, it helps to
0:55:09have a place where you can port it to say "see", it actually is portable, it's not just
0:55:15a bunch of source code that you can't even build anywhere else, Linux is a super popular
0:55:19platform, Linux is the open-source darling, here is a Linux version of Swift that you
0:55:24can compile and run on Linux and do Swift things on Linux, both to prove to ourselves
0:55:29that we are correctly open sourcing things, which they haven't yet by the way, this is
0:55:32like by the end of the year, and to show that it's real, to show that it's not like an empty
0:55:39political gesture.
0:55:40The other possibility is that, and depending on how cynical you are, potentially the more
0:55:47likely possibility is that Apple has a bunch of servers too, and I'm pretty sure Apple
0:55:53Apple servers aren't a bunch of X-serves at this point.
0:55:57And I'm sure Apple probably has more Swift code than any other corporation in the world
0:56:02at this point.
0:56:03In fact, I pretty much guarantee that.
0:56:04One would hope.
0:56:05And they might want to run the same code or the same libraries on both their clients,
0:56:09which are iOS devices and Macs, and their servers, which presumably again are not X-serves
0:56:14running OS X.
0:56:15So if Apple has Linux servers and Apple has devices that, you know, libraries that they
0:56:21making Swift that can run on these devices it would be nice if they could run Swift on the server
0:56:25because they actually happen to have servers. So I don't know the lineage of Swift for Linux if it
0:56:30was always a thing inside Apple or if it came out of the open source effort, but I think the reason
0:56:34Apple has Swift for Linux is for their own use. And that's not why they're open sourcing. Open
0:56:41sourcing again is, you know, because they want the language to be bigger than just one company, but
0:56:45Swift for Linux being a thing really makes me think that they want to run, or at least want
0:56:51to experiment with.
0:56:52Maybe it's not going to be a thing.
0:56:53Maybe it won't work out or whatever.
0:56:54But at the very least, it's something
0:56:56they want to try internally.
0:56:57And it makes perfect sense for them,
0:56:59because when we talk about the web browser,
0:57:01if you're a Google, it might make sense to run--
0:57:04well, I don't think they run JavaScript on the server side
0:57:06either.
0:57:06Maybe they do.
0:57:07But anyway, having libraries that
0:57:08run in everyone's browsers and not having to duplicate
0:57:11that code on the server side.
0:57:12And if Apple has a bunch of libraries
0:57:14that run on everybody's phones that do some operation
0:57:17or whatever, it would be nice not
0:57:18to have to duplicate all that code on the server side
0:57:20you can do it both client and server-side.
0:57:22So that is my tinfoil hat theory for Swift for Linux.
0:57:26It is not out of the goodness of Apple's heart.
0:57:28- Does Apple really ever do anything
0:57:30out of the goodness of their heart?
0:57:32- Well, open sourcing is pretty much as close as you can get
0:57:35because that, you could argue,
0:57:38and I'm sure they have this argument in Apple,
0:57:39like, does it really benefit Apple?
0:57:41It will say, "Oh yeah, we'll have more eyes on Swift
0:57:45and more people using it."
0:57:46And if Swift becomes the next really popular language
0:57:49and it's adopted everywhere, that's good for us because Swift will become better the more
0:57:54people use it.
0:57:55All of that is true, but the counterargument is, well, Objective-C technically was not
0:58:00like Apple proprietary, but really we're the only one using it in interesting, and that
0:58:03seemed to work out fine for us.
0:58:05It's not like we suffered by the world not hacking on Objective-C for us, even though
0:58:08they could have been in theory.
0:58:10So what's the big deal?
0:58:11Swift can be proprietary Apple language, we don't care if the world adopts it, we only
0:58:14care if Apple and Apple developers adopt it, and that's fine.
0:58:19But open sourcing, all the arguments against that eventually stray into altruism and the
0:58:28new message at the bottom of Apple's press releases.
0:58:31Did you guys read that?
0:58:33No.
0:58:34Did I read a footer of a press release?
0:58:36It used to be Apple ignited the personal computer revolution with the Apple II and blah blah
0:58:41blah blah blah.
0:58:42Then they took out the Apple II and talked about the Mac and then moved on to iPhone
0:58:44and iPod.
0:58:45It's like a paragraph at the bottom of every press release that explains who the heck Apple
0:58:49is.
0:58:50And the current version, I believe, starts with the Mac and then says iPhone, iPad, blah,
0:58:53blah, blah, watch.
0:58:54I don't know if it says watch.
0:58:55Anyway, they added a bit that says, "Apple employees are blah, blah, blah and dedicated
0:59:00to leaving the world better than they found it."
0:59:03Like it's a Tim Cook-ism that is now added to the little paragraph.
0:59:06Leaving the world better than we found it.
0:59:08That's altruism.
0:59:09Like it's not making the most money possible and increasing value for our shareholders.
0:59:14the world better than we found it. That's all the diversity stuff, the renewable energy
0:59:19stuff, and maybe throw open sourcing Swift in there. So I'm not too cynical to believe
0:59:24that that wording change and that attitude, because you see it. It comes from Tim Cook.
0:59:29He's putting his stamp on the corporation, and it's a stamp that I like.
0:59:32Yeah, I would be interested to see what comes of this. Does it get used at all, or does
0:59:38it just kind of sit there in obscurity like Apple's other open source efforts mostly have.
0:59:44And I, you know, you got to figure like as a server side developer, as a web developer,
0:59:50as a service developer, why would you choose to use this over something else? And you know,
0:59:57you're right like, you know, code sharing is a big part of it but again like until the
1:00:02library situation shakes out, you know, yeah, like they said, you know, obviously like the
1:00:06Swift standard library will be there, but that's, there's not a lot in the Swift standard
1:00:10library. There's like a lot of things that almost every kind of app would need that,
1:00:16or would need like one of that don't exist there. So that is going to be a problem and
1:00:23it's going to be a limitation for a long time. So I think like, you know, you look at other
1:00:28languages that are out there that have more library or framework or community support
1:00:34behind them. Language, and even languages that are cool and new and modern. If you want
1:00:39to throw Node in there, you can. I will allow that temporarily. I would also say things
1:00:43like, you know, Python and Java somewhat, Go, Rust, you know, like the newer ones, like,
1:00:49you know, they're, I won't even say PHP, but, you know, people know it and there's a lot
1:00:53there. It is, it's going to be a tough sell for people to use Swift over this almost embarrassment
1:01:03of riches of other well established good web languages that have tons of libraries and
1:01:08great frameworks already, a huge community around them, finding bugs before they run
1:01:12it, before they hit you, documenting things, making tutorials, writing books, like there's
1:01:17so many languages out there already that have great resources and great support behind them.
1:01:23I wonder if Swift will be able to get a foothold in that, the way Apple is most likely to operate
1:01:30and with the limitations it's most likely to have,
1:01:33especially in the area of libraries.
1:01:34And that, I think, we'll just have to wait and see.
1:01:37- Well, someone could always take it and run with it.
1:01:38Like, it's not just the website.
1:01:40Someone could use Swift as an alternative to C++
1:01:43for the new thing they're making.
1:01:44I mean, I have no idea what Pebble's SDK is like
1:01:46or what it is, but you know,
1:01:47like say you're making some small device
1:01:50and you decide you don't wanna use C++ to make,
1:01:53you know, you're gonna be the one making the API
1:01:54in the framework, maybe you wanna use Swift for it.
1:01:56Like, Rust is, you know, those are the Mozilla guys, right?
1:01:59They're using that as a better memory safe alternative to C++ to do kind of the same type of job of C++.
1:02:06It's not just all about web apps. Again, the whole thing with Swift is it's supposed to be a language that can span from writing an operating system all the way up to, you know, they don't say this, but it could be an alternative to JavaScript in the web browser from the lowest of the low level to the highest of the high level.
1:02:24And Swift that's that's aspirational at this point
1:02:27It's certainly aspirational because like no one has actually written an operating system in Swift and nobody actually has used Swift in a web browser
1:02:34As an alternative to JavaScript, but it is expanding outward and by open sourcing it
1:02:38You're never gonna be able to expand to fulfill your your you know your aspirational
1:02:42Target if you don't open source as a prerequisite and so you're right
1:02:47It's there are lots of barriers between here and there but even in the worst case the worst case is no one ever uses it
1:02:52except for Apple, at least then some poor Apple developer
1:02:54is gonna have the ability to see the source code
1:02:56to the thing that's causing them a problem
1:02:58and maybe send a patch.
1:02:59Even if it happens only between a registered
1:03:01Apple developer and Apple, that's still bad.
1:03:04How many Apple developers wouldn't kill
1:03:05to have the source code for AppKit and UIKit
1:03:07just so they could debug stuff sometimes, right?
1:03:10So I think there is no downside to open sourcing
1:03:14other than the resources they're gonna have to spend
1:03:16to deal with the open sourcing.
1:03:17But those types, I feel like you can hire people to do that
1:03:21And it's kind of a fun job and they don't need to be multi-year experts to handle it.
1:03:26Yeah, the other thing that strikes me is Swift seems to be a language written by a compiler
1:03:35guy for kind of compiler guys and for those sorts of people that really kind of get off
1:03:40on the nitty-gritty about a language.
1:03:42And that's not a bad thing at all, but if there was any audience or any group or any
1:03:48way to target compiler men and women, then I would imagine that the Linux crowd is the
1:03:55way to do it.
1:03:56And so it very well may pique some interest in that circle.
1:04:01And certainly this is a group that loves having a new JavaScript framework every day.
1:04:07So who knows?
1:04:08Maybe somebody will decide, you know what, this is pretty cool and I'm going to build
1:04:10my Swift framework.
1:04:12A question I wanted to ask the two of you guys, do you think this is the beginning of
1:04:17the end of WebObjects.
1:04:18- Was there a beginning of WebObjects?
1:04:20- Well, you know what I mean, of Apple's reliance.
1:04:23- I think we're like into phase 17 of the end of WebObjects.
1:04:28It's just, it's a really long,
1:04:30and I don't see a bright future for WebObjects,
1:04:33but I know Apple has a lot of code written in it.
1:04:36- Well, that's the thing, that's what I'm driving at is,
1:04:37you know, yes, I think we can all agree
1:04:39that they want WebObjects to die in a fire,
1:04:41but I don't see any particular impetus
1:04:46or perhaps compulsion for them to get rid of it
1:04:48other than it being old and not well supported technology.
1:04:52And if they're going all in on Swift across the corporation,
1:04:56then maybe that includes, you know,
1:04:58like the iTunes Music Store, among other things.
1:05:00- I don't think they're going all in.
1:05:01I think this is, you know, baby steps here.
1:05:03But like, I think the problem they have with WebObjects
1:05:04is all right, what do we replace it with?
1:05:06And all the choices are things that Apple controls less.
1:05:09Regardless of how much better you may believe they are
1:05:11than WebObjects, things that Apple controls less,
1:05:13and you don't want to rewrite a bunch of working code.
1:05:15And Apple, unlike Google, is not constantly thinking about how it can improve every aspect
1:05:20of all its web operations.
1:05:21Like there are key things that it is concentrating on, and I think with good reason, like hey,
1:05:25how about CloudKit is a great example.
1:05:26Let's do CloudKit.
1:05:28That is a big paid point.
1:05:29Although people may not like web objects, if they can click through our stores and buy
1:05:33stuff it's performing fine.
1:05:35Even if it's like defunct and not really being enhanced and doesn't have a bright future,
1:05:39it's more important to concentrate on other things.
1:05:42So maybe long term they can, like, you know, Swift for Linux, they could try it out in
1:05:47some small application server-side thing and see if it works out.
1:05:52Like these are very early days.
1:05:54But yeah, like someone is staring at that WebObjects and going, it's like you don't
1:05:58want it to end up like COBOL code where the only people who know how to deal with it at
1:06:01all are 60 years old and really expensive because they don't want to work anymore and
1:06:06you just let it go too far.
1:06:07WebObjects is not at that phase yet.
1:06:09And who knows, someone could resurrect it someday.
1:06:11You never know, stranger things will happen.
1:06:13- Well, but that, the talent aspect, I think,
1:06:16might be a big part of this.
1:06:18Like, imagine, Apple already seems to have some issues
1:06:22retaining talent, because the things they do are
1:06:26increasingly, they have an increasing number
1:06:31of boring things that have to be done,
1:06:34and there's so many other things.
1:06:35Like, if you work at Apple, you probably get an itch
1:06:38constantly to go make your own app.
1:06:41I bet that's a big problem they have.
1:06:42Anyway, so, you know, to help retain talent, I think,
1:06:46first of all, or to help attract talent in the first place,
1:06:48if they're gonna grow their cloud services stuff,
1:06:51which they almost certainly are,
1:06:53and almost certainly need to,
1:06:55they need to figure out how do we attract more programmers
1:06:57who want to work on this stuff.
1:06:59And if you think about the prospects of a job
1:07:02where you're writing WebObjects code
1:07:04as the primary role of your job,
1:07:06not only are those people harder to find,
1:07:09but, you know, if you wanna find somebody
1:07:10who has experience with it before,
1:07:12but also, you're probably, like, if that's your job,
1:07:15that's not very interesting or cool to most people,
1:07:18and that's gonna be, it makes it especially hard
1:07:20probably to hire young people.
1:07:22And so if they want to hire more people more easily
1:07:25to work on their cloud stuff and to have them be
1:07:27higher quality coders, who wanna stay there longer,
1:07:30and who are gonna choose that over some other job
1:07:34at Google or Facebook or whatever,
1:07:37having it be in a modern, cool language
1:07:39that everybody wants to write code in,
1:07:41instead of an old language that has a pretty bad reputation
1:07:45that is not really useful anywhere else,
1:07:47that is hard to get experience in,
1:07:49and is probably not the best language to work in these days
1:07:52when you are accustomed to more modern things.
1:07:55I think having Swift on the back end
1:07:57and having this be available,
1:07:59that would be enough reason right there,
1:08:02just for Apple's own recruitment and retainment efforts.
1:08:05That would be enough reason to do this.
1:08:07- Yeah, what else is cool these days?
1:08:09- Our final sponsor this week is Igloo.
1:08:12Igloo is an intranet you will actually like.
1:08:14So with Igloo, you can share news,
1:08:17you can organize your files,
1:08:18you can coordinate calendars and manage projects
1:08:20all in one place on your corporate intranet
1:08:23or your group intranet.
1:08:25So Igloo is like taking the best of the web
1:08:27and productivity apps.
1:08:28They have calendars, they have Twitter-like microblogging,
1:08:31file sharing, task management,
1:08:32wikis, document annotations, and more,
1:08:35all available privately and securely
1:08:37for your company or group.
1:08:40igloo intranets are highly functional, stylish,
1:08:42and easy to use with a widget-based drag and drop interface.
1:08:46Now their latest upgrade, Viking,
1:08:48revolves around documents and how you interact with them,
1:08:50gather feedback, and make changes.
1:08:52So they have a couple of cool features here.
1:08:53First of all, you can have basically
1:08:56read receipts for documents.
1:08:57You can track who has read critical documents,
1:08:59critical information, to keep everybody on the same page.
1:09:03You can do this, for example, to track whether employees
1:09:06have read it and acknowledged new policies,
1:09:08signed off on legal agreements,
1:09:09confirmed completion of training materials,
1:09:11all sorts of possible professional
1:09:14and regulatory uses here.
1:09:16And all this is built on their advanced HTML5 platform.
1:09:20And this is really advanced.
1:09:21It's fully responsive, first of all.
1:09:23So it works great on every device.
1:09:26Computers, iPhones, Android phones, even Blackberries.
1:09:30And then, what I think is the coolest part of this is,
1:09:34they have all this document previewing
1:09:37and document annotation.
1:09:39There's no Flash any of that.
1:09:40It's all this document parsing code,
1:09:42all this document annotation code, that's all in HTML5.
1:09:46So you can do annotations, you can view spreadsheets
1:09:49and stuff like that, you can do all that
1:09:51just on your phone if you want to,
1:09:53or just on your computer without having Flash installed,
1:09:55which is the devil.
1:09:56So you really don't want Flash.
1:09:59and the new devices come out, new screen sizes come out,
1:10:01it just works on there.
1:10:02It is so great, so advanced.
1:10:04So if your company has a legacy intranet
1:10:06that looks like it was built in the 90s,
1:10:08like most corporate intranets do,
1:10:10you should definitely give igloo a try.
1:10:12Now what's even better is that if you have a group
1:10:14of 10 or fewer people to use it,
1:10:17it's completely free to use for as long as you want.
1:10:19So if your company is 10 or fewer people,
1:10:22or if you wanna use it for like a group project,
1:10:24or like a side thing, whatever you wanna do,
1:10:2810 people or fewer, it's free forever.
1:10:30And then when you get larger than that,
1:10:31it's very reasonably priced.
1:10:32So check it out today, sign up for a free trial,
1:10:36see if it's right for you, igloosoftware.com/atp.
1:10:40Once again, igloosoftware.com/atp.
1:10:44Thanks a lot to Igloo for sponsoring our show once again.
1:10:48- So John, I hear you have thoughts
1:10:49about protocol extensions.
1:10:52- Protocol extensions are great,
1:10:54but the protocol-oriented programming talk,
1:10:56Like there's always a couple of weird talks at WWDC
1:10:59that are structured as narratives
1:11:00or that have a framing device or, you know,
1:11:02and this was one of them, it's like a single presenter,
1:11:05the framing device was like a hypothetical discussion
1:11:08between an old cranky programmer and a young one
1:11:10and used to demonstrate something.
1:11:12And the reason I find these interesting,
1:11:14I was also joking about dumping out,
1:11:15but I find them interesting because these are,
1:11:18these talks, all of WWDC, but specifically these talks
1:11:21about like, I'm going to tell you the way
1:11:25we think you should use our language to make your programs better are aimed at an audience
1:11:29that's not me. It's aimed at people who develop iOS and Mac apps. It's aimed at, like, long-time
1:11:35Objective-C developers. It's aimed at people whose programming culture is very, very different
1:11:39than mine. And so sometimes that means the message goes past me, and sometimes it means
1:11:44that, like, they're trying to – the context is practices that I don't have and never had,
1:11:53and they're trying to persuade me as hard as they can to not do this thing that I think
1:11:56is crazy and would never do anyway.
1:11:58Or vice versa, tell me to do something that seems alien to me and then try to convince
1:12:02me that it's good.
1:12:03And so Protocol Extensions was trying to show all the sort of traps that you can run into,
1:12:09not in an explicit way, but like, you're used to doing this in Objective-C, and these problems
1:12:15are why Objective-C is the way it is.
1:12:17Like, why are there delegate patterns all over Objective-C?
1:12:20Well, because inheritance has these problems and so on and so forth.
1:12:22And a lot of the stuff, this is the one that gets me the most, a lot of the stuff, both
1:12:26having to do with Swift and Objective-C and everything at WWDC, focuses heavily on types.
1:12:32And if you use a language that does not have, that has dynamic typing, where you don't worry
1:12:38about types, you don't worry about matching type signatures, that's not even a thing,
1:12:42a lot of the stuff that is super important to people who deal with languages with types
1:12:46is irrelevant.
1:12:47Like it's one of the things people talked about in the Gang of Four patterns book.
1:12:50There was an article about it years ago when the patterns book first came out.
1:12:53Someone had the epiphany after reading the patterns book.
1:12:56You know what?
1:12:57A lot of this crap is totally irrelevant to me because I don't use C++ or Java or any
1:13:01other strongly typed language.
1:13:02Like a lot of these patterns exist so that you can make your program flexible in this
1:13:05way, but maintain static type safety everywhere.
1:13:08And if your language doesn't even have static type safety, you're like, "Well, that pattern
1:13:11makes no sense.
1:13:12You know how I do that pattern?
1:13:13I just do this and I don't have to worry.
1:13:14It works all the time.
1:13:15I don't need seven versions of this.
1:13:16I don't need a concrete and abstract implementation.
1:13:19I don't need protocol extensions so the types of Mac are up.
1:13:21All the problems they described
1:13:22in the protocol extensions thing,
1:13:24a lot of those just don't exist in languages
1:13:26like JavaScript where you just don't have to worry
1:13:27about that, right?
1:13:29Maybe ES6, that'll be a problem or whatever.
1:13:31So that's one aspect of it.
1:13:32And the second one is I'm heartened to see ideas
1:13:36from the crazy highfalutin mumbo jumbo languages that I use
1:13:39and even from things from Perl 6 and stuff,
1:13:43filtering down to the troglodytes who use these languages
1:13:46with pointers and stuff, or Swift where you have,
1:13:48you know, unsafe, unmanaged, hose myself by scribbling over my, anyway, the lower level
1:13:55languages.
1:13:56And I think the idea that was sort of, from my perspective, the idea that was buried in
1:14:00the protocol R&D programming language thing was the idea of traits, which I think were
1:14:05from Smalltalk, roles in Perl tolerance, another, a better managed alternative to sharing code,
1:14:15interfacing code without screwing with your inheritance hierarchy, without forcing data
1:14:19to be shared, without doing all that other stuff. So it was a talk that just seemed very alien to me,
1:14:24but everyone who saw, who was in the correct audience, you know, who was, this talk was meant
1:14:30for them, seemed to like it and it seemed to open their eyes to the possibility of how they
1:14:34can program differently in Swift and how Swift attempts to solve problems. The same problems
1:14:41that Objective-C solved by sort of skirting them, Swift has a different way to take the
1:14:45same approach. So I hope people watch that session and come away with new ideas about
1:14:50how they can structure their programs to satisfy all their languages' static type constraints,
1:14:56and new ways to share functionality and interfaces without inheritance and without
1:15:00a million delegates everywhere.
1:15:03[laughs]
1:15:05Now this is one of those talks that I was in as well,
1:15:08and I enjoyed it a lot, although the framing, whatever, was a little bit weird.
1:15:14Krusty, the old programmer, I think was the character they used.
1:15:18But anyway, the talk was very good, but it's one of those that I feel like I need to go back and watch it again,
1:15:23because it didn't entirely sink in.
1:15:26And I think that's partially because I too am not necessarily the right audience,
1:15:30audience because I don't live and breathe Objective-C every day.
1:15:34But there were a lot of things, and I've said this about Swift in the past, there's a lot
1:15:37of things that they talked about that reeked of C#-style implementations of the same idea.
1:15:47Like protocol extensions smelled a lot like extension methods to me, and I'm sure they're
1:15:51different in nuanced ways that I'm not considering as I'm talking, but they seem very similar.
1:15:57And so I think that I'd like to rewatch this and perhaps consider what patterns I can apply
1:16:05to even my C# code that maybe I can be inspired by from this talk.
1:16:11But it was very interesting.
1:16:12And like I said earlier, just about anyone who has seen it has said, "Wow, that was really
1:16:15cool and you should definitely see it."
1:16:18And I concur.
1:16:19So, I don't know, Marco, any thoughts?
1:16:22You're probably the target audience more than anyone.
1:16:24Did you see this one?
1:16:25I didn't do my homework.
1:16:27Of course.
1:16:28To be fair, I didn't do it since I got home.
1:16:30I just happened to be in that talk when we were there.
1:16:32No, I have also heard from everybody that I have to see this talk, and so it is on my
1:16:36list of talks to watch, but I have not watched it yet.
1:16:39Protocol extensions are separate from this protocol-oriented.
1:16:42The protocol extensions are mostly—people in the chat room are saying extensions are
1:16:46categories.
1:16:47Swift has always had extensions.
1:16:49Protocol extensions allows you to extend protocols, which previously you couldn't do.
1:16:52If you look at the Swift standard library
1:16:54and see all the different things they had to do
1:16:59to make things that are like, well, this is equatable
1:17:02and sortable and this inherits from that
1:17:04and this conforms to this, like to try to make
1:17:07just their basic types of like, you know,
1:17:09arrays and dictionaries and ints and all the other things
1:17:11that they want to work with all their map and sort things.
1:17:13Again, problems don't exist if you don't have types.
1:17:15It's like, well, how can we have this
1:17:17that works a generic form of that and that
1:17:19and trying to get away from all the angle bracket
1:17:22generic thing that was making Swift look all super ugly.
1:17:25- Oh good, I hate those.
1:17:26- Yeah, well, that and like the standard library itself,
1:17:30because that's probably the biggest source of Swift code
1:17:35in the world at this point, as far as we know,
1:17:36is the Swift standard library itself,
1:17:38because all that stuff, all their hashes and dictionaries
1:17:41and ints and all, so that's all written in Swift,
1:17:43that's their standard library, right?
1:17:45And having map and filter and all those other things
1:17:48work on all the different types,
1:17:49and also on your extensions of those types,
1:17:51and your subcategories of types, and also enums and structs
1:17:54which can also have methods.
1:17:56It's really complicated.
1:17:57And in writing the Swift standard library,
1:17:59they ran into all of the--
1:18:01I'm assuming they ran into all the ways
1:18:03that the language is making things annoying.
1:18:05I mean, anyone who's done any sort of large object oriented
1:18:08program has inevitably found themselves in a situation where
1:18:12either you start wishing for multiple inheritance,
1:18:16or the flip side, you start using it.
1:18:18And in both cases, you have regrets.
1:18:20Right?
1:18:21You're like, oh, but this needs to be that,
1:18:23and that needs to be that.
1:18:23And really, there's no way to arrange this hierarchy of this
1:18:26so that I can have this-- if I have these multiply inherent,
1:18:28but I want this, but I need to override that over there,
1:18:30but this needs to come from over here.
1:18:31Like, you make a mess, because you don't foresee everything.
1:18:34You end up making a mess.
1:18:35That's an anti-pattern that anyone in any object or any
1:18:38language experience.
1:18:39And I feel like Apple must have experienced that doing
1:18:41the standard libraries.
1:18:42Like, oh, well, we need everything
1:18:44to be sortable and equatable, and we
1:18:47need them to be able to be mapped from one thing
1:18:49to the other.
1:18:50but we want all the types to match up,
1:18:53we want people to be able to extend it,
1:18:55but then to have their extended versions
1:18:56also work with all the built-in things,
1:18:57and you end up, it's a really complicated problem.
1:19:00And protocol extensions give them one more vector
1:19:03for sharing it, like they'll define these protocols
1:19:05that don't affect the inheritance hierarchy,
1:19:07and then you can extend the protocol
1:19:08so then everything that conforms to the protocol
1:19:10gets your extension.
1:19:11It's different than doing a category,
1:19:12where you're like, oh, now all instances
1:19:13of NSString have this method.
1:19:14You can have all instances of things that are equatable
1:19:17have this new extension, right?
1:19:20And that is a powerful feature that I think a lot of people
1:19:24wanted when they saw Swift 1.
1:19:25And I think the people who probably wanted it the most
1:19:27were the people writing the Swift standard library.
1:19:28And I think this probably made their life a lot easier.
1:19:30And then the protocol-oriented programming is like,
1:19:32hey, protocols, period.
1:19:33Like, you can share code by,
1:19:36instead of just making a series of subclasses
1:19:38and making a big inheritance hierarchy,
1:19:39you can have this unit of code,
1:19:41you can have like a Java interface that has no code,
1:19:43and that's powerful.
1:19:44And then you can share those implementations
1:19:49and override them among any classes.
1:19:51It's not part of the inheritance hierarchy.
1:19:53Everything, you can make all your different things
1:19:56conform to this protocol.
1:19:58And then when someone extends the protocol,
1:19:59they've enhanced all the things that,
1:20:01I keep trying to use Perl parlance.
1:20:02The Perl parlance, they're roles,
1:20:04and the classes consume them,
1:20:05which sounds weird and gross,
1:20:07but it's nice to have a distinct word for it.
1:20:08So everybody who consumes this role,
1:20:10now I guess the advantage,
1:20:11there are no role extensions in Perl.
1:20:13And I was thinking like,
1:20:14"Oh, why don't we have role extensions?"
1:20:15And then I thought about it for a while,
1:20:17and I think it's probably because we don't need them,
1:20:19because you would just, you know,
1:20:21parls like Ruby, you can do whatever the hell you want.
1:20:22We stick methods.
1:20:23We stick methods to any class we want.
1:20:25We screw with the inheritance,
1:20:26hard to get runtime, it's the wild west.
1:20:30But anyway, it's an interesting talk.
1:20:31- Sounds awesome.
1:20:32- Yeah, it is pretty awesome.
1:20:35It's better than Ruby.
1:20:35Ruby did mixins, which is just like, you know what?
1:20:37Here's some methods, bam, they're in your class.
1:20:39Oops, did I overwrite something?
1:20:41Sorry about that.
1:20:42Roles, at least, when your class consumes them,
1:20:46It will tell you at class composition time,
1:20:50it consumes the roles and it will tell you,
1:20:52you can't consume those roles.
1:20:53They conflict in this, this and this, right?
1:20:55And roles can also make requirements
1:20:56to the classes that consume them.
1:20:57You can consume me, but you need to implement
1:20:59methods X, Y and Z.
1:21:01Otherwise, and having that happen at class composition time
1:21:04is way better than the Ruby thing
1:21:05where you just keep loading Ruby modules
1:21:08until the integer class has 17 people fighting over
1:21:12the method that's called whatever inverse or first
1:21:15or like happy birthday or whatever the hell
1:21:17people are shoving into, you know,
1:21:19and they just silently overwrite each other.
1:21:20And you know, so it's a more formalized system
1:21:22of non-inheritance-based interface and code sharing.
1:21:27Anyway, cool stuff.
1:21:28Swift 2 looks really good.
1:21:29- Tell you one thing, I'm honestly very glad
1:21:32I haven't learned Swift yet.
1:21:33Because like they keep adding these,
1:21:36first of all they keep changing things
1:21:38and they keep adding really cool things.
1:21:40And honestly, like if you have a large body of Swift code,
1:21:45That, to me, seemed more like a liability at this point.
1:21:49Even though they have some of the translation tools
1:21:51and everything, but I would rather come to Swift
1:21:55with a totally clean mind and no existing code
1:21:59once it has stabilized a little bit more.
1:22:01- I was gonna say, I don't think your mind
1:22:02is entirely clean with all that PHP in there, but--
1:22:04(laughing)
1:22:05- You know what I mean, I don't have any existing knowledge
1:22:08of Swift, really, that's of any use.
1:22:10I don't have any built, any Swift assumptions
1:22:13or Swift design habits I've already started getting into.
1:22:17So when I do start using Swift,
1:22:19it'll be from a clean slate,
1:22:21as if that was version 1.0 of the language.
1:22:24- Well, it's nice to,
1:22:25I think the people who have used Swift 1
1:22:27and run into all these problems,
1:22:28A, they appreciate the Swift 2 features more,
1:22:30but it's like, oh God, I've been fighting that
1:22:31for a long time in Swift 1.
1:22:34It's great to see it in Swift 2.
1:22:35And B, I think it will help you understand
1:22:37the features of the language.
1:22:38If you haven't fought with all the foibles of Swift 1,
1:22:42it may not be clear why certain features in Swift 2 exist.
1:22:46So I think experience is still useful,
1:22:49but what I wanted to get at was the point you brought up
1:22:51of what is the strategy?
1:22:53They said this from the very beginning,
1:22:55the strategy of Swift is they're gonna make Swift,
1:22:58and they said, and we're gonna change the language
1:23:00in ways that are just entirely incompatible
1:23:03with the Swift code you're writing now.
1:23:05Furthermore, that Swift code that you wrote last year,
1:23:08that's not even gonna compile anymore.
1:23:10Like not only is, you know, it's like, oh, okay,
1:23:12well my app is written in Swift 1.
1:23:13No, it's not.
1:23:14If you want to ship your app,
1:23:15it cannot be written in Swift 1,
1:23:16'cause Swift 1 will not build in the new version of Xcode.
1:23:19Their entire strategy at this point anyway is,
1:23:22we will take your Swift 1 code and convert it to Swift 2.
1:23:25And that's, they've been saying that from the start.
1:23:27They don't guarantee source compatibility,
1:23:29which means their compiler will not compile your Swift 1.
1:23:32They don't care about your Swift 1.
1:23:33You gotta convert it to Swift 2, which is very aggressive.
1:23:38And like, you know, all the work they did
1:23:40with the compiler infrastructure and Xcode
1:23:42and the integration between them and the static analyzer
1:23:45allows them to have a conversion thing
1:23:47that does this in a sensible way
1:23:49and does most of the work for people.
1:23:51It's still kind of annoying though.
1:23:53But I'm not entirely sure this is a long-term strategy.
1:23:56Okay, so Swift 1 to Swift 2, Swift 2 to Swift 3.
1:23:59At a certain point, Swift 16 to Swift 17,
1:24:01are you really gonna invalidate what Apple would hope
1:24:04is the millions of lines of Swift 16 code
1:24:06that are out there, we can change to Swift 17?
1:24:08No, it's gotta end at some point.
1:24:10So I don't know what point that is,
1:24:12but for now, the policy is not only, Marco,
1:24:17might you have been wasting your time writing
1:24:19in a language and learning idioms that are gonna change
1:24:21when the next order in Swift comes out,
1:24:22but you'd also have the task of converting
1:24:24all of your Swift 1 code to Swift 2.
1:24:26Like, it's not even an option
1:24:28to keep the Swift 1 code around.
1:24:29And I think that will continue until the language
1:24:34reaches the point where Apple's like,
1:24:35all right, this is settling down, now we'll start to,
1:24:37I hope they'll start to treat it like a regular language
1:24:40where we don't invalidate your Objective-C code
1:24:42when Objective-C 2.0 comes out
1:24:44when they start versioning Objective-C.
1:24:45We try to encourage you to move to 2.0,
1:24:47the 64-bit runtime is 2.0 only, blah, blah, blah, blah, blah,
1:24:51but your old code will keep building for a really long time.
1:24:54They didn't force you to constantly up-convert all your code
1:24:58and they kept it backward compatible.
1:24:59Whereas Swift 1, they changed some of the keywords,
1:25:01like do became repeat.
1:25:04they'll change anything they want.
1:25:05- And now do mean something else.
1:25:07- Yeah.
1:25:08- Now it basically means try.
1:25:09- No, there's try inside the do.
1:25:12There's a Yoda joke in there somewhere
1:25:13but I cannot get it out.
1:25:14(laughing)
1:25:15- That's a reference to something that's crazy.
1:25:17- That's Star Trek, right?
1:25:18- Yes, that's right.
1:25:19Yeah, next generation.
1:25:20(laughing)
1:25:22- This is a thing to watch for
1:25:23when Apple thinks Swift has finally settled down.
1:25:25When they stopped doing the thing
1:25:27that they always said they were gonna do,
1:25:28they just never said how long they're gonna do it for.
1:25:30It just seems like something
1:25:31that is not sustainable long-term.
1:25:33But certainly for Swift 1, 2, and presumably next year Swift 3, they'll probably keep
1:25:38it that way.
1:25:39Maybe 4, maybe 5, maybe 5 it settles down.
1:25:41But that's something to keep an eye on.
1:25:43But anyway, I love seeing this aggressive strategy of like not doing the old Microsoft
1:25:48thing of like, "Well, you can't break people's old apps and their source code has to compile
1:25:52and work exactly like it always did."
1:25:53Apple's like, "No, we are racing forward as fast as we can.
1:25:57You better come along for the ride."
1:25:58Right, and that's great.
1:25:59great. I mean, like, there are so many languages that get, you know, kind of unfortunate cruft,
1:26:06like almost immediately after their launch because they don't do that. And because they
1:26:09have, you know, developers instantly who are like, "Well, you know, we're not going to
1:26:13tolerate you breaking the code we wrote for this two-month-old language last, you know,
1:26:18last month." And Apple's willing to say, "Yes, we'll break it and we'll try to make it easy
1:26:23on you by having these translation tools, but that's it." That, it's going to end up
1:26:28being a really good language in all likelihood.
1:26:30I think even the Swift 2 changes,
1:26:33the changes they've made since last year, since 1.0,
1:26:37they did a number of updates over the winter and the spring
1:26:39and they changed some pretty big things.
1:26:42And now with the officially named Swift 2,
1:26:46which seems kind of more like Swift 1.5, but whatever,
1:26:49with all that, they've made some really big improvements
1:26:54since 1.0 last year.
1:26:56And yeah, you're right, it's gonna slow down, that's fine.
1:26:58And I'm totally fine to jump on when it slows down.
1:27:01And a lot of people, some of the people in chat
1:27:05are saying this, I've heard from a lot of people,
1:27:06like, don't you wanna be part of this process?
1:27:08Don't you wanna help direct the language with your input
1:27:12and get used to it now and become an expert in it now?
1:27:16And the answer to all of those is no, I don't.
1:27:18Like, I really don't.
1:27:20First of all, I think there's this division of programmers.
1:27:25There's people who are really into the tools
1:27:29for their own sake and the science of the tools
1:27:33and the design of languages, the design of tools,
1:27:36like the art behind the language design.
1:27:39And then there's other people who don't really care
1:27:43about that and just want to use it,
1:27:44and they get satisfaction out of the things
1:27:46they build with it rather than necessarily
1:27:48the way they build them.
1:27:50I own the latter.
1:27:51I do not care about languages really much at all.
1:27:55That's why I try to learn as few languages as possible
1:27:59and choose to really deeply master them
1:28:02rather than exploring tons of languages that come out
1:28:06and being shallowly familiar with lots of them.
1:28:09And in some ways that does hurt me.
1:28:11I think overall, I think I'm making the right decision
1:28:13for what I'm trying to accomplish,
1:28:15which is one person trying to write complete apps
1:28:19and write and maintain complete apps
1:28:21that do non-trivial things.
1:28:23I think my way is better for that approach,
1:28:27but there are so many people who care so much
1:28:31about the language and how it's designed
1:28:34and what it can do and how it does it
1:28:36that they are willing to jump on early
1:28:38and they are willing to tolerate all the bumps
1:28:41and the source kit crashes and the changes in the syntax
1:28:45and the changes in the idioms and things.
1:28:47They're willing to do that.
1:28:49That's great.
1:28:50them to exist, but I don't need to be one of them,
1:28:52and I'm perfectly fine with that,
1:28:54and I appreciate what they do,
1:28:55and they probably think I'm India, but that's fine.
1:28:59- Yeah, I agree.
1:28:59I don't care about being a trailblazer anymore,
1:29:03and you've talked about this a lot, Marco,
1:29:05just now on Build and Analyze.
1:29:08Being a trailblazer when it's something that is important,
1:29:11when money is riding on it, that's just not my cup of tea.
1:29:14I'd rather use the old and boring technology,
1:29:17not as old and boring as PHP or Perl,
1:29:19but old and boring technology that is well proven
1:29:21and actually works well.
1:29:23And occasionally I'll fiddle,
1:29:25like something that's fun and on the side,
1:29:27like my website for example,
1:29:28Node is reasonably stable as JavaScript frameworks
1:29:32that change every 10 seconds go.
1:29:33- As long as your integers stay small
1:29:34and you don't need, and you have a lot of memory,
1:29:36then you're good. - Right, then no problem.
1:29:38But that's not something that I'm really
1:29:40making any money off of,
1:29:41it's just my silly little website.
1:29:43I don't think I would be as keen on using Node
1:29:47if this was the sort of thing where money is riding on what I'm doing.
1:29:55So I'm with you.
1:29:57I don't get the architecture astronaut like, you know, total…
1:30:01I don't know.
1:30:03I don't get off on that like I used to when I was a kid.
1:30:05It's just not my thing anymore.
1:30:06>> MATT PORTER-KLEIN: Perl is far from boring, Casey.
1:30:09It's one thing you can say from Perl.
1:30:11It's not boring.
1:30:12I would say the same thing for PHP.
1:30:14PHP is far from boring.
1:30:15It's perhaps the most exciting language ever made because it's terrifying.
1:30:19Every second will sell you the whole Aeron, but you only need the edge.
1:30:23Oh, God.
1:30:24All right, I think that wraps it up for this week.
1:30:27Thanks a lot to our three sponsors this week, Automatic, Squarespace, and Igloo.
1:30:33And we will see you next week.
1:30:34Now the show is over.
1:30:37They didn't even mean to begin.
1:30:39Because it was accidental.
1:30:41Accidental.
1:30:42Oh, it was accidental.
1:30:43Accidental.
1:30:44Accidental.
1:30:45John didn't do any research, Marco and Casey wouldn't let him
1:30:52'Cause it was accidental, or it was accidental
1:30:57And you can find the show notes at ATP.fm
1:31:02And if you're into Twitter, you can follow them
1:31:07M A R C O A R M
1:31:16N T Marko R M E N S I R
1:31:20A C U S A C
1:31:22R A Q Z A It's accidental
1:31:25They didn't mean to Accidental
1:31:32Tech broadcast so long
1:31:36I think "language wonk" is the phrase you're looking for, not "architecture astronauts."
1:31:41Yeah, I couldn't think of what it was, thank you.
1:31:43Well, the architecture astronauts, they're all working on Java and PHP.
1:31:45Oh, God.
1:31:46That's true.
1:31:47PHP got so badly infected by Java people.
1:31:49It drives me nuts.
1:31:50Yeah.
1:31:51But anyway, I am a language wonk.
1:31:52I like this language stuff.
1:31:54Anyone who knows about the existence of and loves Perl 6 is definitely a language wonk.
1:31:59I mean, I don't have a problem with "language wonkery" if such a thing is how you would
1:32:04describe it.
1:32:05- Yeah, that's it.
1:32:06- I enjoy learning about Swift,
1:32:09but goodness would I never consider using that,
1:32:14at least right now.
1:32:15I think you guys hit the nail on the head
1:32:16that the right time to use Swift
1:32:18is when the velocity of Swift
1:32:20kind of calms down a little bit.
1:32:22Maybe it doesn't stop moving forward or anything,
1:32:24but it just calms down.
1:32:26Now is not that time.
1:32:27- Well, now might be that time, honestly.
1:32:29- Yeah, I think it's close to that time.
1:32:32Like, 'cause next year, like, all right,
1:32:33So we didn't even talk about the error handling,
1:32:35but anyway, they got all, error handling stuff was,
1:32:37there was a bunch of things that were obviously missing
1:32:38from Swift 1, and one of them was how do you deal
1:32:40with errors, 'cause in-out params and NSError
1:32:43and all that crap was like, ugly.
1:32:45It did look, it was, it looked like a, and was,
1:32:48a thing that existed and fit in with the Objective-C language
1:32:51and AppKit and all that stuff.
1:32:53It wasn't a good fit for Swift,
1:32:54so now you've got the whole don't really call it exceptions
1:32:57'cause it's not really an exception,
1:32:58but kind of exception handling.
1:33:00In Swift 2, that filled a big gap.
1:33:03Obviously I still want regular expressions.
1:33:05Maybe just copy-- - Of course.
1:33:07- Just copy Perl 6 grammars and you'll be done.
1:33:09You gotta save something for next year.
1:33:11(laughing)
1:33:12But yeah, and now people looking at Swift 2,
1:33:15it's all right, what's left besides
1:33:16the stuff that I just mentioned?
1:33:17Now the picture is becoming clear.
1:33:20And then the final thing that I think you're missing
1:33:22is all right, who's gonna be the first sucker
1:33:24to write a Swift-only framework?
1:33:28or like to use Swift in earnest so that like,
1:33:31because all the APIs you're calling from Swift
1:33:33are UI kit, app kit,
1:33:34things that were written originally in Objective-C
1:33:36and they've tried so hard to make it
1:33:38so that you can do things in a Swifty way,
1:33:42not knowing that there is an NSError parameter
1:33:46going in there, like that's lots of magic
1:33:48having to do with bridging those two worlds.
1:33:52Eventually, you're gonna have to decide what does,
1:33:54if you were to write a framework now
1:33:56starting from scratch in Swift, what would that look like?
1:33:58Right?
1:33:59We don't know the answer to that,
1:34:00but that's like the final piece of the puzzle.
1:34:02And after that, it's just a matter of time.
1:34:04So Swift 2, Swift 2.5, the dawning of Swift 3,
1:34:09I think that is probably the sweet spot for,
1:34:12maybe not for Marco, but I think for most people doing,
1:34:16you know, if you're not a one-person shop
1:34:17and you have to like make decisions based on,
1:34:19like you don't have people like,
1:34:20oh, this guy can go off and he'll just learn Swift this year
1:34:23and he'll teach it to the rest of us.
1:34:24Marco doesn't have that option.
1:34:26but that's a reasonable time frame.
1:34:28And if you wanna be on the cutting edge,
1:34:29or you're young, or you're coming in,
1:34:31say you're gonna write your very first application
1:34:33and you're just out of school,
1:34:35that's the perfect time to learn Swift,
1:34:36'cause you don't know Objective-C.
1:34:38There's no point in becoming a Objective-C expert right now.
1:34:41You might as well just go right into Swift.
1:34:43So Marco's decisions, as always,
1:34:45are not necessarily applicable to everyone listening.
1:34:48- Oh no, and that's like, and somebody asked me on Twitter,
1:34:50I think two or three days ago,
1:34:52I'm just starting out, should I learn,
1:34:54should I start with Swift?
1:34:55And I said, yeah, probably, because I think,
1:34:58yeah, if you're starting from scratch right now,
1:35:01a year ago, I had it much more complicated,
1:35:04like, well, it depends, maybe.
1:35:05This year, I'm saying almost certainly,
1:35:09yes, you should start with Swift.
1:35:11Like, if you're starting from scratch now, start there.
1:35:14But if you already are an Adjust of C expert
1:35:18and you're trying to get a lot of work done quickly,
1:35:21it's hard to justify making the transition right now,
1:35:24as opposed to in a year or two.
1:35:26- I mean, but you should think back to your Go experience.
1:35:29Like you had the same thing.
1:35:30It's like, well, is it worth learning a new language?
1:35:32What are the benefits?
1:35:33And you have to speculate.
1:35:34What is going to be the risk reward?
1:35:38Like what is the expected benefit of me
1:35:40spending this time to use Go?
1:35:41Is it really gonna make that much difference
1:35:42or are I just gonna waste a bunch of time
1:35:43fighting with language I don't know that well
1:35:45and end up with something with a bunch of bugs?
1:35:46And I think the Go experiment worked out pretty well for you
1:35:49but going in, you don't know for sure.
1:35:51I think the uncertainty about Swift
1:35:52when it first came out was, seriously, Apple,
1:35:55is this a thing, are you really gonna do this?
1:35:56People didn't really believe,
1:35:58maybe people who don't have a lot of experience with Apple,
1:36:00like, no, they're deadly serious, right?
1:36:02It could still be a disaster,
1:36:03like there's still room for disaster,
1:36:05but so far, signs are good
1:36:07that it's not going to be entirely a disaster,
1:36:09and Apple seems very dedicated to it.
1:36:11I don't know if we talked about this in the last show,
1:36:12but we did in the pre-WWDC,
1:36:15so hey, do you think we're gonna see Swift
1:36:17on all the slides, or Objective-C in Swift?
1:36:19And I think I said I thought it would be a mix.
1:36:22I think this year's WWDC, Apple tried very hard
1:36:26to make all of their examples use Swift.
1:36:28They failed, there were plenty of sessions
1:36:29with Objective-C in some or all of the examples.
1:36:32Some of them were exclusively Objective-C,
1:36:34but you could see the effort.
1:36:36It was like, wow, I am surprised
1:36:37at the amount of Swift I'm seeing,
1:36:39and I'm shocked at how little Objective-C I'm seeing.
1:36:41Again, Apple can do that.
1:36:42It's top-down command and control, it's their conference,
1:36:46but they're clearly signaling their intent.
1:36:49Swift is the future, you know,
1:36:52unless something super terrible happens.
1:36:54- Yeah, in all the sessions I went to,
1:36:56I only noticed one, and I don't recall which one it was,
1:36:59that actually had Objective-C in it,
1:37:01and everything else either had both,
1:37:03or in more cases than not, only had Swift,
1:37:07which was relatively surprising to me
1:37:09that it was that quick, but you're right, John,
1:37:11that they're pushing it, and they're pushing it hard.
1:37:13- Yeah, just download all the W3C PDFs
1:37:15and search them in square brackets.
1:37:17(laughing)
1:37:18find out how many sessions I actually had.
1:37:20What was one of the ones?
1:37:21Was it Metal or what's new in Sprite Kit or something?
1:37:26One of the sessions I went to seemed to not have any Swift.
1:37:29It was just square brackets, square brackets.
1:37:31It was like going back in time.
1:37:32You realize how many of the other sessions are just like,
1:37:34they don't even mention it.
1:37:35They're just like, oh, and here's this code,
1:37:36and here's this, and here's this.
1:37:38It's amazing they've done this.
1:37:39They made a new language suited for a new API
1:37:41with totally new idioms,
1:37:42but still able to call into all the old stuff
1:37:45with all these conventions
1:37:47and all this crazy markup they're doing to Objective-C.
1:37:49Oh, and they added generics to Objective-C
1:37:51so you could have typed collections,
1:37:52mostly to benefit Swift so they could tell
1:37:54that your NS array is full of NS strings
1:37:56and they don't have to make it full of any object
1:37:58in the Swift world, right?
1:37:59But hey, even if you're just in Objective-C, Marco,
1:38:02you could use the new generics thing if you feel like it.
1:38:04It's gonna make you feel better about knowing
1:38:06that you have a homogenous set of objects inside your array
1:38:09instead of God knows what.
1:38:11- Yeah, no, when I saw that, I was very happy with that.
1:38:15I mean, again, like I'm probably gonna start writing
1:38:18Swift code in the next year or two,
1:38:20like with majority of my effort.
1:38:23But, you know, until then, and while I still have
1:38:27this fairly large Objective-C code base,
1:38:31that's very good to have.
1:38:33You know, like I, when Swift came out,
1:38:36it became pretty clear that like, you know,
1:38:37like almost every year before that,
1:38:40they were adding interesting features to Objective-C.
1:38:43And then when Swift came out last year and they added basically nothing to Objective-C,
1:38:49the writing seemed like it was on the wall that, well, I guess that's the end of this
1:38:53language's progress. And, you know, obviously I think we're close to the end of this language's
1:38:59progress. But I think this is a nice little thing that, okay, well, even though it was
1:39:04in the service of making Swift interact better with this language, this language still is
1:39:08improving. And that is nice.
1:39:10The things they added to Objective-C before you knew Swift existed?
1:39:15Almost all of those were also in service of Swift, in hindsight, we now realize.
1:39:19Oh yeah, that's true.
1:39:20Why does Arc exist?
1:39:22That's the way memory management is done in Swift instead of garbage collection, or test
1:39:27beds for things that would be necessary in Swift.
1:39:30Or even just like if you want to go—we just talked about how do we convert your Swift
1:39:331 code to Swift 2 code?
1:39:35Static analyzer, LVM, I think, a pilot infrastructure, all those things, like, "Boy, this is great,
1:39:38really enhancing Objective-C, you know, you can draw a line through all those changes
1:39:44and say, "Hmm, this was all leading to make Swift possible." And if you look at the timeline,
1:39:49you know, some of it might have been happy accidents, but some of it is clearly intentionally
1:39:54like, "I'm doing this for Swift," but it's going to be revealed to the world as an Objective-C/compiler
1:40:00feature. You know, so that's...
1:40:02Well, keep in mind also that Apple still has the vast majority of their code in Objective-C.
1:40:08It was not even, I mean we were even hearing like,
1:40:11not that long ago that their build system
1:40:14couldn't even include Swift yet,
1:40:16like their standard build procedure
1:40:18couldn't even do Swift yet, as of fairly recently.
1:40:21It probably can now, I assume, but the fact is like,
1:40:24Apple has probably the largest collection
1:40:27of Objective-C code in the world,
1:40:29and they, you know, anything that benefits
1:40:33Objective-C benefits Apple.
1:40:35And so all these features, static analyzer,
1:40:40stuff like that, anything that helps
1:40:42Objective-C coding get more efficient
1:40:44and have fewer bugs, they could've just been doing for that.
1:40:48And I think it is--
1:40:49- So that's how you sell the features,
1:40:50because it's like, I have a Skunkworks project
1:40:53that seven people know about in a new language.
1:40:55Here's what the new language needs.
1:40:56It's like, well, okay, how do you sell that?
1:40:59Well, even if my new language ends up bust,
1:41:01these are all great things for objectivity,
1:41:03so we just do them anyway.
1:41:04It's like, all right, keep going, keep going.
1:41:05It's just how you strategically pick the things
1:41:08you're going to enhance and objectively,
1:41:09hmm, they all seem to,
1:41:11and they had to get rid of garbage collection,
1:41:12which by the way, is finally deprecated.
1:41:14- Oh, is it?
1:41:15- It wasn't already?
1:41:15- Not deprecated, removed, as in you can't.
1:41:19- As in like the runtime doesn't support it anymore?
1:41:21- I'm pretty sure it either won't run
1:41:23or you can't build new ones
1:41:24with the new version of Xcode or both.
1:41:25But basically it's the end of garbage collection.
1:41:28The supported life of garbage collection is now
1:41:30where it's been deprecated for years, right?
1:41:32- Yeah, what else is going on?
1:41:33Programming!
1:41:34More of it?
1:41:38That's going on?
1:41:39I'm just saying that was this episode.
1:41:42Every once in a while we do this.
1:41:44And we always get angry emails.
1:41:45And people will have to endure it.
1:41:47Guess what?
1:41:48WWDC is a conference for developers and we are all developers even if not all for the
1:41:51same platform and so it's impossible to soak in a week's worth of sessions about programming
1:41:57and not talk about programming.
1:41:59So we did.
1:42:01(beep)