PodSearch

ATP

122: My Results Were Inconclusive

 

00:00:00   Jon, did anything bad happen in the last week?

00:00:02   Did the world end?

00:00:04   Or did any other negativity or horrible result

00:00:08   happen in the last week?

00:00:10   - I'm sure horrible things happened everywhere

00:00:12   in the last week.

00:00:13   - Well, did anything happen to our show

00:00:15   that was really horrible?

00:00:16   - Oh, I don't think so.

00:00:18   - Oh, okay, because what was missing from last episode?

00:00:22   - The song was there.

00:00:25   Did you forget the modem thing in the beginning?

00:00:28   - No.

00:00:28   John, John, John.

00:00:30   - Show notes?

00:00:31   - Nope, that was there too.

00:00:32   - Keep trying.

00:00:33   - What was just completely missing from last episode?

00:00:36   - Any mention of the thing

00:00:39   that I was most excited about at WWDC?

00:00:41   - No, no.

00:00:42   - Are you talking about like the release show,

00:00:44   like the production process has fallen down?

00:00:46   - Oh my God, John, how have I figured this out

00:00:49   and you haven't?

00:00:50   - I don't know, I just listened to the most recent episode.

00:00:52   It had a song, I guess it had the modem beep.

00:00:55   Did it have the ending noise?

00:00:56   - Yeah.

00:00:58   We'll just sit here patiently.

00:00:59   - I don't know.

00:01:00   All the ads?

00:01:02   - No, those are there too.

00:01:03   All right, well I guess we should do something

00:01:06   up front in the show.

00:01:07   - Oh, 'cause you didn't have follow-up

00:01:09   for the WDC show.

00:01:09   - There we go.

00:01:10   - We never do.

00:01:11   We never have follow-up for the WDC show.

00:01:13   (laughing)

00:01:14   Because we always have so much to talk about.

00:01:16   We haven't had it on any of the WDC shows.

00:01:18   Like, where would I get it from,

00:01:19   especially when we were live?

00:01:21   I don't have notes in front of me.

00:01:22   - Oh, come now, Jon.

00:01:23   We always have something to follow up on.

00:01:25   - Did we when we were in Macworld last year?

00:01:27   I don't think so.

00:01:28   I mean, maybe someone can look it up and see, but like, certainly I didn't have a laptop

00:01:32   in front of me, right?

00:01:33   No, you just had a tremendous wallet.

00:01:35   No, I mean like last year at the Macworld studio.

00:01:39   Yeah, you still had a tremendous wallet, I'm quite sure.

00:01:41   I don't know.

00:01:42   You might not have been with me.

00:01:43   Hey, speaking of wallets, and now we can segue into the follow-up that Marco's trying to

00:01:47   avoid.

00:01:49   We all went to dinner at our dear friend Jason Snell's house, and we left that house.

00:01:58   We left Jason's house and got onto the interstate highway, freeway, whatever California calls

00:02:05   it.

00:02:06   And then you had an epiphany, Jon.

00:02:08   Would you like to tell us what that epiphany was?

00:02:10   I left my backpack at Jason's house.

00:02:13   And somebody pointed out to me—I genuinely don't remember who it was, and so I'm

00:02:18   sorry to whomever that is, that at two minutes, excuse me, two hours, two minutes,

00:02:23   and 45 seconds, you explained to us in the last episode how you would never

00:02:26   lose your backpack. Did I lose my backpack? Briefly, yes, because you said you had no

00:02:31   other-- Was it lost? Define "lost." You didn't know where it was within Jason's house. I did

00:02:35   know where it was. It was at Jason's house. Was I correct in believing it was

00:02:39   at Jason's house? Yes, I was. Did I ever wonder where it was? No, I did not. I think you did

00:02:43   briefly.

00:02:44   No, I knew it was at Jason's house.

00:02:46   So anyway, I just thought that was very funny, that it turns out that after declaring authoritatively

00:02:53   that you would never—okay, yes, you said lose, but I will take it—you will never

00:02:57   leave your home.

00:02:58   What do you mean you will take it by changing the word that I said to a word that makes

00:03:01   you right, and then you will bask in that imagined glory.

00:03:05   This is the internet.

00:03:06   This is how these things work.

00:03:07   Anyway, I did not lose my back.

00:03:11   And if I had got all the way back to the city, I would still have known exactly where it

00:03:14   was.

00:03:15   That is true.

00:03:16   Yeah, that is true.

00:03:17   Maybe you'd have a case if I knew exactly where it was and that knowing was, "I know

00:03:20   where it is.

00:03:21   It's on the BART platform."

00:03:22   I would give you a strong case for a loss at that point because even though I believe

00:03:26   it to be on the BART platform, it would probably not be there anymore.

00:03:30   But Jason is slightly more trustworthy than the average citizens of San Francisco.

00:03:35   - Well, but, you know, I think the big picture here,

00:03:38   the lesson here is that had you owned a wallet

00:03:42   that would fit in your pocket,

00:03:43   you probably wouldn't have brought a backpack to this dinner

00:03:47   and therefore it wouldn't have been a problem

00:03:49   and it wouldn't have--

00:03:50   - I probably wouldn't have bought it anyway.

00:03:51   I don't go anywhere.

00:03:52   It's like the towel, another reference you don't get.

00:03:54   Don't go anywhere without it.

00:03:55   - Hitchhiker's Guide to the Galaxy.

00:03:57   - Hey, hey, Casey read a book.

00:03:58   - All right.

00:03:59   - Anyway, yeah, I'm like that with the backpack.

00:04:02   Even if it's just for like the little battery pack

00:04:04   I have in there to recharge my phone.

00:04:06   You never know.

00:04:06   - How big is the battery pack?

00:04:08   - I still showed you.

00:04:09   It's a little tiny Duracell thing, you know.

00:04:10   But I got lots of crap in there.

00:04:12   I think I even have my iPad in there.

00:04:14   I don't remember.

00:04:15   - Honestly, I'm not trying to make fun of you here.

00:04:19   Do you keep anything in your pants pockets?

00:04:21   - My phone, I mean, I tried,

00:04:25   like the 6 is a little bit big to have in my pocket,

00:04:28   but generally, my phone is on me

00:04:30   and it's in my front pocket.

00:04:32   Don't like to sit down a lot with it in my front pocket like when I get in the car

00:04:35   I tend to fall it's Bluetooth. I take it out and put it in the little cubby thing for

00:04:39   Bluetooth thing in the car, but yeah, basically my phone. I guess my keys if I I don't know yeah

00:04:45   Yeah, my keys if I'm going like if I go to the store

00:04:48   I'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

00:04:52   But that's not a usual

00:04:53   Thing but that we already see is a different different experience. I'm it's like

00:04:57   Going out into space you gotta get your spacesuit on

00:05:01   I could see some of that.

00:05:03   - Yeah, I can understand that.

00:05:04   - But anyway, I don't know why you're arguing with this.

00:05:06   Like, I agree, I need a thinner wallet.

00:05:08   And I thank everyone who has sent me

00:05:09   all the suggestions for thin wallets.

00:05:12   And now I feel slightly overwhelmed

00:05:13   by the million possible choices.

00:05:15   The only thing I know is I don't want one

00:05:17   that makes your money visible on the outside,

00:05:19   'cause that makes me uncomfortable.

00:05:21   - Yeah, that's why I like the one that I have,

00:05:23   which is a Ubi wallet, Y-U-B-I.

00:05:25   - Maybe you said it's discontinued.

00:05:26   - Yeah, and that's the thing is, after we talked,

00:05:28   I was like, you know what, I should go ahead

00:05:29   and order a new one, 'cause some of the elastic

00:05:31   after the last couple of years has kind of fallen off or whatever.

00:05:35   And it was originally Kickstarter, then I believe it was either an individual or a company

00:05:40   was selling it outside of Kickstarter.

00:05:42   And I went looking to try to find it and I could not find it anymore.

00:05:46   And I'm really bummed about that because part of the beauty of the Ubi was that you had

00:05:49   cards on either side of the wallet and then there was like a little cubby, if you will,

00:05:54   it's a terrible description, but a little slot where you could stick bills.

00:05:58   And it was, I thought it was really clever and I really liked it.

00:06:01   And so now I'm going to have to figure out what you buy, Jon, and buy one of those for

00:06:06   myself because I don't know what to do now.

00:06:10   I can't get another Yubi.

00:06:11   There are a lot of choices though.

00:06:12   Like, seriously, it's overwhelming how many, this is not a new trend, this slim wallet

00:06:17   thing, but there's a million of them and everybody loves the one they have.

00:06:20   And I look at them all and I'm like, they all look very similar.

00:06:23   I feel like it's something I need to see in person.

00:06:25   Like it'd be difficult to buy online just by looking at pictures.

00:06:27   you got to kind of feel it, how squishy it is, how bendy it is, how big it really is,

00:06:31   how nicely the credit cards fit in and stuff like that.

00:06:33   Yeah, I don't know. I personally can very -- I'm very happy with my Slimy wallet by

00:06:39   a company called Koiono. Don't call it slimy. No, it's a slimy. It's black outside with

00:06:45   red inside. It looks really cool and it's relatively inexpensive. I guess right now

00:06:50   they're selling it for $45 and it's really nice. I've been using it now for something

00:06:56   like four or five years.

00:06:57   Yeah, but this is a non-starter for me, though, because it's a front pocket wallet, and that's

00:07:01   just barbaric.

00:07:02   What makes it a front pocket wallet?

00:07:04   You can keep it in any pocket.

00:07:06   It says in the URL, slimmy minimal front pocket wallet.

00:07:09   Yeah, but what makes it?

00:07:10   Other than the words, what makes it a front pocket wallet?

00:07:12   It doesn't have one of those weird curves in it or anything.

00:07:15   It's still a rectangle.

00:07:16   If you put it in your back pocket, it will have one of those curves.

00:07:19   That's true.

00:07:20   Like Casey's Field Notes.

00:07:21   That's very true.

00:07:22   Well anyway, I'm giving you a hard time about the backpack thing, just out of fun,

00:07:27   I am already envisioning all the emails I'm getting about how wrong I am and how right

00:07:31   you are, because anytime anyone doubts you, Jon, the internet comes to your defense.

00:07:34   I'm sorry to ruin your fun with facts.

00:07:36   Well, you know, ultimately though, the wallet is not your problem. It's the contents of

00:07:42   the wallet. Like, you have to fix yourself before you can fix the wallet.

00:07:46   Obviously, you know, taking stuff out of my wallet now will only help so much, because

00:07:51   is a very large wallet. So obviously if I got a slim wallet, not everything would make

00:07:54   it from the old wallet to the new one, clearly, right?

00:07:58   Yep. It's true. All right. Well, anyways, what else? Oh, the entire internet wrote to

00:08:04   tell us, and we observed ourselves at WWDC, that the Notes app, as written by Apple, the

00:08:11   backend is now indeed iCloud. It is no longer IMAP. Thank you to the entirety of the internet

00:08:17   for letting us know that, because that is the case.

00:08:21   And there's a one-time porting of your data.

00:08:23   Like kind of like, what did they do with that in Yosemite?

00:08:25   Like maybe it was iCloud Flow Library?

00:08:28   I don't know.

00:08:29   Something else.

00:08:29   Anyway.

00:08:30   You're talking about the documents moved to iCloud Drive.

00:08:33   Oh, yeah, yeah.

00:08:33   When they changed the storage, the document--

00:08:35   there's a one-time operation.

00:08:37   We say, are you ready to move everything over

00:08:38   to the new system?

00:08:39   Once you do that, you have two sets of information,

00:08:41   one visible on the pre-LKAPU10 systems

00:08:44   and one visible on the post.

00:08:45   And they're divorced after that.

00:08:47   And anyway, so I'm very happy to hear that it's not IMAP.

00:08:49   And specifically, in case you said iCloud,

00:08:51   specifically it's CloudKit, which is worth noting

00:08:55   because iCloud as an umbrella term has a fairly mixed

00:08:58   reliability history because some of the parts of it

00:09:01   were not that great, like the core data sync

00:09:03   or the original document store.

00:09:04   A lot of people had problems with those.

00:09:06   Whereas CloudKit-based things, including the new Photos app

00:09:10   and a lot of apps written since last year,

00:09:13   tend to be pretty well regarded.

00:09:14   I don't think anybody has really had major problems

00:09:17   with CloudKit so far.

00:09:18   And even like any issue people have had with the Photos app

00:09:22   seem to be related to the locally running code

00:09:25   and in the app itself, not the cloud back end,

00:09:28   which seems pretty solid.

00:09:30   That's another follow up item.

00:09:31   I'm pretty sure I said this to you in person and not

00:09:33   on a podcast.

00:09:34   This is the problem about seeing each other in person,

00:09:36   talking about my experience using photos on the MacBook

00:09:38   One and the Apple Store.

00:09:40   How did it go?

00:09:41   Yeah, so I went to the Apple Store

00:09:43   finally to see the MacBook One, try the keyboard.

00:09:46   I'm not going to talk about the keyboard now.

00:09:48   save that for later. The short answer on the keyboard is my results were inconclusive.

00:09:53   Anyway, it also had photos on it. I was trying to make the thing heat up, like, "Oh, it's

00:09:57   fanless, blah, blah, blah. Can I do something to make this heat up?" And I immediately thought

00:10:00   of running the new Photos app. Surely that will make it heat up, it will grind away when

00:10:03   it launches and everything like that. And the MacBook One has a very wimpy CPU. I haven't

00:10:08   looked at the specs, but I'm going to guess that it's probably in the same ballpark as

00:10:13   my Mac Pro, like maybe even slower possibly.

00:10:17   It might, I mean, in parallel tasks,

00:10:19   it's almost certainly slower.

00:10:20   In single-threaded, it's roughly equivalent to like a,

00:10:24   I think it was like a 2011 era MacBook Air CPU.

00:10:28   - Right, and that's what we have here.

00:10:29   We actually do run photos on our 2011 Air

00:10:32   that's back there, I can hear the fans worrying now

00:10:34   because they're doing some backup stuff.

00:10:36   And I wanted to try it out to heat up the MacBook One.

00:10:41   And I was shocked by how incredibly fast and responsive

00:10:44   everything was on that MacBook One using photos.

00:10:48   I did all my normal stuff.

00:10:49   It launched fairly quickly.

00:10:51   I went through photos, I selected them,

00:10:53   my favorite of them, I added keywords,

00:10:55   I added keywords to big selections of things,

00:10:57   like everything was instant.

00:10:58   And the only thing I can think of is their photo library

00:11:00   was of course like 2,000 photos and mine is 60,000.

00:11:03   And the MacBook One, does it have eight gigs of RAM?

00:11:06   Yes, and it has twice the RAM.

00:11:08   So I still don't quite know exactly what it is

00:11:11   about my 2011 MacBook Air that has so brutalized

00:11:14   My best guess now is, I imported from iPhoto.

00:11:18   I imported from iPhoto, assuming it shoved all the metadata

00:11:21   into whatever it's using,

00:11:22   probably maybe a SQLite database or something.

00:11:24   Maybe all the operations I'm doing

00:11:26   cause a database operation that takes a ton of time

00:11:29   because my database is stuffed with everything.

00:11:31   And if I took all these photos out and re-imported them fresh

00:11:34   with no metadata, it would be fast, I don't know.

00:11:36   I'm not excusing the Photos app

00:11:38   because I basically did exactly

00:11:39   what Apple expected me to do.

00:11:40   I bought their program,

00:11:41   I used it to store my family photos for years,

00:11:43   the new one came out, I did the import process

00:11:45   and imported my photos and everything is super duper slow.

00:11:48   So I'm disappointed, but I have some amount of hope

00:11:52   seeing that it's obviously not CPU related.

00:11:55   I can't tell if it's RAM related.

00:11:57   I'm hoping somehow things get faster in a future version

00:12:02   because the experience of using photos

00:12:03   when everything is fast is actually not horrible.

00:12:06   - Excellent.

00:12:07   The other piece of follow-up we have,

00:12:09   and then I think we're done,

00:12:10   is the keyboard trackpad thing on iOS 9.

00:12:15   Is there a name for that?

00:12:18   - Swipe not to type?

00:12:19   I don't know.

00:12:20   I think it was called QuickType.

00:12:23   - Well, whatever it's called, whatever that thing is,

00:12:26   it apparently does work on not only the 6 Plus

00:12:30   in the iOS 9 beta, but interestingly, the 6 as well.

00:12:33   Serenity Caldwell, friend of the show,

00:12:35   has a 6 that she put iOS 9 on,

00:12:39   and it was working on her phone as well,

00:12:41   which was slightly surprising to me.

00:12:43   Not a bad thing, of course, but a little surprising.

00:12:45   So we should point that out as well.

00:12:47   Are you guys running iOS 9 on your carry phones?

00:12:50   - No.

00:12:51   - Who would do that?

00:12:53   - Apparently, Serenity.

00:12:54   - Some people do that, actually.

00:12:55   - Some people have to do it for a living, we don't.

00:12:57   - Three or four years ago, I probably would have done that.

00:12:59   But no, this year.

00:13:00   I have it on my iPad, which I hardly ever use,

00:13:04   and I keep coming back to it every couple of days

00:13:08   to do something on it, and the battery is just completely dead.

00:13:13   My experience on my beloved RetinaPad Mini, hi Steven Hackett, is not quite that bad,

00:13:17   but it is certainly very slow. It is certainly randomly rebooting, and I know that because

00:13:24   it says when you reboot, you know, you have to enter your passcode once you reboot, blah

00:13:28   blah blah. And it definitely is not getting the battery life I'm used to it getting. However,

00:13:33   I do like it and I did use picture-in-picture when I was on the plane back from San Francisco.

00:13:38   I was watching the complications video while doing something else.

00:13:42   I don't recall specifically what.

00:13:44   And the picture-in-picture even on my now almost two-year-old iPad Mini was really,

00:13:50   really cool.

00:13:51   And it worked reasonably well.

00:13:52   The only problem is it only works as with all these new hotness features.

00:13:56   It only works with Apple apps or at least that's been my experience so far.

00:13:59   But all in all, two thumbs up in principle for iOS 9,

00:14:03   one thumb up for the beta so far.

00:14:05   - Our first sponsor this week is Automattic.

00:14:09   Automattic is a connected car adapter

00:14:11   that plugs into your car's diagnostic port,

00:14:13   and then they have smartphone apps

00:14:15   that you can then do cool stuff with this,

00:14:17   and it integrates with over 20 different apps

00:14:19   to give you a better driving experience.

00:14:22   They've sponsored us before.

00:14:23   There's a bunch of new stuff since then.

00:14:24   So what it's always been able to do

00:14:26   is you pair it with the automatic iPhone or Android app,

00:14:30   and then it can do a few cool things.

00:14:32   It can diagnose your check engine light,

00:14:33   it can tell you in plain English what's going on,

00:14:37   it lets you clear the error code if it's a temporary error,

00:14:39   like you let your gas cap open or something like that.

00:14:42   It can give you a log of your trips

00:14:44   and your parking locations,

00:14:46   so you can track things like your fuel efficiency,

00:14:49   you can never lose your car in a parking lot.

00:14:51   If you have an accident,

00:14:52   it can automatically call emergency services for you

00:14:55   to help get you the help that you might need.

00:14:57   And then it can also evaluate your driving efficiency.

00:15:00   It gives you a score, you can match your goals,

00:15:03   so that you can save money on gas.

00:15:05   This can really add up to big savings over time.

00:15:08   Now, they actually launched their own little app store

00:15:11   for the car.

00:15:12   They have over 20 apps available,

00:15:13   and this allows you to use your car's data

00:15:15   in all kinds of ways.

00:15:17   So, just a few examples here.

00:15:18   They have an app called Concur,

00:15:20   which lets you pull your trips easily

00:15:22   into your expense reports.

00:15:23   So if you work at a company, Casey, you might have to do things like this. They also have

00:15:28   integration with If This Then That, IFTTT, which gives you the power to build all kinds

00:15:33   of recipes based on your driving. Recipes, of course, is an IFTTT term for various workflows

00:15:38   and triggers and various things you can do based on certain events or stats that happen

00:15:43   while you are driving. They also have a developer platform so that you, you developers, can

00:15:49   and build apps using the cars data as well.

00:15:52   There's three levels of data available for developers.

00:15:54   There's a rest API, a real time events API,

00:15:57   and a streaming SDK.

00:15:59   The rest API is very, very full featured.

00:16:01   It has, you can request drivers trip histories,

00:16:04   distance, routes, times, locations, miles per gallon,

00:16:08   and then you can even quickly launch your app on Heroku,

00:16:10   Casey, you can use your dinosaurs or whatever

00:16:12   and make that work.

00:16:13   Anyway, go to developers.automatix.com

00:16:15   to learn more about that.

00:16:16   So anyway, back to Automata device.

00:16:18   check it out whether you're a developer or not. If you are a developer, this is a pretty

00:16:21   cool way to do new stuff that you can't really do without something like this. If you're

00:16:26   not a developer, check it out to help improve your driving and to give you all the cool

00:16:29   features to maybe to use some of these cool apps, use some of the APIs, use some of the

00:16:33   triggers or just look at your metrics and get your measurements or check your engine

00:16:37   light, stuff like that. Very cool stuff. Normally, this is a hundred bucks but for us, it's 20%

00:16:43   automatic.com/ATP, that's automatic.com/ATP for 20% off,

00:16:47   brings it to just 80 bucks, that's free shipping

00:16:52   in just two business days, 45 day return policy,

00:16:55   and there is no subscription fee per month.

00:16:58   You don't have to pay like five bucks a month

00:16:59   for the service or whatever, no, you buy the automatic

00:17:02   device up front for 80 bucks with our coupon code,

00:17:05   automatic.com/ATP, 80 bucks up front, and then that's it.

00:17:09   No monthly fee, ships to you in two business days,

00:17:11   check it out, automatic.com/ATP.

00:17:14   Thanks a lot.

00:17:16   All right.

00:17:17   So we should probably talk a little more

00:17:19   about what was released and discussed

00:17:22   at WWDC to the best of our ability.

00:17:24   I don't know what is and what isn't ND8 anymore.

00:17:27   As far as I know, nothing's ND8, right?

00:17:29   You can download all the WWDC videos

00:17:32   without logging into Apple's website.

00:17:34   So I think we could talk about anything

00:17:36   that is in the WWDC videos.

00:17:38   Excellent.

00:17:39   So with that in mind, let's talk a little bit about the state of the union and some

00:17:43   of the stuff that's been making the rounds over the last couple of days in the really

00:17:47   nerdy developer circles, specifically around Bitcode.

00:17:50   So Jon, do you want to kind of give us an overview as to what this is?

00:17:54   First, after we recorded an episode of WWDC, I realized that we didn't talk about Bitcode.

00:17:59   I'm like, "Oh my god, did I totally space on that?

00:18:01   Did I forget because we didn't have any notes and I was just sitting there?"

00:18:04   And no, because we said we were going to cover the keynote and we went through the keynote

00:18:08   and Bitcode was not in the keynote.

00:18:11   So that in itself is interesting.

00:18:13   That what, this is what I was referring to before, the announcement that I was most excited

00:18:17   and intrigued about at WWDC was Bitcode and State of the Union.

00:18:21   And for the rest of the week, like boy, I can't wait to learn more about Bitcode in

00:18:25   the sessions.

00:18:26   And I, you know, obviously you can't go to all the sessions because it's a multitrack

00:18:30   conference.

00:18:31   I didn't go to all the sessions.

00:18:33   None of the sessions I went to mentioned the word Bitcode.

00:18:36   I believe that any of them have the word on a slide.

00:18:39   I later found out from someone tweeting screenshots that the app thinning session that I did go

00:18:43   to previously had bitcode in the description of the session and that was later removed

00:18:47   and having gone to the session I don't think bitcode was mentioned there either.

00:18:52   So that didn't tell me much of a bitcode but the reason I was excited by it is in the state

00:18:57   of the union, a video that we will link in the show notes because everybody can download

00:19:00   it and you don't have to, you know, log in or anything, was that it was going to be a

00:19:04   a way to have a processor agnostic platform, agnostic-er, slightly more agnostic representation

00:19:14   of your application that would be optimized for the specific platform that it's downloaded

00:19:19   for.

00:19:21   And this was an intriguing announcement because it freaked developers out and because it is

00:19:26   great fodder for speculation about rumors.

00:19:30   Right now when you submit an app to the App Store, you compile it, you build a release

00:19:34   that you uploaded in some, what is it, like,

00:19:36   it's all through Xcode, right?

00:19:37   I've never actually done this, so I don't know.

00:19:39   Marco?

00:19:39   - The regular way to do it is now,

00:19:41   it used to be like build an IPA, zip it up,

00:19:44   upload it through a terrible web interface.

00:19:46   Now you leave the terrible web interface to go to Xcode

00:19:50   to prepare the upload and do it off there.

00:19:52   There's probably a way to do it without that.

00:19:54   There's probably some kind of like advanced enterprise tool.

00:19:56   Yeah, but the way almost everyone does it is through Xcode.

00:19:59   - But anyway, it does a release build

00:20:01   with all your optimizations enabled

00:20:03   enabled and it uploads the result to Apple and that is, you know, obviously it's signed

00:20:11   by Apple and they do some other things with it, but in general, there's the expectation

00:20:15   that the thing you built on your machine, especially for Mac apps where it's like literally

00:20:19   running on the thing, like it's not, you know, maybe less so for iOS apps where you're always

00:20:22   running it in a simulator and then you do the release build and you're running that

00:20:25   on your device or whatever.

00:20:26   But anyway, the expectation is the binary that you have made and tested is going to

00:20:31   to be the binary that lands on people's computers.

00:20:33   And that binary is a compiled binary

00:20:36   targeting a specific architecture.

00:20:37   You can make it for x86-64,

00:20:39   you can make it for ARM7, ARM7s,

00:20:41   like it's all sorts of processors you can target

00:20:43   that limit the hardware you can go on.

00:20:44   But the bottom line is you are creating

00:20:47   a native binary executable that can run

00:20:50   in iOS or OS 10 exactly as it is.

00:20:53   And if you were to do an MD5 checksum,

00:20:55   well, maybe not for the signing.

00:20:56   I don't know, I'm trying to express the idea

00:20:58   that like the thing that you debugged on your device,

00:21:00   You make a release build, put it on your device,

00:21:02   and you use it.

00:21:03   That's the same code that's gonna be executing

00:21:04   on somebody else's device

00:21:07   when they download the app from the store.

00:21:09   But Bitcode is saying, "We're going to build something

00:21:11   "that is not native code for any processor,

00:21:15   "and that's what we're gonna have on the store."

00:21:17   And at some point in the future,

00:21:20   I assume at the point of download,

00:21:23   but really it could be almost any time,

00:21:25   that code will be converted to native code

00:21:28   that is specifically optimized for whatever it happens

00:21:30   to be running on.

00:21:31   Bitcode itself is not new.

00:21:34   It's part of LLVM since I think version two.

00:21:37   Previously, I think they called it bytecode.

00:21:39   I don't know if it ever was bytecode

00:21:40   or just differences how the stream format is made.

00:21:43   But either way, it's just a compact binary representation

00:21:46   of LLVM IR, which is the intermediary representation.

00:21:49   And boy, there's a lot of acronyms for expanding.

00:21:52   LLVM originally was an acronym

00:21:54   that stood for low-level virtual machine.

00:21:55   Now LLVM encompasses a much larger project

00:21:58   but then that's kind of a misnomer at this point.

00:22:01   But LLVM IR really is kind of assembly code

00:22:04   for an imaginary processor

00:22:06   with some vaguely idealized characteristics.

00:22:10   I guess we'll link to my Swift thing.

00:22:11   I think I talk about LLVM IR in there.

00:22:13   So bit code is just LLVM IR,

00:22:15   but instead of looking like text,

00:22:16   it is a compact representation.

00:22:19   If you can think of compiling your code,

00:22:20   starting from source code,

00:22:22   and it being transformed several times

00:22:24   till eventually ends up at a binary,

00:22:25   LLVM IR is slightly before it's changed

00:22:29   into machine code.

00:22:30   So they're saying we're gonna turn your program

00:22:33   into LLVM IR and code that LLVM IR as bit code

00:22:35   and that's what we'll have on the store.

00:22:38   And when someone, again, we don't know

00:22:40   when this is gonna take place.

00:22:41   I assume it's on download, but you could take that bit code

00:22:44   and download it to everyone's device and when they run it,

00:22:46   it could be compiled just in time

00:22:47   for their particular architecture.

00:22:48   I assume they're gonna do it when you download it.

00:22:51   So that's the technical gist of what they're doing here.

00:22:55   they didn't talk a lot about it, so we don't know when this is all going to take place.

00:22:59   Bitcode is, I'm going from memory here, mandatory for native WatchKit apps, is that correct?

00:23:04   I believe that's right.

00:23:05   And it said optional for iOS apps for now.

00:23:08   Yeah, and it didn't say anything about the Mac, but I mean, there is nothing technical

00:23:13   that makes Bitcode not able to work on the Mac, or that means it would have to be mandatory

00:23:18   on the Watch.

00:23:19   These are policy decisions.

00:23:20   And it's, you know, but why is it mandatory on the Watch?

00:23:23   Well, that's the newest platform.

00:23:24   Nobody has made a native app for the watch except for Apple, so it's not like it's a

00:23:29   big change.

00:23:30   It's like, "Look, this is just the way it is in the watch.

00:23:31   You're going to submit bitcode, right?

00:23:34   Your release builds are going to upload bitcode to us, and then everyone else who gets it

00:23:37   is going to get an executable binary optimized for the particular piece of hardware they

00:23:43   have it on."

00:23:44   So when they made this announcement in the keynote, I made a bunch of silly tweets about

00:23:49   how this could...

00:23:52   the obvious rumors to people are gonna say is,

00:23:53   oh my God, this means ARM Macs,

00:23:54   because if you're trying to change

00:23:57   the application representation to be this thing

00:24:01   that's not specific to any one processor,

00:24:02   and then you optimize it on the fly,

00:24:04   then you could change the processor architecture

00:24:05   at any time, right?

00:24:06   And then you would just recompile this bit code

00:24:08   for the new architecture.

00:24:09   So if they got everyone onto bit code

00:24:11   and they changed to ARM Macs,

00:24:12   developers wouldn't even need to rebuild their apps

00:24:14   and resubmit, and you wouldn't need to have fat binaries,

00:24:16   it would just be everything is bit code,

00:24:18   and then you download it to your ARM Mac

00:24:19   and it turns it into an ARM executable,

00:24:21   you download it to your x86 Mac, turns it into x86 executable.

00:24:24   That is the immediate fantasy rumor when people hear about bitcode.

00:24:29   Unfortunately, as fun as that would be to speculate about, that's not really how LLVM-IR

00:24:34   and bitcode work.

00:24:36   LLVM-IR, although it is kind of imaginary assembler for an imaginary processor, it has

00:24:41   things in it that are specific to an instruction set or an architecture.

00:24:48   It's not completely pinned down, but it's not the type of thing where—I think you

00:24:53   brought this up when we were talking about the endianness.

00:24:55   In my research, I've determined that there is much more instruction set-specific stuff

00:25:02   in LLVM IR than you would imagine, and it's not as trivial as just saying, "Well, LLVM

00:25:06   R is completely processor-agnostic, and when we turn it into machine code, we can turn

00:25:09   it into machine code for any processor."

00:25:11   That seems not to be the case.

00:25:13   I've been trying to find out what are the nature

00:25:16   and number of those things, like what is it about LVMR

00:25:21   that's pinned down to a particular instruction set

00:25:22   and how deep does it go?

00:25:24   I haven't been able to find any good examples

00:25:26   of looking at the point I'm looking at the LVM source code.

00:25:29   I realize I'm in over my head, I don't quite understand it.

00:25:31   But anyway, if you are entertaining fantasies of bitcode,

00:25:35   meaning that if all our apps are updated to bitcode,

00:25:39   they can change processes without any problem with that,

00:25:41   as far as I can tell is absolutely not the case.

00:25:44   So the next question is, why the hell does bitcode exist

00:25:49   if not for my fantasy scenario of enabling our Macs?

00:25:52   Guys have any theories?

00:25:54   - Well, I mean, there's a lot of other optimizations

00:25:56   they could do, like, you know, maybe this would just

00:25:59   help them, first of all, there's like,

00:26:01   just better optimizations for the next step, you know,

00:26:04   I don't know quite how low level the bitcode is,

00:26:08   but I imagine it's not just like a text version

00:26:11   of assembly code, like I imagine it's like a little bit higher than that, so you know,

00:26:15   if they develop new optimizations for how they translate that into the assembly language,

00:26:21   even within the same CPU family, just over time, they develop some cool optimization,

00:26:25   they can then apply that to apps. More significantly probably, they could, you know, when you move,

00:26:33   when you make a minor update within a CPU architecture, so you go like, you know, from,

00:26:38   ARMv7s to ARMv7k or whatever, I don't know all those code names and which ones are minor,

00:26:46   but when Intel releases a new CPU with new streaming instructions, new vector instructions,

00:26:54   if there's a way for them to use bitcode to retroactively optimize apps for new instructions

00:27:01   and things like that for more minor CPU revisions, that could be useful. I don't know how

00:27:08   useful that is, you know, as like a percentage of overall performance and, you know, like

00:27:12   I don't think, I don't see why this is worth the trouble yet. And I think over time we

00:27:21   will see why it's worth the trouble. But right now it is not immediately apparent because

00:27:25   you're right, like the big changes would involve things like byte order changes where like

00:27:31   that that's a bigger problem and this can't automatically deal with that properly because

00:27:35   at the level at which byte order assumptions happen, this can't do it.

00:27:39   I think it's even deeper than that.

00:27:41   Even if you had an architecture that had the same byte order, that LLVM IR still pins things

00:27:46   down with a target architecture in mind.

00:27:49   Because that representation is the thing that the optimizer can work on.

00:27:51   It's marked up more than assembly would be.

00:27:54   The thing that consumes LLVM IR and outputs machine code, it knows much more about the

00:28:00   structure of things.

00:28:01   LVM are sort of annotated with much more information

00:28:04   that assembly would be to indicate types

00:28:08   and from whence each bit of code came and what a function is.

00:28:13   And it's not just an ASCII representation of machine code.

00:28:18   Far from it.

00:28:18   So that's why the thing that produces a machine code

00:28:22   can optimize it in ways that you can't optimize if you just

00:28:25   have a .s file and say, oh, now I'll optimize that.

00:28:27   There's lots of optimizations you

00:28:28   can't do to plain old assembly because you just

00:28:30   enough about the meaning of the original program. It's like, well this assembly

00:28:34   does what it does, I don't know if it's safe to make this transformation, but LVM IR

00:28:38   has more information about it. Before we get into like the worth the trouble, like

00:28:43   probably into the trouble aspect of it, it's interesting to think about why this

00:28:48   is even possible or a thing. This is only possible if, only feasible, because Apple

00:28:55   controls the means of distribution for all iOS

00:28:59   and watch applications, setting aside jailbreak

00:29:01   and blah, blah, blah, right?

00:29:02   That means that they can, A, they can mandate this

00:29:06   and say, guess what, you're gonna submit

00:29:08   bit code for the watch.

00:29:08   You're like, all right, I guess I'm gonna submit

00:29:10   bit code for the watch.

00:29:12   And B, they know where everybody's getting

00:29:14   their WatchKit apps from.

00:29:15   So if the only source for WatchKit apps

00:29:18   only ever has bit code, any benefits,

00:29:21   which we'll talk about in a second,

00:29:22   that they might have will benefit the entire platform.

00:29:26   It's not like, well, it'll benefit like on the Mac,

00:29:28   if they did it on the Mac,

00:29:29   well, it'll benefit for people

00:29:30   who download from the Mac App Store,

00:29:31   but people can put DMGs up on their websites

00:29:34   that do or don't have bitcode in it.

00:29:35   So, you know, like you're not getting that advantage

00:29:39   across the platform, but for iOS and the watch,

00:29:41   whatever benefits Apple thinks it's getting,

00:29:43   it gets everywhere.

00:29:44   iOS, of course, would have to go through a conversion.

00:29:46   The watch will be bitcode, all bitcode from the beginning.

00:29:49   So, lots of interesting things become possible

00:29:54   when all of your software funnels through a single point.

00:29:57   Lots of good things and bad things,

00:29:58   and I think Apple's hoping this is one of the good things.

00:30:02   - Right, and the bad things, I think, about bitcode,

00:30:06   what scares me as a developer,

00:30:07   you know, like a lot of developers are saying,

00:30:08   "Well, this is gonna change my binary,

00:30:10   "I'm worried about crashing," and stuff like that.

00:30:12   That's valid.

00:30:13   I'm not necessarily worried about that myself,

00:30:16   although that does introduce an interesting problem

00:30:18   of this would then, like, you know,

00:30:21   if this is, say, crashing on an iPhone 5S,

00:30:25   and you don't have an iPhone 5S because now that's old

00:30:29   and you don't have one anymore

00:30:29   or you never got one to begin with,

00:30:31   then you might have to go get an iPhone 5S

00:30:33   just to even reproduce the crash,

00:30:35   if you'll even be able to.

00:30:36   So that's a problem.

00:30:38   I think that's a minor one, though.

00:30:40   To me, the bigger problem here is,

00:30:42   if you look at, you know, what you mentioned earlier

00:30:46   about how developers want people to build

00:30:49   their final binary, ship it to Apple,

00:30:51   and then have Apple ship that to devices

00:30:54   so they know the final bits they built.

00:30:56   In reality, that has never quite been the case

00:30:59   because of code signing.

00:31:00   And even though it's not technically part of the app binary,

00:31:04   it's an important enough part that every so often,

00:31:07   as I ran into with this paper a long time ago,

00:31:09   and as still happens with somebody every few months,

00:31:13   every so often, code signing breaks on Apple's side.

00:31:17   And something goes wrong where apps reach the App Store

00:31:20   with invalid code signing by Apple.

00:31:24   And so what happens to the user is they tap to open them

00:31:27   and they appear to just crash immediately on launch.

00:31:30   You might see the launch default image,

00:31:34   but for the most part, they just crash on launch.

00:31:36   They appear to be, at least.

00:31:38   In reality, code signing is just failing and exiting.

00:31:40   But every so often, you have this problem as a developer

00:31:45   where your app crashes because Apple messed up

00:31:48   while modifying it on the way to the store.

00:31:51   Bitcode is now giving them another way to do that.

00:31:55   It's giving them another opportunity for things to go wrong.

00:31:59   That, what worries me is not that a Bitcode abstraction

00:32:03   would be insufficiently tested,

00:32:04   that a Bitcode optimization would go wrong.

00:32:07   What worries me is like now there's another step

00:32:10   between me and the customers,

00:32:12   regardless of what that step is,

00:32:14   there's another step that can cause problems when it breaks.

00:32:18   And I'm not gonna, not even gonna say if it breaks,

00:32:20   'cause we know these things break sometimes.

00:32:22   That is what is the big risk here,

00:32:24   is like yet another thing that Apple's going to modify

00:32:27   about my app on the way to the customers

00:32:28   that might occasionally go wrong.

00:32:30   - Yeah, and that's what developers are wary about,

00:32:32   is it's a loss of control.

00:32:33   Like already, you know, you're not controlling

00:32:36   who your app is distributed to and so on and so forth,

00:32:38   but from a technical perspective,

00:32:39   You always want to have the ability

00:32:43   to have the exact same thing running

00:32:45   that the customers have, even if you can't actually

00:32:46   communicate with them.

00:32:47   You want to know-- you want a predictable chain of events.

00:32:51   And there's always parts that are not predictable.

00:32:54   Even though Xcode is running on your system,

00:32:56   you don't know the internals of the compiler.

00:32:58   There could be a compiler bug and a point release of Xcode

00:33:00   that hosts your binary that somehow makes it run.

00:33:02   There's always bugs.

00:33:03   But adding more of those things makes

00:33:04   developers feel uncomfortable.

00:33:06   And it's uncertainty.

00:33:08   We've been battling with code signing for tons of years now,

00:33:11   and it drives people crazy for a variety of reasons.

00:33:14   But this just adds another thing.

00:33:15   So is this going to be worse than code signing is in terms

00:33:18   of things you have to fight with?

00:33:19   I think it'll probably be better just because, especially

00:33:22   in the short term, this is just sort of stopping short

00:33:26   of that final step, targeting at this point

00:33:29   a single architecture because there only is one Apple Watch.

00:33:32   So there's some runway for them to work out the kinks in this.

00:33:35   Because the idea is like, oh, I don't

00:33:36   know how it's going to be-- well,

00:33:37   you will know how it's gonna be built

00:33:38   because when you upload the bitcode to the store,

00:33:40   it's going to convert it to a binary

00:33:41   exactly the same way it does in your system

00:33:43   because everybody has the same watch

00:33:44   'cause there's only one watch, right?

00:33:45   So it's an ideal platform to test this out on.

00:33:48   What people are worried about is,

00:33:49   I test it on all my devices, but like you said,

00:33:52   when the bitcode gets converted to the A5,

00:33:55   it turns out the optimizer does something bad on the A5

00:33:57   and it crashes and I don't have an A5 device.

00:33:59   And maybe that would still happen with the binary,

00:34:01   but you're not entirely sure.

00:34:02   Like for example, if the compiler emitted an instruction

00:34:05   that has bad performance characteristics

00:34:07   or reveals a bug or something on the A5,

00:34:11   you wouldn't know that unless you ran it on an A5.

00:34:13   So not having an A5 could be a problem in all situations.

00:34:17   Trying to think about why Apple would wanna do this.

00:34:20   Again, I'm basically ruling out,

00:34:22   oh, this makes us able to change

00:34:24   processor architectures easily.

00:34:26   I don't think this helps or hurts in that regard.

00:34:29   But Apple does change, as Marco said,

00:34:34   the minor parts of the architecture.

00:34:37   They make their own chips essentially at this point.

00:34:40   Different chips have different vector units.

00:34:42   Maybe they add an instruction here or two.

00:34:44   Maybe they tweak something.

00:34:47   Maybe they try to change one of their, you know,

00:34:51   underlying frameworks or libraries

00:34:54   to do something smarter on the new, you know,

00:34:58   the A9 or the A10 or the A11.

00:35:00   All these things might seem like minor concerns,

00:35:03   but from Apple's perspective,

00:35:05   if they do something really cool in the A10

00:35:08   and they change around a bunch of things having to do

00:35:12   with like number registers, pipeline depth,

00:35:16   size of the vector units,

00:35:18   like a new specialized instruction for a particular thing,

00:35:22   they're helpless to change all the, what is it, millions?

00:35:26   I don't know how many apps there are on the App Store.

00:35:28   Lots and lots of apps on the App Store

00:35:30   that are already compiled into machine code.

00:35:32   And there's nothing they can do short of nagging developers

00:35:35   saying, hey, your app, not so much would run faster,

00:35:39   but your app would be much kinder to our battery

00:35:41   if you would just recompile it.

00:35:42   Because actually all of this, whatever,

00:35:44   Core Audio, Core Image, whatever, like VDSP,

00:35:48   whatever little library you're using in your app,

00:35:51   if you could recompile it for the A10,

00:35:55   it would be much nicer for battery life,

00:35:56   or for the S2, or for the S3, or whatever.

00:36:00   I'm thinking mostly in terms of battery life,

00:36:01   not performance because that's where Apple's been concentrating these days,

00:36:04   and they have no leverage to do that. So Apple, you know, is such a control freak

00:36:08   as a company, but like, you know, it makes their products better. How can they

00:36:11   convince a million developers to rebuild their apps? They can't. And people will

00:36:14   just keep downloading apps, they keep slaughtering their batteries, even though

00:36:18   Apple has done this super hard work in the A9, A10, A11, or whatever, S1, S2, S3,

00:36:23   S4, to try to make a more battery-efficient architecture. And

00:36:27   because they do control the means of distribution of all the apps, like we've

00:36:31   got all these apps, we've got all these binaries, but they're not taking

00:36:34   advantage of all this hard work we're doing. Ah, but on the watch, if they make a

00:36:37   bitcode from day one, they can be assured that if they make the S2 or the S3

00:36:40   massively more battery efficient by tweaking the particular instructions

00:36:43   that they have, that they don't need developers to rebuild their apps. They

00:36:46   will do it. When they optimize the bitcode to make the native binary for

00:36:51   the S3, they will do the transformation that uses the new instructions that are

00:36:56   nicer on the battery on the S3. So your same app that you didn't have to

00:36:59   recompile that you never looked at that you just put in the store or whatever your you

00:37:02   know little doohickey or and probably not gonna be a lot of games but that would be

00:37:06   the ideal case will suddenly be more battery efficient on the S3 without you having to

00:37:10   do anything and that may seem like a minor thing but I think that is more than enough

00:37:17   reason for Apple to want to do this because this is exactly what they always want to do

00:37:20   what what can only Apple do only Apple makes its own CPUs makes its own compiler it may

00:37:26   the distribution of all the applications, like they have the complete package here and this is

00:37:30   one of those things you can do when you have the complete package. And I think that's probably much

00:37:34   more exciting for Apple than it is for us on the outside. And I think Apple is going to endure the

00:37:42   potential scariness for developers. I mean, they've proven they'll do that with sandboxing, they'll do

00:37:47   it with code signing. The developers will endure it because that's where the customers are and

00:37:53   and that's where the money is,

00:37:54   and you gotta do what you gotta do.

00:37:56   But I definitely think this is the most interesting

00:37:58   and probably least understood, including by me,

00:38:01   because Apple said nothing about it, announcement at WWDC,

00:38:04   and I'm very interested in learning more about it

00:38:06   from anyone who's willing to tell me anything about it.

00:38:09   (laughing)

00:38:11   - Now I think you hit the nail on the head, John,

00:38:12   that basically this is about keeping their options open,

00:38:15   and Apple tends, from what we can tell,

00:38:18   to like to keep their options open.

00:38:20   So I'm curious to see, like you said, where this goes.

00:38:23   And if we'll ever hear of a time where Apple says,

00:38:26   which I doubt, but, you know, "Oh, hey,

00:38:28   this is all possible because of Bitcode."

00:38:29   You know, we've all kind of realized that, say,

00:38:32   iPad multitasking is possible because of auto layout

00:38:35   and size classes, and that's kind of been a wink and a nod

00:38:40   from Apple that has indicated,

00:38:42   well, obviously we could all put it together,

00:38:44   but also indicated that.

00:38:46   So I'm anxious to hear more about this as time goes on.

00:38:49   I don't know.

00:38:50   I wonder if they'll even mention it again.

00:38:52   But in terms of future possibilities, it's not so much future from Apple's perspective

00:38:57   because the A9, the S2, the S3, the A10, those are all real things inside Apple with some

00:39:03   of them probably done, some of them have designs.

00:39:05   So if they're going to fiddle with some instructions for battery efficiency, those instructions

00:39:10   already exist.

00:39:11   They're already in that situation where they say, "When we release the S2, all of our watch

00:39:15   binaries are not going to take advantage of these great new instructions that we've added

00:39:20   or that we've tweaked or these new execution units or the different register layout or

00:39:24   whatever because the machine code has already been built and the loops have already been

00:39:29   unrolled and all that stuff, we can't rely on the rename registers to do all the shuffling

00:39:35   for us.

00:39:36   If only we could rebuild all the watch binaries, take advantage of what we know is going to

00:39:40   be a great feature of the S2 or S3 because it's already done, they already have those

00:39:44   features.

00:39:45   From our perspective, it's like,

00:39:46   oh, this opens up possibilities.

00:39:47   From Apple's perspective is, we're doing this now

00:39:49   because we know for sure, because we're making the chips,

00:39:52   that we don't want a bunch of binaries built for the S1

00:39:55   to be stuck in the store for years and years

00:39:57   because we can't get developers to recompile them.

00:40:00   And iOS, again, they have to transition that.

00:40:02   And the Mac, they're stuck in the situation

00:40:04   where the bottom line is, I don't know if it's most,

00:40:07   but certainly not all Mac software

00:40:10   comes from the Mac App Store,

00:40:11   so I'm not sure what they're gonna do there.

00:40:13   But like I said, this technology,

00:40:14   They could do it in the Mac App Store.

00:40:16   They are doing it on iOS and the Watch.

00:40:18   It just seems like it has less of an advantage there.

00:40:21   And frankly, they don't care that much,

00:40:22   it seems, probably, on the Mac.

00:40:23   Like, oh, you want to rebuild your binaries to take it--

00:40:27   because they don't make the CPUs.

00:40:28   Intel does.

00:40:29   And so they're not as privy to Intel's roadmap

00:40:31   as they are to the A-line of processors.

00:40:35   I wonder also how much of this is in response to

00:40:39   and preparation for the world we live in now.

00:40:42   which is like back in the olden days,

00:40:44   you know, 2008, 2009, early days of the App Store,

00:40:48   Apple could announce any change really,

00:40:50   or at least any new hardware,

00:40:52   and a very large portion of apps in the store

00:40:55   would be updated within a reasonable amount of time

00:40:57   to account for that, to accommodate that.

00:40:59   They could release like, you know,

00:41:01   they released the iPad, and developers adapted to that.

00:41:05   They eventually released, you know,

00:41:07   even as recently as the iPhone 5,

00:41:09   they would release a new screen size,

00:41:11   and most apps got updated relatively quickly to it.

00:41:15   But I think as we're seeing,

00:41:17   the rate of that is slowing down dramatically.

00:41:19   So now we have apps like,

00:41:21   the iPhone 6 is now almost a year old, and 6 Plus.

00:41:26   They're now almost a year old.

00:41:28   We're seeing apps from people who have a lot of users

00:41:32   but don't necessarily care about their apps, like banks.

00:41:35   We're seeing apps like,

00:41:37   I still have so many apps on my phone

00:41:39   from companies that have plenty of resources

00:41:41   to update them that don't even run natively

00:41:45   on the iPhone 6 screen, still.

00:41:48   Some of them are even adding other features.

00:41:50   Like, I think somebody said their bank supports Apple Pay now

00:41:53   but their app still doesn't support iOS 6,

00:41:56   or I mean the iPhone 6 screen.

00:41:58   Like, there are so many of these things.

00:42:00   And the way Apple usually adds these new features

00:42:04   or new support to apps is they build in

00:42:06   some kind of compatibility mode where the app just scales

00:42:09   to the new screen size or whatever the case may be

00:42:11   or it doesn't get the new features or whatever.

00:42:14   And only apps that are built with the new SDK,

00:42:19   that are compiled against the new SDK,

00:42:21   only they get the new features.

00:42:22   And they do this so that when you update OSs,

00:42:25   a whole bunch of apps don't break.

00:42:27   The limitation, or the downside to this is like right now,

00:42:30   everyone's installing the beta of iOS 9

00:42:33   on their iPad Air 2s to try split screen,

00:42:36   and none of their third party apps work yet.

00:42:38   because only third party apps built with the week old

00:42:42   iOS 9 SDK, and that are somehow now available

00:42:46   to their customers, which can't even exist

00:42:48   in the app store yet, it's only through TestFlight,

00:42:50   only those will be running in split screen mode.

00:42:53   And so you have this new feature,

00:42:54   and then when iOS 9 is released this fall,

00:42:58   presumably with a larger iPad also,

00:43:01   there's gonna be the vast majority of iPad apps out there

00:43:05   are not gonna be compatible with these new features.

00:43:07   they might not be compatible with the new iPad screen size.

00:43:12   And that hurts Apple, it hurts Apple's hardware ambitions

00:43:16   and pushing the roadmap forward

00:43:18   and pushing the software SDK forward.

00:43:20   It hurts them that so many apps are not being updated

00:43:24   in a reasonable amount of time to their new stuff.

00:43:27   So they have to come up with ways to increase the chance

00:43:31   that they can just opt everyone in rather than right now

00:43:34   where everyone gets opted out of new changes.

00:43:36   And so one of those things is auto layout.

00:43:39   One of those things is launch image storyboards

00:43:43   instead of just flat images.

00:43:45   And maybe Big Code is part of that too

00:43:47   in what is probably a small way,

00:43:50   but it has to be related,

00:43:52   'cause this is a big problem Apple faces

00:43:54   in the App Library these days.

00:43:56   And I see it only getting worse in the future

00:43:58   as not only as the economics of the App Store get harder,

00:44:02   but also as Apple seems to be increasing

00:44:05   at which they are adding new device capabilities,

00:44:09   adding new screen sizes.

00:44:10   And on the watch, maybe when watchOS 3 comes out next year,

00:44:15   presumably, the watch layout is so simple.

00:44:21   It's this kind of like stack view based hierarchy.

00:44:23   Like what you get on the watch layout wise, UI wise,

00:44:26   is so simple that if they added a new watch screen size

00:44:30   next year or this fall or spring or whatever,

00:44:33   if they add a new screen size to the watch,

00:44:35   they might be able to just opt everyone in.

00:44:38   They might not have to do the default opt out

00:44:40   and then scale it to some stupid blurry resolution.

00:44:43   They might be able to just opt everyone in

00:44:44   and it just works because apps are so limited

00:44:46   in what they could do layout-wise.

00:44:48   They've been beating us over the head

00:44:49   from day one with WatchKit saying,

00:44:50   don't assume a screen size.

00:44:52   And with things like bitcode and auto layout,

00:44:55   and maybe this is all going towards that goal.

00:44:59   - Only time will tell.

00:45:00   But what else is awesome these days?

00:45:03   Our second sponsor this week is Squarespace.

00:45:06   Squarespace, build it beautiful.

00:45:08   You can build so many kinds of websites with Squarespace.

00:45:11   It is so hard to justify building a website any other way

00:45:15   for so many types of things.

00:45:18   So let's say you're building a site for yourself.

00:45:21   You have a blog, a portfolio, maybe you're a photographer,

00:45:23   you have a photo portfolio.

00:45:25   My wife uses it for that and she loves it.

00:45:27   Maybe you have a restaurant or a business,

00:45:30   you want a site for that.

00:45:31   If you want to have a store where you sell t-shirts, you can do that.

00:45:37   If you want to have a site for a book or an album or whatever, you can do all this with

00:45:41   Squarespace.

00:45:42   There are so many kinds of sites you can make with Squarespace.

00:45:45   Now, I've used a lot of tools for building websites before, and I can build my own websites

00:45:49   from scratch.

00:45:50   I know how.

00:45:51   I know how to run servers.

00:45:52   But in so many cases, it's just not worth it.

00:45:55   Even for geeks like us, it is so often just worth hosting on Squarespace rather than setting

00:46:01   up your own server somewhere or building your own CMS from scratch, it is so really worth

00:46:06   doing that. So Squarespace makes it simple, powerful, and beautiful to make websites.

00:46:12   They have a robust and reliable platform, state of the art technology powering your

00:46:16   site. They ensure maximum stability under load. If you get slammed by a big traffic

00:46:21   load, they will keep your site up. They have maximum security. You don't have to worry

00:46:25   about your site getting hacked. I don't think I've ever heard of a Squarespace hack, honestly.

00:46:28   I certainly can't remember one, which is pretty impressive for a service that size.

00:46:34   All their designs are beautiful and professionally designed and they're all responsive.

00:46:39   So your design looks great on every device every time.

00:46:42   The screen sizes change over time and as new things are added, Squarespace is on top of

00:46:47   it.

00:46:48   As I mentioned earlier, if you want to have a store with commerce, you can sell digital

00:46:52   or physical goods.

00:46:54   It's all included in the platform.

00:46:56   So check all this out.

00:46:57   There's so much you can do in Squarespace.

00:46:59   Everything is WYSIWYG, you know,

00:47:00   what you see is what you get.

00:47:01   I don't know if I'm allowed to pronounce that like that,

00:47:03   but I'm gonna say WYSIWYG.

00:47:05   Everything is WYSIWYG.

00:47:06   Everything, you know, you can drag and drop

00:47:09   and you can move things around,

00:47:10   or if you wanna actually inject code, you can do that too.

00:47:14   You can write in markdown if you want to.

00:47:16   Really cool stuff.

00:47:17   Check it out.

00:47:18   Now, normally they offer a,

00:47:21   they have a free trial with no credit card required.

00:47:24   Now, they have a special deal now.

00:47:26   If you start your trial soon, before June 30th,

00:47:31   if you sign up for Squarespace's professional

00:47:32   or business plan, you will get a free year

00:47:36   of custom email and business tools when you sign up.

00:47:39   So start your free trial now to get into this deal

00:47:42   before June 30th, and then when you buy,

00:47:44   you can get the free year of custom email

00:47:46   and business tools for the professional or business plan.

00:47:49   So check it out.

00:47:50   Otherwise, if you don't need that

00:47:51   or if you missed the deadline, don't worry, try it anyway.

00:47:54   Go to squarespace.com, use offer code ATP to get 10% off your first purchase and to

00:48:00   show your support for our show.

00:48:02   So once again, squarespace.com, start a free trial, no credit card required.

00:48:06   It's great.

00:48:07   Build a site, see if you like it.

00:48:09   If you do like it, use coupon code ATP for 10% off your first purchase.

00:48:14   Thank you very much to Squarespace.

00:48:15   Build it beautiful.

00:48:16   Just want to save you from feedback that you may get, Marco, after your last talk about

00:48:21   the analogy between size classes and a lot of those stuff.

00:48:24   Oh no.

00:48:25   Marco was not suggesting that Bitcode will allow your applications to run at different

00:48:28   screen sizes.

00:48:29   He was making an analogy.

00:48:31   Right, and I'm saying, I think it's part of this overall picture of trying to get to the

00:48:38   point where Apple can make a new device that might have a new screen size, that might have

00:48:43   a new CPU.

00:48:45   They can make a new device and they can opt apps into the new features rather than right

00:48:49   now where apps are all opt-out until they're built to the new SDK.

00:48:52   Yeah, Apple's getting much better at that.

00:48:54   Because you can feel Apple's frustration of--

00:48:56   I mean, they kind of did it to themselves.

00:48:58   What do you mean, an iPhone SDK?

00:49:00   I guess, here, let's slap this together.

00:49:04   Everything was fixed size, and they changed the screen size.

00:49:07   It's like they're working-- as we said in past years,

00:49:08   they're working their way up to what they have now,

00:49:10   which is a much more flexible layout system that can lend

00:49:12   itself to features like split scheme.

00:49:14   But it took them a long time to get there.

00:49:15   But it's really hard to do that, even on the watch.

00:49:17   Like you said, the watch UI is so limited.

00:49:20   Surely the people doing the watch kit and everything

00:49:22   like keep in mind that screen sizes may change

00:49:25   so we should do everything we can.

00:49:26   We've been through this once before.

00:49:28   So in the watch kit thing, make sure we do everything

00:49:31   so that nothing is fixed size, nothing is specified,

00:49:33   just really keep a very limited API.

00:49:38   But even then, it's so hard to do things in a general way.

00:49:41   It's not like they're trying

00:49:42   not to telegraph future stuff.

00:49:43   It's just so hard to do everything in a general way.

00:49:45   And a good example is, what was it,

00:49:47   one of the sessions they were talking about,

00:49:49   the complication sizes and the graphics

00:49:51   that you can include, and it was like,

00:49:53   you can include one graphic for 38 millimeter size,

00:49:55   one graphic for the 48 millimeter size,

00:49:57   and then an at 2X size.

00:49:59   And they said, you know, if you don't include

00:50:01   any of the other ones, we'll just fall back to at 2X.

00:50:03   Also, if there's a watch that is not 48,

00:50:06   and not 38 and not 42 millimeters, we'll use the 2X.

00:50:11   And so they don't wanna say we're gonna make

00:50:14   a 38, a 42, and a 46, 'cause that would telegraph

00:50:17   they're having a 46, but at the same time,

00:50:20   if they come out with a different watch size,

00:50:22   good app developers are going to want to make

00:50:24   a pixel perfect native size for their new watch size.

00:50:27   Because they don't know what that watch size is,

00:50:29   they just have one kind of fallback

00:50:30   that they can kind of use in a pinch.

00:50:32   So, you know, it's better than not having a fallback.

00:50:35   It's better probably than scaling the 38 to the 42 size up.

00:50:39   But, you know, it's just so,

00:50:41   there are some things that just have to be fixed

00:50:43   for the device that you're doing,

00:50:44   particularly artwork, because, you know,

00:50:45   the whole fantasy back in the day was like,

00:50:47   everything will be vectorous and it will look good,

00:50:48   but that's not the reality of pixel art.

00:50:51   Good UI designs, especially when they're microscopic

00:50:54   like they are on the watch.

00:50:55   Someone's gotta sit in there with the individual pixels

00:50:57   and lay them out.

00:50:58   If they come up with a new size,

00:50:59   having something scaled is better than nothing,

00:51:01   but you're gonna have to go through and change it anyway.

00:51:02   And I mean, it just goes to like this,

00:51:05   you can't make it so that we can do anything

00:51:07   and all your apps will run perfectly

00:51:08   and take advantage of all the new features.

00:51:10   They're just trying to do everything they can.

00:51:11   And bit code is the hardware side of that.

00:51:13   Like under the covers,

00:51:14   we keep doing a bunch of crap down there

00:51:16   and we hate the fact that your binary

00:51:17   that you haven't updated in two years

00:51:19   is gonna be plunking onto people's phones

00:51:20   because they love your game or whatever.

00:51:23   - Or feet. - Yeah.

00:51:24   So the motivation for Apple to do this is so clear to me

00:51:30   and the discomfort from developers,

00:51:35   I don't wanna make a prediction,

00:51:37   but I'm really hoping that it turns out

00:51:40   to be mostly a non-issue in the same way

00:51:42   that compiler bugs and stuff like that,

00:51:44   or even code signing difficulties.

00:51:46   In the grand scheme of things,

00:51:49   app review policies feel like a much larger,

00:51:52   both potential and actual damage

00:51:54   to the experience of developers than bugs.

00:51:56   'Cause bugs get fixed.

00:51:57   Bugs, even when they did that thing with the code sign,

00:51:59   that was pretty much the biggest disaster

00:52:01   you could possibly imagine, they fix it, right?

00:52:04   Whereas app store policies try to convince someone

00:52:07   that it's a bug.

00:52:08   Is it a feature?

00:52:09   Is it a bug?

00:52:09   Is it intended?

00:52:10   Is it not?

00:52:11   Is it accidental?

00:52:12   What are the actual effects?

00:52:13   Much more difficult.

00:52:14   I have confidence that bugs will be addressed and fixed,

00:52:18   and I hope there aren't too many of them.

00:52:20   - All right, we should probably talk about Swift 2.

00:52:23   And I don't remember if we got to this

00:52:25   during the last episode or not,

00:52:27   but among other things, it's going to be open-sourced

00:52:29   later this year, including support for Linux

00:52:33   coming directly from Apple,

00:52:35   which is pretty exciting and interesting.

00:52:37   And I, for one, am extremely curious to see

00:52:41   what kind of adoption it gets from the Linux neckbeards

00:52:45   and all the server-side developers that run on Linux.

00:52:49   And Marco, you're one of those.

00:52:52   I'm curious to see how that goes,

00:52:53   because obviously JavaScript seems to, in many ways,

00:52:57   be the flavor du jour for new server development,

00:53:02   obviously Node.

00:53:03   - Which just goes to show that it doesn't need

00:53:04   to be a good language to get successful on the server.

00:53:06   (laughing)

00:53:08   - Although JavaScript isn't that bad, but anyway.

00:53:10   - The whole reason JavaScript is on the server

00:53:12   is because it's on the client.

00:53:13   That's the whole, because people are like,

00:53:15   I don't wanna have two different code bases

00:53:16   to do similar things.

00:53:17   Can I have the same code in all places?

00:53:19   I can't change the code in the browser,

00:53:20   therefore I kinda only have to change it.

00:53:21   It's a tragedy is what it is.

00:53:23   (laughing)

00:53:25   It's just, it's like an infection that's just leaking out.

00:53:27   You know, I have never played Pandemic,

00:53:29   but I imagine this is what the game board looks like.

00:53:31   (laughing)

00:53:32   Board game reference for Marco.

00:53:34   - I have Pandemic, thank you.

00:53:36   - I'm sure you do.

00:53:37   I'm waiting for next year's big web framework thing to be VBScript.

00:53:42   Oh, God, no.

00:53:44   Just no.

00:53:45   Anyway, so with Swift 2, we're going to get Swift for Linux.

00:53:49   And the other thing that was interesting about Swift 2, and this seems to be kind of the

00:53:55   darling WWDC talk of this year, more so than I can recall from previous years, everyone

00:54:02   seems to be consistently pointing to protocol-oriented programming in Swift, is that correct?

00:54:09   Before I take a big dump all over this protocol extensions, I wanted to say one thing about

00:54:15   Swift for Linux. We did talk about open sourcing Swift in the previous show, because that was

00:54:20   in the keynote. The reason I put it in there is what we didn't talk about is what you just

00:54:22   mentioned, that Apple said, "Hey, we're open sourcing it, blah, blah, blah." And open source,

00:54:28   the standard library and Swift will be available for iOS, OS X, and also Linux.

00:54:34   The word Linux was on a slide in an Apple keynote presentation.

00:54:37   Apple is not, I assume, making Swift for Linux the goodness of their heart.

00:54:44   And so you have to ask, why are they making it?

00:54:46   One potential reason is, if you're going to open source something with the idea of,

00:54:50   you know, we talked about this last show, making Swift viable for a larger community.

00:54:57   can't be confined, it can't be proprietary, that limits, you know, you're not going to

00:55:02   get world domination with Swift if it's just an Apple thing, it has to be everywhere.

00:55:06   And if you just open-sourcing it isn't enough to show that it's everywhere, it helps to

00:55:09   have a place where you can port it to say "see", it actually is portable, it's not just

00:55:15   a bunch of source code that you can't even build anywhere else, Linux is a super popular

00:55:19   platform, Linux is the open-source darling, here is a Linux version of Swift that you

00:55:24   can compile and run on Linux and do Swift things on Linux, both to prove to ourselves

00:55:29   that we are correctly open sourcing things, which they haven't yet by the way, this is

00:55:32   like by the end of the year, and to show that it's real, to show that it's not like an empty

00:55:39   political gesture.

00:55:40   The other possibility is that, and depending on how cynical you are, potentially the more

00:55:47   likely possibility is that Apple has a bunch of servers too, and I'm pretty sure Apple

00:55:53   Apple servers aren't a bunch of X-serves at this point.

00:55:57   And I'm sure Apple probably has more Swift code than any other corporation in the world

00:56:02   at this point.

00:56:03   In fact, I pretty much guarantee that.

00:56:04   One would hope.

00:56:05   And they might want to run the same code or the same libraries on both their clients,

00:56:09   which are iOS devices and Macs, and their servers, which presumably again are not X-serves

00:56:14   running OS X.

00:56:15   So if Apple has Linux servers and Apple has devices that, you know, libraries that they

00:56:21   making Swift that can run on these devices it would be nice if they could run Swift on the server

00:56:25   because they actually happen to have servers. So I don't know the lineage of Swift for Linux if it

00:56:30   was always a thing inside Apple or if it came out of the open source effort, but I think the reason

00:56:34   Apple has Swift for Linux is for their own use. And that's not why they're open sourcing. Open

00:56:41   sourcing again is, you know, because they want the language to be bigger than just one company, but

00:56:45   Swift for Linux being a thing really makes me think that they want to run, or at least want

00:56:51   to experiment with.

00:56:52   Maybe it's not going to be a thing.

00:56:53   Maybe it won't work out or whatever.

00:56:54   But at the very least, it's something

00:56:56   they want to try internally.

00:56:57   And it makes perfect sense for them,

00:56:59   because when we talk about the web browser,

00:57:01   if you're a Google, it might make sense to run--

00:57:04   well, I don't think they run JavaScript on the server side

00:57:06   either.

00:57:06   Maybe they do.

00:57:07   But anyway, having libraries that

00:57:08   run in everyone's browsers and not having to duplicate

00:57:11   that code on the server side.

00:57:12   And if Apple has a bunch of libraries

00:57:14   that run on everybody's phones that do some operation

00:57:17   or whatever, it would be nice not

00:57:18   to have to duplicate all that code on the server side

00:57:20   you can do it both client and server-side.

00:57:22   So that is my tinfoil hat theory for Swift for Linux.

00:57:26   It is not out of the goodness of Apple's heart.

00:57:28   - Does Apple really ever do anything

00:57:30   out of the goodness of their heart?

00:57:32   - Well, open sourcing is pretty much as close as you can get

00:57:35   because that, you could argue,

00:57:38   and I'm sure they have this argument in Apple,

00:57:39   like, does it really benefit Apple?

00:57:41   It will say, "Oh yeah, we'll have more eyes on Swift

00:57:45   and more people using it."

00:57:46   And if Swift becomes the next really popular language

00:57:49   and it's adopted everywhere, that's good for us because Swift will become better the more

00:57:54   people use it.

00:57:55   All of that is true, but the counterargument is, well, Objective-C technically was not

00:58:00   like Apple proprietary, but really we're the only one using it in interesting, and that

00:58:03   seemed to work out fine for us.

00:58:05   It's not like we suffered by the world not hacking on Objective-C for us, even though

00:58:08   they could have been in theory.

00:58:10   So what's the big deal?

00:58:11   Swift can be proprietary Apple language, we don't care if the world adopts it, we only

00:58:14   care if Apple and Apple developers adopt it, and that's fine.

00:58:19   But open sourcing, all the arguments against that eventually stray into altruism and the

00:58:28   new message at the bottom of Apple's press releases.

00:58:31   Did you guys read that?

00:58:33   No.

00:58:34   Did I read a footer of a press release?

00:58:36   It used to be Apple ignited the personal computer revolution with the Apple II and blah blah

00:58:41   blah blah blah.

00:58:42   Then they took out the Apple II and talked about the Mac and then moved on to iPhone

00:58:44   and iPod.

00:58:45   It's like a paragraph at the bottom of every press release that explains who the heck Apple

00:58:49   is.

00:58:50   And the current version, I believe, starts with the Mac and then says iPhone, iPad, blah,

00:58:53   blah, blah, watch.

00:58:54   I don't know if it says watch.

00:58:55   Anyway, they added a bit that says, "Apple employees are blah, blah, blah and dedicated

00:59:00   to leaving the world better than they found it."

00:59:03   Like it's a Tim Cook-ism that is now added to the little paragraph.

00:59:06   Leaving the world better than we found it.

00:59:08   That's altruism.

00:59:09   Like it's not making the most money possible and increasing value for our shareholders.

00:59:14   the world better than we found it. That's all the diversity stuff, the renewable energy

00:59:19   stuff, and maybe throw open sourcing Swift in there. So I'm not too cynical to believe

00:59:24   that that wording change and that attitude, because you see it. It comes from Tim Cook.

00:59:29   He's putting his stamp on the corporation, and it's a stamp that I like.

00:59:32   Yeah, I would be interested to see what comes of this. Does it get used at all, or does

00:59:38   it just kind of sit there in obscurity like Apple's other open source efforts mostly have.

00:59:44   And I, you know, you got to figure like as a server side developer, as a web developer,

00:59:50   as a service developer, why would you choose to use this over something else? And you know,

00:59:57   you're right like, you know, code sharing is a big part of it but again like until the

01:00:02   library situation shakes out, you know, yeah, like they said, you know, obviously like the

01:00:06   Swift standard library will be there, but that's, there's not a lot in the Swift standard

01:00:10   library. There's like a lot of things that almost every kind of app would need that,

01:00:16   or would need like one of that don't exist there. So that is going to be a problem and

01:00:23   it's going to be a limitation for a long time. So I think like, you know, you look at other

01:00:28   languages that are out there that have more library or framework or community support

01:00:34   behind them. Language, and even languages that are cool and new and modern. If you want

01:00:39   to throw Node in there, you can. I will allow that temporarily. I would also say things

01:00:43   like, you know, Python and Java somewhat, Go, Rust, you know, like the newer ones, like,

01:00:49   you know, they're, I won't even say PHP, but, you know, people know it and there's a lot

01:00:53   there. It is, it's going to be a tough sell for people to use Swift over this almost embarrassment

01:01:03   of riches of other well established good web languages that have tons of libraries and

01:01:08   great frameworks already, a huge community around them, finding bugs before they run

01:01:12   it, before they hit you, documenting things, making tutorials, writing books, like there's

01:01:17   so many languages out there already that have great resources and great support behind them.

01:01:23   I wonder if Swift will be able to get a foothold in that, the way Apple is most likely to operate

01:01:30   and with the limitations it's most likely to have,

01:01:33   especially in the area of libraries.

01:01:34   And that, I think, we'll just have to wait and see.

01:01:37   - Well, someone could always take it and run with it.

01:01:38   Like, it's not just the website.

01:01:40   Someone could use Swift as an alternative to C++

01:01:43   for the new thing they're making.

01:01:44   I mean, I have no idea what Pebble's SDK is like

01:01:46   or what it is, but you know,

01:01:47   like say you're making some small device

01:01:50   and you decide you don't wanna use C++ to make,

01:01:53   you know, you're gonna be the one making the API

01:01:54   in the framework, maybe you wanna use Swift for it.

01:01:56   Like, Rust is, you know, those are the Mozilla guys, right?

01:01:59   They're using that as a better memory safe alternative to C++ to do kind of the same type of job of C++.

01:02:06   It'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.

01:02:24   And Swift that's that's aspirational at this point

01:02:27   It'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

01:02:34   As an alternative to JavaScript, but it is expanding outward and by open sourcing it

01:02:38   You're never gonna be able to expand to fulfill your your you know your aspirational

01:02:42   Target if you don't open source as a prerequisite and so you're right

01:02:47   It'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

01:02:52   except for Apple, at least then some poor Apple developer

01:02:54   is gonna have the ability to see the source code

01:02:56   to the thing that's causing them a problem

01:02:58   and maybe send a patch.

01:02:59   Even if it happens only between a registered

01:03:01   Apple developer and Apple, that's still bad.

01:03:04   How many Apple developers wouldn't kill

01:03:05   to have the source code for AppKit and UIKit

01:03:07   just so they could debug stuff sometimes, right?

01:03:10   So I think there is no downside to open sourcing

01:03:14   other than the resources they're gonna have to spend

01:03:16   to deal with the open sourcing.

01:03:17   But those types, I feel like you can hire people to do that

01:03:21   And it's kind of a fun job and they don't need to be multi-year experts to handle it.

01:03:26   Yeah, the other thing that strikes me is Swift seems to be a language written by a compiler

01:03:35   guy for kind of compiler guys and for those sorts of people that really kind of get off

01:03:40   on the nitty-gritty about a language.

01:03:42   And that's not a bad thing at all, but if there was any audience or any group or any

01:03:48   way to target compiler men and women, then I would imagine that the Linux crowd is the

01:03:55   way to do it.

01:03:56   And so it very well may pique some interest in that circle.

01:04:01   And certainly this is a group that loves having a new JavaScript framework every day.

01:04:07   So who knows?

01:04:08   Maybe somebody will decide, you know what, this is pretty cool and I'm going to build

01:04:10   my Swift framework.

01:04:12   A question I wanted to ask the two of you guys, do you think this is the beginning of

01:04:17   the end of WebObjects.

01:04:18   - Was there a beginning of WebObjects?

01:04:20   - Well, you know what I mean, of Apple's reliance.

01:04:23   - I think we're like into phase 17 of the end of WebObjects.

01:04:28   It's just, it's a really long,

01:04:30   and I don't see a bright future for WebObjects,

01:04:33   but I know Apple has a lot of code written in it.

01:04:36   - Well, that's the thing, that's what I'm driving at is,

01:04:37   you know, yes, I think we can all agree

01:04:39   that they want WebObjects to die in a fire,

01:04:41   but I don't see any particular impetus

01:04:46   or perhaps compulsion for them to get rid of it

01:04:48   other than it being old and not well supported technology.

01:04:52   And if they're going all in on Swift across the corporation,

01:04:56   then maybe that includes, you know,

01:04:58   like the iTunes Music Store, among other things.

01:05:00   - I don't think they're going all in.

01:05:01   I think this is, you know, baby steps here.

01:05:03   But like, I think the problem they have with WebObjects

01:05:04   is all right, what do we replace it with?

01:05:06   And all the choices are things that Apple controls less.

01:05:09   Regardless of how much better you may believe they are

01:05:11   than WebObjects, things that Apple controls less,

01:05:13   and you don't want to rewrite a bunch of working code.

01:05:15   And Apple, unlike Google, is not constantly thinking about how it can improve every aspect

01:05:20   of all its web operations.

01:05:21   Like there are key things that it is concentrating on, and I think with good reason, like hey,

01:05:25   how about CloudKit is a great example.

01:05:26   Let's do CloudKit.

01:05:28   That is a big paid point.

01:05:29   Although people may not like web objects, if they can click through our stores and buy

01:05:33   stuff it's performing fine.

01:05:35   Even if it's like defunct and not really being enhanced and doesn't have a bright future,

01:05:39   it's more important to concentrate on other things.

01:05:42   So maybe long term they can, like, you know, Swift for Linux, they could try it out in

01:05:47   some small application server-side thing and see if it works out.

01:05:52   Like these are very early days.

01:05:54   But yeah, like someone is staring at that WebObjects and going, it's like you don't

01:05:58   want it to end up like COBOL code where the only people who know how to deal with it at

01:06:01   all are 60 years old and really expensive because they don't want to work anymore and

01:06:06   you just let it go too far.

01:06:07   WebObjects is not at that phase yet.

01:06:09   And who knows, someone could resurrect it someday.

01:06:11   You never know, stranger things will happen.

01:06:13   - Well, but that, the talent aspect, I think,

01:06:16   might be a big part of this.

01:06:18   Like, imagine, Apple already seems to have some issues

01:06:22   retaining talent, because the things they do are

01:06:26   increasingly, they have an increasing number

01:06:31   of boring things that have to be done,

01:06:34   and there's so many other things.

01:06:35   Like, if you work at Apple, you probably get an itch

01:06:38   constantly to go make your own app.

01:06:41   I bet that's a big problem they have.

01:06:42   Anyway, so, you know, to help retain talent, I think,

01:06:46   first of all, or to help attract talent in the first place,

01:06:48   if they're gonna grow their cloud services stuff,

01:06:51   which they almost certainly are,

01:06:53   and almost certainly need to,

01:06:55   they need to figure out how do we attract more programmers

01:06:57   who want to work on this stuff.

01:06:59   And if you think about the prospects of a job

01:07:02   where you're writing WebObjects code

01:07:04   as the primary role of your job,

01:07:06   not only are those people harder to find,

01:07:09   but, you know, if you wanna find somebody

01:07:10   who has experience with it before,

01:07:12   but also, you're probably, like, if that's your job,

01:07:15   that's not very interesting or cool to most people,

01:07:18   and that's gonna be, it makes it especially hard

01:07:20   probably to hire young people.

01:07:22   And so if they want to hire more people more easily

01:07:25   to work on their cloud stuff and to have them be

01:07:27   higher quality coders, who wanna stay there longer,

01:07:30   and who are gonna choose that over some other job

01:07:34   at Google or Facebook or whatever,

01:07:37   having it be in a modern, cool language

01:07:39   that everybody wants to write code in,

01:07:41   instead of an old language that has a pretty bad reputation

01:07:45   that is not really useful anywhere else,

01:07:47   that is hard to get experience in,

01:07:49   and is probably not the best language to work in these days

01:07:52   when you are accustomed to more modern things.

01:07:55   I think having Swift on the back end

01:07:57   and having this be available,

01:07:59   that would be enough reason right there,

01:08:02   just for Apple's own recruitment and retainment efforts.

01:08:05   That would be enough reason to do this.

01:08:07   - Yeah, what else is cool these days?

01:08:09   - Our final sponsor this week is Igloo.

01:08:12   Igloo is an intranet you will actually like.

01:08:14   So with Igloo, you can share news,

01:08:17   you can organize your files,

01:08:18   you can coordinate calendars and manage projects

01:08:20   all in one place on your corporate intranet

01:08:23   or your group intranet.

01:08:25   So Igloo is like taking the best of the web

01:08:27   and productivity apps.

01:08:28   They have calendars, they have Twitter-like microblogging,

01:08:31   file sharing, task management,

01:08:32   wikis, document annotations, and more,

01:08:35   all available privately and securely

01:08:37   for your company or group.

01:08:40   igloo intranets are highly functional, stylish,

01:08:42   and easy to use with a widget-based drag and drop interface.

01:08:46   Now their latest upgrade, Viking,

01:08:48   revolves around documents and how you interact with them,

01:08:50   gather feedback, and make changes.

01:08:52   So they have a couple of cool features here.

01:08:53   First of all, you can have basically

01:08:56   read receipts for documents.

01:08:57   You can track who has read critical documents,

01:08:59   critical information, to keep everybody on the same page.

01:09:03   You can do this, for example, to track whether employees

01:09:06   have read it and acknowledged new policies,

01:09:08   signed off on legal agreements,

01:09:09   confirmed completion of training materials,

01:09:11   all sorts of possible professional

01:09:14   and regulatory uses here.

01:09:16   And all this is built on their advanced HTML5 platform.

01:09:20   And this is really advanced.

01:09:21   It's fully responsive, first of all.

01:09:23   So it works great on every device.

01:09:26   Computers, iPhones, Android phones, even Blackberries.

01:09:30   And then, what I think is the coolest part of this is,

01:09:34   they have all this document previewing

01:09:37   and document annotation.

01:09:39   There's no Flash any of that.

01:09:40   It's all this document parsing code,

01:09:42   all this document annotation code, that's all in HTML5.

01:09:46   So you can do annotations, you can view spreadsheets

01:09:49   and stuff like that, you can do all that

01:09:51   just on your phone if you want to,

01:09:53   or just on your computer without having Flash installed,

01:09:55   which is the devil.

01:09:56   So you really don't want Flash.

01:09:59   and the new devices come out, new screen sizes come out,

01:10:01   it just works on there.

01:10:02   It is so great, so advanced.

01:10:04   So if your company has a legacy intranet

01:10:06   that looks like it was built in the 90s,

01:10:08   like most corporate intranets do,

01:10:10   you should definitely give igloo a try.

01:10:12   Now what's even better is that if you have a group

01:10:14   of 10 or fewer people to use it,

01:10:17   it's completely free to use for as long as you want.

01:10:19   So if your company is 10 or fewer people,

01:10:22   or if you wanna use it for like a group project,

01:10:24   or like a side thing, whatever you wanna do,

01:10:28   10 people or fewer, it's free forever.

01:10:30   And then when you get larger than that,

01:10:31   it's very reasonably priced.

01:10:32   So check it out today, sign up for a free trial,

01:10:36   see if it's right for you, igloosoftware.com/atp.

01:10:40   Once again, igloosoftware.com/atp.

01:10:44   Thanks a lot to Igloo for sponsoring our show once again.

01:10:48   - So John, I hear you have thoughts

01:10:49   about protocol extensions.

01:10:52   - Protocol extensions are great,

01:10:54   but the protocol-oriented programming talk,

01:10:56   Like there's always a couple of weird talks at WWDC

01:10:59   that are structured as narratives

01:11:00   or that have a framing device or, you know,

01:11:02   and this was one of them, it's like a single presenter,

01:11:05   the framing device was like a hypothetical discussion

01:11:08   between an old cranky programmer and a young one

01:11:10   and used to demonstrate something.

01:11:12   And the reason I find these interesting,

01:11:14   I was also joking about dumping out,

01:11:15   but I find them interesting because these are,

01:11:18   these talks, all of WWDC, but specifically these talks

01:11:21   about like, I'm going to tell you the way

01:11:25   we think you should use our language to make your programs better are aimed at an audience

01:11:29   that's not me. It's aimed at people who develop iOS and Mac apps. It's aimed at, like, long-time

01:11:35   Objective-C developers. It's aimed at people whose programming culture is very, very different

01:11:39   than mine. And so sometimes that means the message goes past me, and sometimes it means

01:11:44   that, like, they're trying to – the context is practices that I don't have and never had,

01:11:53   and they're trying to persuade me as hard as they can to not do this thing that I think

01:11:56   is crazy and would never do anyway.

01:11:58   Or vice versa, tell me to do something that seems alien to me and then try to convince

01:12:02   me that it's good.

01:12:03   And so Protocol Extensions was trying to show all the sort of traps that you can run into,

01:12:09   not in an explicit way, but like, you're used to doing this in Objective-C, and these problems

01:12:15   are why Objective-C is the way it is.

01:12:17   Like, why are there delegate patterns all over Objective-C?

01:12:20   Well, because inheritance has these problems and so on and so forth.

01:12:22   And a lot of the stuff, this is the one that gets me the most, a lot of the stuff, both

01:12:26   having to do with Swift and Objective-C and everything at WWDC, focuses heavily on types.

01:12:32   And if you use a language that does not have, that has dynamic typing, where you don't worry

01:12:38   about types, you don't worry about matching type signatures, that's not even a thing,

01:12:42   a lot of the stuff that is super important to people who deal with languages with types

01:12:46   is irrelevant.

01:12:47   Like it's one of the things people talked about in the Gang of Four patterns book.

01:12:50   There was an article about it years ago when the patterns book first came out.

01:12:53   Someone had the epiphany after reading the patterns book.

01:12:56   You know what?

01:12:57   A lot of this crap is totally irrelevant to me because I don't use C++ or Java or any

01:13:01   other strongly typed language.

01:13:02   Like a lot of these patterns exist so that you can make your program flexible in this

01:13:05   way, but maintain static type safety everywhere.

01:13:08   And if your language doesn't even have static type safety, you're like, "Well, that pattern

01:13:11   makes no sense.

01:13:12   You know how I do that pattern?

01:13:13   I just do this and I don't have to worry.

01:13:14   It works all the time.

01:13:15   I don't need seven versions of this.

01:13:16   I don't need a concrete and abstract implementation.

01:13:19   I don't need protocol extensions so the types of Mac are up.

01:13:21   All the problems they described

01:13:22   in the protocol extensions thing,

01:13:24   a lot of those just don't exist in languages

01:13:26   like JavaScript where you just don't have to worry

01:13:27   about that, right?

01:13:29   Maybe ES6, that'll be a problem or whatever.

01:13:31   So that's one aspect of it.

01:13:32   And the second one is I'm heartened to see ideas

01:13:36   from the crazy highfalutin mumbo jumbo languages that I use

01:13:39   and even from things from Perl 6 and stuff,

01:13:43   filtering down to the troglodytes who use these languages

01:13:46   with pointers and stuff, or Swift where you have,

01:13:48   you know, unsafe, unmanaged, hose myself by scribbling over my, anyway, the lower level

01:13:55   languages.

01:13:56   And I think the idea that was sort of, from my perspective, the idea that was buried in

01:14:00   the protocol R&D programming language thing was the idea of traits, which I think were

01:14:05   from Smalltalk, roles in Perl tolerance, another, a better managed alternative to sharing code,

01:14:15   interfacing code without screwing with your inheritance hierarchy, without forcing data

01:14:19   to be shared, without doing all that other stuff. So it was a talk that just seemed very alien to me,

01:14:24   but everyone who saw, who was in the correct audience, you know, who was, this talk was meant

01:14:30   for them, seemed to like it and it seemed to open their eyes to the possibility of how they

01:14:34   can program differently in Swift and how Swift attempts to solve problems. The same problems

01:14:41   that Objective-C solved by sort of skirting them, Swift has a different way to take the

01:14:45   same approach. So I hope people watch that session and come away with new ideas about

01:14:50   how they can structure their programs to satisfy all their languages' static type constraints,

01:14:56   and new ways to share functionality and interfaces without inheritance and without

01:15:00   a million delegates everywhere.

01:15:03   [laughs]

01:15:05   Now this is one of those talks that I was in as well,

01:15:08   and I enjoyed it a lot, although the framing, whatever, was a little bit weird.

01:15:14   Krusty, the old programmer, I think was the character they used.

01:15:18   But 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,

01:15:23   because it didn't entirely sink in.

01:15:26   And I think that's partially because I too am not necessarily the right audience,

01:15:30   audience because I don't live and breathe Objective-C every day.

01:15:34   But there were a lot of things, and I've said this about Swift in the past, there's a lot

01:15:37   of things that they talked about that reeked of C#-style implementations of the same idea.

01:15:47   Like protocol extensions smelled a lot like extension methods to me, and I'm sure they're

01:15:51   different in nuanced ways that I'm not considering as I'm talking, but they seem very similar.

01:15:57   And so I think that I'd like to rewatch this and perhaps consider what patterns I can apply

01:16:05   to even my C# code that maybe I can be inspired by from this talk.

01:16:11   But it was very interesting.

01:16:12   And like I said earlier, just about anyone who has seen it has said, "Wow, that was really

01:16:15   cool and you should definitely see it."

01:16:18   And I concur.

01:16:19   So, I don't know, Marco, any thoughts?

01:16:22   You're probably the target audience more than anyone.

01:16:24   Did you see this one?

01:16:25   I didn't do my homework.

01:16:27   Of course.

01:16:28   To be fair, I didn't do it since I got home.

01:16:30   I just happened to be in that talk when we were there.

01:16:32   No, I have also heard from everybody that I have to see this talk, and so it is on my

01:16:36   list of talks to watch, but I have not watched it yet.

01:16:39   Protocol extensions are separate from this protocol-oriented.

01:16:42   The protocol extensions are mostly—people in the chat room are saying extensions are

01:16:46   categories.

01:16:47   Swift has always had extensions.

01:16:49   Protocol extensions allows you to extend protocols, which previously you couldn't do.

01:16:52   If you look at the Swift standard library

01:16:54   and see all the different things they had to do

01:16:59   to make things that are like, well, this is equatable

01:17:02   and sortable and this inherits from that

01:17:04   and this conforms to this, like to try to make

01:17:07   just their basic types of like, you know,

01:17:09   arrays and dictionaries and ints and all the other things

01:17:11   that they want to work with all their map and sort things.

01:17:13   Again, problems don't exist if you don't have types.

01:17:15   It's like, well, how can we have this

01:17:17   that works a generic form of that and that

01:17:19   and trying to get away from all the angle bracket

01:17:22   generic thing that was making Swift look all super ugly.

01:17:25   - Oh good, I hate those.

01:17:26   - Yeah, well, that and like the standard library itself,

01:17:30   because that's probably the biggest source of Swift code

01:17:35   in the world at this point, as far as we know,

01:17:36   is the Swift standard library itself,

01:17:38   because all that stuff, all their hashes and dictionaries

01:17:41   and ints and all, so that's all written in Swift,

01:17:43   that's their standard library, right?

01:17:45   And having map and filter and all those other things

01:17:48   work on all the different types,

01:17:49   and also on your extensions of those types,

01:17:51   and your subcategories of types, and also enums and structs

01:17:54   which can also have methods.

01:17:56   It's really complicated.

01:17:57   And in writing the Swift standard library,

01:17:59   they ran into all of the--

01:18:01   I'm assuming they ran into all the ways

01:18:03   that the language is making things annoying.

01:18:05   I mean, anyone who's done any sort of large object oriented

01:18:08   program has inevitably found themselves in a situation where

01:18:12   either you start wishing for multiple inheritance,

01:18:16   or the flip side, you start using it.

01:18:18   And in both cases, you have regrets.

01:18:20   Right?

01:18:21   You're like, oh, but this needs to be that,

01:18:23   and that needs to be that.

01:18:23   And really, there's no way to arrange this hierarchy of this

01:18:26   so that I can have this-- if I have these multiply inherent,

01:18:28   but I want this, but I need to override that over there,

01:18:30   but this needs to come from over here.

01:18:31   Like, you make a mess, because you don't foresee everything.

01:18:34   You end up making a mess.

01:18:35   That's an anti-pattern that anyone in any object or any

01:18:38   language experience.

01:18:39   And I feel like Apple must have experienced that doing

01:18:41   the standard libraries.

01:18:42   Like, oh, well, we need everything

01:18:44   to be sortable and equatable, and we

01:18:47   need them to be able to be mapped from one thing

01:18:49   to the other.

01:18:50   but we want all the types to match up,

01:18:53   we want people to be able to extend it,

01:18:55   but then to have their extended versions

01:18:56   also work with all the built-in things,

01:18:57   and you end up, it's a really complicated problem.

01:19:00   And protocol extensions give them one more vector

01:19:03   for sharing it, like they'll define these protocols

01:19:05   that don't affect the inheritance hierarchy,

01:19:07   and then you can extend the protocol

01:19:08   so then everything that conforms to the protocol

01:19:10   gets your extension.

01:19:11   It's different than doing a category,

01:19:12   where you're like, oh, now all instances

01:19:13   of NSString have this method.

01:19:14   You can have all instances of things that are equatable

01:19:17   have this new extension, right?

01:19:20   And that is a powerful feature that I think a lot of people

01:19:24   wanted when they saw Swift 1.

01:19:25   And I think the people who probably wanted it the most

01:19:27   were the people writing the Swift standard library.

01:19:28   And I think this probably made their life a lot easier.

01:19:30   And then the protocol-oriented programming is like,

01:19:32   hey, protocols, period.

01:19:33   Like, you can share code by,

01:19:36   instead of just making a series of subclasses

01:19:38   and making a big inheritance hierarchy,

01:19:39   you can have this unit of code,

01:19:41   you can have like a Java interface that has no code,

01:19:43   and that's powerful.

01:19:44   And then you can share those implementations

01:19:49   and override them among any classes.

01:19:51   It's not part of the inheritance hierarchy.

01:19:53   Everything, you can make all your different things

01:19:56   conform to this protocol.

01:19:58   And then when someone extends the protocol,

01:19:59   they've enhanced all the things that,

01:20:01   I keep trying to use Perl parlance.

01:20:02   The Perl parlance, they're roles,

01:20:04   and the classes consume them,

01:20:05   which sounds weird and gross,

01:20:07   but it's nice to have a distinct word for it.

01:20:08   So everybody who consumes this role,

01:20:10   now I guess the advantage,

01:20:11   there are no role extensions in Perl.

01:20:13   And I was thinking like,

01:20:14   "Oh, why don't we have role extensions?"

01:20:15   And then I thought about it for a while,

01:20:17   and I think it's probably because we don't need them,

01:20:19   because you would just, you know,

01:20:21   parls like Ruby, you can do whatever the hell you want.

01:20:22   We stick methods.

01:20:23   We stick methods to any class we want.

01:20:25   We screw with the inheritance,

01:20:26   hard to get runtime, it's the wild west.

01:20:30   But anyway, it's an interesting talk.

01:20:31   - Sounds awesome.

01:20:32   - Yeah, it is pretty awesome.

01:20:35   It's better than Ruby.

01:20:35   Ruby did mixins, which is just like, you know what?

01:20:37   Here's some methods, bam, they're in your class.

01:20:39   Oops, did I overwrite something?

01:20:41   Sorry about that.

01:20:42   Roles, at least, when your class consumes them,

01:20:46   It will tell you at class composition time,

01:20:50   it consumes the roles and it will tell you,

01:20:52   you can't consume those roles.

01:20:53   They conflict in this, this and this, right?

01:20:55   And roles can also make requirements

01:20:56   to the classes that consume them.

01:20:57   You can consume me, but you need to implement

01:20:59   methods X, Y and Z.

01:21:01   Otherwise, and having that happen at class composition time

01:21:04   is way better than the Ruby thing

01:21:05   where you just keep loading Ruby modules

01:21:08   until the integer class has 17 people fighting over

01:21:12   the method that's called whatever inverse or first

01:21:15   or like happy birthday or whatever the hell

01:21:17   people are shoving into, you know,

01:21:19   and they just silently overwrite each other.

01:21:20   And you know, so it's a more formalized system

01:21:22   of non-inheritance-based interface and code sharing.

01:21:27   Anyway, cool stuff.

01:21:28   Swift 2 looks really good.

01:21:29   - Tell you one thing, I'm honestly very glad

01:21:32   I haven't learned Swift yet.

01:21:33   Because like they keep adding these,

01:21:36   first of all they keep changing things

01:21:38   and they keep adding really cool things.

01:21:40   And honestly, like if you have a large body of Swift code,

01:21:45   That, to me, seemed more like a liability at this point.

01:21:49   Even though they have some of the translation tools

01:21:51   and everything, but I would rather come to Swift

01:21:55   with a totally clean mind and no existing code

01:21:59   once it has stabilized a little bit more.

01:22:01   - I was gonna say, I don't think your mind

01:22:02   is entirely clean with all that PHP in there, but--

01:22:04   (laughing)

01:22:05   - You know what I mean, I don't have any existing knowledge

01:22:08   of Swift, really, that's of any use.

01:22:10   I don't have any built, any Swift assumptions

01:22:13   or Swift design habits I've already started getting into.

01:22:17   So when I do start using Swift,

01:22:19   it'll be from a clean slate,

01:22:21   as if that was version 1.0 of the language.

01:22:24   - Well, it's nice to,

01:22:25   I think the people who have used Swift 1

01:22:27   and run into all these problems,

01:22:28   A, they appreciate the Swift 2 features more,

01:22:30   but it's like, oh God, I've been fighting that

01:22:31   for a long time in Swift 1.

01:22:34   It's great to see it in Swift 2.

01:22:35   And B, I think it will help you understand

01:22:37   the features of the language.

01:22:38   If you haven't fought with all the foibles of Swift 1,

01:22:42   it may not be clear why certain features in Swift 2 exist.

01:22:46   So I think experience is still useful,

01:22:49   but what I wanted to get at was the point you brought up

01:22:51   of what is the strategy?

01:22:53   They said this from the very beginning,

01:22:55   the strategy of Swift is they're gonna make Swift,

01:22:58   and they said, and we're gonna change the language

01:23:00   in ways that are just entirely incompatible

01:23:03   with the Swift code you're writing now.

01:23:05   Furthermore, that Swift code that you wrote last year,

01:23:08   that's not even gonna compile anymore.

01:23:10   Like not only is, you know, it's like, oh, okay,

01:23:12   well my app is written in Swift 1.

01:23:13   No, it's not.

01:23:14   If you want to ship your app,

01:23:15   it cannot be written in Swift 1,

01:23:16   'cause Swift 1 will not build in the new version of Xcode.

01:23:19   Their entire strategy at this point anyway is,

01:23:22   we will take your Swift 1 code and convert it to Swift 2.

01:23:25   And that's, they've been saying that from the start.

01:23:27   They don't guarantee source compatibility,

01:23:29   which means their compiler will not compile your Swift 1.

01:23:32   They don't care about your Swift 1.

01:23:33   You gotta convert it to Swift 2, which is very aggressive.

01:23:38   And like, you know, all the work they did

01:23:40   with the compiler infrastructure and Xcode

01:23:42   and the integration between them and the static analyzer

01:23:45   allows them to have a conversion thing

01:23:47   that does this in a sensible way

01:23:49   and does most of the work for people.

01:23:51   It's still kind of annoying though.

01:23:53   But I'm not entirely sure this is a long-term strategy.

01:23:56   Okay, so Swift 1 to Swift 2, Swift 2 to Swift 3.

01:23:59   At a certain point, Swift 16 to Swift 17,

01:24:01   are you really gonna invalidate what Apple would hope

01:24:04   is the millions of lines of Swift 16 code

01:24:06   that are out there, we can change to Swift 17?

01:24:08   No, it's gotta end at some point.

01:24:10   So I don't know what point that is,

01:24:12   but for now, the policy is not only, Marco,

01:24:17   might you have been wasting your time writing

01:24:19   in a language and learning idioms that are gonna change

01:24:21   when the next order in Swift comes out,

01:24:22   but you'd also have the task of converting

01:24:24   all of your Swift 1 code to Swift 2.

01:24:26   Like, it's not even an option

01:24:28   to keep the Swift 1 code around.

01:24:29   And I think that will continue until the language

01:24:34   reaches the point where Apple's like,

01:24:35   all right, this is settling down, now we'll start to,

01:24:37   I hope they'll start to treat it like a regular language

01:24:40   where we don't invalidate your Objective-C code

01:24:42   when Objective-C 2.0 comes out

01:24:44   when they start versioning Objective-C.

01:24:45   We try to encourage you to move to 2.0,

01:24:47   the 64-bit runtime is 2.0 only, blah, blah, blah, blah, blah,

01:24:51   but your old code will keep building for a really long time.

01:24:54   They didn't force you to constantly up-convert all your code

01:24:58   and they kept it backward compatible.

01:24:59   Whereas Swift 1, they changed some of the keywords,

01:25:01   like do became repeat.

01:25:04   they'll change anything they want.

01:25:05   - And now do mean something else.

01:25:07   - Yeah.

01:25:08   - Now it basically means try.

01:25:09   - No, there's try inside the do.

01:25:12   There's a Yoda joke in there somewhere

01:25:13   but I cannot get it out.

01:25:14   (laughing)

01:25:15   - That's a reference to something that's crazy.

01:25:17   - That's Star Trek, right?

01:25:18   - Yes, that's right.

01:25:19   Yeah, next generation.

01:25:20   (laughing)

01:25:22   - This is a thing to watch for

01:25:23   when Apple thinks Swift has finally settled down.

01:25:25   When they stopped doing the thing

01:25:27   that they always said they were gonna do,

01:25:28   they just never said how long they're gonna do it for.

01:25:30   It just seems like something

01:25:31   that is not sustainable long-term.

01:25:33   But certainly for Swift 1, 2, and presumably next year Swift 3, they'll probably keep

01:25:38   it that way.

01:25:39   Maybe 4, maybe 5, maybe 5 it settles down.

01:25:41   But that's something to keep an eye on.

01:25:43   But anyway, I love seeing this aggressive strategy of like not doing the old Microsoft

01:25:48   thing of like, "Well, you can't break people's old apps and their source code has to compile

01:25:52   and work exactly like it always did."

01:25:53   Apple's like, "No, we are racing forward as fast as we can.

01:25:57   You better come along for the ride."

01:25:58   Right, and that's great.

01:25:59   great. I mean, like, there are so many languages that get, you know, kind of unfortunate cruft,

01:26:06   like almost immediately after their launch because they don't do that. And because they

01:26:09   have, you know, developers instantly who are like, "Well, you know, we're not going to

01:26:13   tolerate you breaking the code we wrote for this two-month-old language last, you know,

01:26:18   last month." And Apple's willing to say, "Yes, we'll break it and we'll try to make it easy

01:26:23   on you by having these translation tools, but that's it." That, it's going to end up

01:26:28   being a really good language in all likelihood.

01:26:30   I think even the Swift 2 changes,

01:26:33   the changes they've made since last year, since 1.0,

01:26:37   they did a number of updates over the winter and the spring

01:26:39   and they changed some pretty big things.

01:26:42   And now with the officially named Swift 2,

01:26:46   which seems kind of more like Swift 1.5, but whatever,

01:26:49   with all that, they've made some really big improvements

01:26:54   since 1.0 last year.

01:26:56   And yeah, you're right, it's gonna slow down, that's fine.

01:26:58   And I'm totally fine to jump on when it slows down.

01:27:01   And a lot of people, some of the people in chat

01:27:05   are saying this, I've heard from a lot of people,

01:27:06   like, don't you wanna be part of this process?

01:27:08   Don't you wanna help direct the language with your input

01:27:12   and get used to it now and become an expert in it now?

01:27:16   And the answer to all of those is no, I don't.

01:27:18   Like, I really don't.

01:27:20   First of all, I think there's this division of programmers.

01:27:25   There's people who are really into the tools

01:27:29   for their own sake and the science of the tools

01:27:33   and the design of languages, the design of tools,

01:27:36   like the art behind the language design.

01:27:39   And then there's other people who don't really care

01:27:43   about that and just want to use it,

01:27:44   and they get satisfaction out of the things

01:27:46   they build with it rather than necessarily

01:27:48   the way they build them.

01:27:50   I own the latter.

01:27:51   I do not care about languages really much at all.

01:27:55   That's why I try to learn as few languages as possible

01:27:59   and choose to really deeply master them

01:28:02   rather than exploring tons of languages that come out

01:28:06   and being shallowly familiar with lots of them.

01:28:09   And in some ways that does hurt me.

01:28:11   I think overall, I think I'm making the right decision

01:28:13   for what I'm trying to accomplish,

01:28:15   which is one person trying to write complete apps

01:28:19   and write and maintain complete apps

01:28:21   that do non-trivial things.

01:28:23   I think my way is better for that approach,

01:28:27   but there are so many people who care so much

01:28:31   about the language and how it's designed

01:28:34   and what it can do and how it does it

01:28:36   that they are willing to jump on early

01:28:38   and they are willing to tolerate all the bumps

01:28:41   and the source kit crashes and the changes in the syntax

01:28:45   and the changes in the idioms and things.

01:28:47   They're willing to do that.

01:28:49   That's great.

01:28:50   them to exist, but I don't need to be one of them,

01:28:52   and I'm perfectly fine with that,

01:28:54   and I appreciate what they do,

01:28:55   and they probably think I'm India, but that's fine.

01:28:59   - Yeah, I agree.

01:28:59   I don't care about being a trailblazer anymore,

01:29:03   and you've talked about this a lot, Marco,

01:29:05   just now on Build and Analyze.

01:29:08   Being a trailblazer when it's something that is important,

01:29:11   when money is riding on it, that's just not my cup of tea.

01:29:14   I'd rather use the old and boring technology,

01:29:17   not as old and boring as PHP or Perl,

01:29:19   but old and boring technology that is well proven

01:29:21   and actually works well.

01:29:23   And occasionally I'll fiddle,

01:29:25   like something that's fun and on the side,

01:29:27   like my website for example,

01:29:28   Node is reasonably stable as JavaScript frameworks

01:29:32   that change every 10 seconds go.

01:29:33   - As long as your integers stay small

01:29:34   and you don't need, and you have a lot of memory,

01:29:36   then you're good. - Right, then no problem.

01:29:38   But that's not something that I'm really

01:29:40   making any money off of,

01:29:41   it's just my silly little website.

01:29:43   I don't think I would be as keen on using Node

01:29:47   if this was the sort of thing where money is riding on what I'm doing.

01:29:55   So I'm with you.

01:29:57   I don't get the architecture astronaut like, you know, total…

01:30:01   I don't know.

01:30:03   I don't get off on that like I used to when I was a kid.

01:30:05   It's just not my thing anymore.

01:30:06   >> MATT PORTER-KLEIN: Perl is far from boring, Casey.

01:30:09   It's one thing you can say from Perl.

01:30:11   It's not boring.

01:30:12   I would say the same thing for PHP.

01:30:14   PHP is far from boring.

01:30:15   It's perhaps the most exciting language ever made because it's terrifying.

01:30:19   Every second will sell you the whole Aeron, but you only need the edge.

01:30:23   Oh, God.

01:30:24   All right, I think that wraps it up for this week.

01:30:27   Thanks a lot to our three sponsors this week, Automatic, Squarespace, and Igloo.

01:30:33   And we will see you next week.

01:30:34   Now the show is over.

01:30:37   They didn't even mean to begin.

01:30:39   Because it was accidental.

01:30:41   Accidental.

01:30:42   Oh, it was accidental.

01:30:43   Accidental.

01:30:44   Accidental.

01:30:45   John didn't do any research, Marco and Casey wouldn't let him

01:30:52   'Cause it was accidental, or it was accidental

01:30:57   And you can find the show notes at ATP.fm

01:31:02   And if you're into Twitter, you can follow them

01:31:07   M A R C O A R M

01:31:16   N T Marko R M E N S I R

01:31:20   A C U S A C

01:31:22   R A Q Z A It's accidental

01:31:25   They didn't mean to Accidental

01:31:32   Tech broadcast so long

01:31:36   I think "language wonk" is the phrase you're looking for, not "architecture astronauts."

01:31:41   Yeah, I couldn't think of what it was, thank you.

01:31:43   Well, the architecture astronauts, they're all working on Java and PHP.

01:31:45   Oh, God.

01:31:46   That's true.

01:31:47   PHP got so badly infected by Java people.

01:31:49   It drives me nuts.

01:31:50   Yeah.

01:31:51   But anyway, I am a language wonk.

01:31:52   I like this language stuff.

01:31:54   Anyone who knows about the existence of and loves Perl 6 is definitely a language wonk.

01:31:59   I mean, I don't have a problem with "language wonkery" if such a thing is how you would

01:32:04   describe it.

01:32:05   - Yeah, that's it.

01:32:06   - I enjoy learning about Swift,

01:32:09   but goodness would I never consider using that,

01:32:14   at least right now.

01:32:15   I think you guys hit the nail on the head

01:32:16   that the right time to use Swift

01:32:18   is when the velocity of Swift

01:32:20   kind of calms down a little bit.

01:32:22   Maybe it doesn't stop moving forward or anything,

01:32:24   but it just calms down.

01:32:26   Now is not that time.

01:32:27   - Well, now might be that time, honestly.

01:32:29   - Yeah, I think it's close to that time.

01:32:32   Like, 'cause next year, like, all right,

01:32:33   So we didn't even talk about the error handling,

01:32:35   but anyway, they got all, error handling stuff was,

01:32:37   there was a bunch of things that were obviously missing

01:32:38   from Swift 1, and one of them was how do you deal

01:32:40   with errors, 'cause in-out params and NSError

01:32:43   and all that crap was like, ugly.

01:32:45   It did look, it was, it looked like a, and was,

01:32:48   a thing that existed and fit in with the Objective-C language

01:32:51   and AppKit and all that stuff.

01:32:53   It wasn't a good fit for Swift,

01:32:54   so now you've got the whole don't really call it exceptions

01:32:57   'cause it's not really an exception,

01:32:58   but kind of exception handling.

01:33:00   In Swift 2, that filled a big gap.

01:33:03   Obviously I still want regular expressions.

01:33:05   Maybe just copy-- - Of course.

01:33:07   - Just copy Perl 6 grammars and you'll be done.

01:33:09   You gotta save something for next year.

01:33:11   (laughing)

01:33:12   But yeah, and now people looking at Swift 2,

01:33:15   it's all right, what's left besides

01:33:16   the stuff that I just mentioned?

01:33:17   Now the picture is becoming clear.

01:33:20   And then the final thing that I think you're missing

01:33:22   is all right, who's gonna be the first sucker

01:33:24   to write a Swift-only framework?

01:33:28   or like to use Swift in earnest so that like,

01:33:31   because all the APIs you're calling from Swift

01:33:33   are UI kit, app kit,

01:33:34   things that were written originally in Objective-C

01:33:36   and they've tried so hard to make it

01:33:38   so that you can do things in a Swifty way,

01:33:42   not knowing that there is an NSError parameter

01:33:46   going in there, like that's lots of magic

01:33:48   having to do with bridging those two worlds.

01:33:52   Eventually, you're gonna have to decide what does,

01:33:54   if you were to write a framework now

01:33:56   starting from scratch in Swift, what would that look like?

01:33:58   Right?

01:33:59   We don't know the answer to that,

01:34:00   but that's like the final piece of the puzzle.

01:34:02   And after that, it's just a matter of time.

01:34:04   So Swift 2, Swift 2.5, the dawning of Swift 3,

01:34:09   I think that is probably the sweet spot for,

01:34:12   maybe not for Marco, but I think for most people doing,

01:34:16   you know, if you're not a one-person shop

01:34:17   and you have to like make decisions based on,

01:34:19   like you don't have people like,

01:34:20   oh, this guy can go off and he'll just learn Swift this year

01:34:23   and he'll teach it to the rest of us.

01:34:24   Marco doesn't have that option.

01:34:26   but that's a reasonable time frame.

01:34:28   And if you wanna be on the cutting edge,

01:34:29   or you're young, or you're coming in,

01:34:31   say you're gonna write your very first application

01:34:33   and you're just out of school,

01:34:35   that's the perfect time to learn Swift,

01:34:36   'cause you don't know Objective-C.

01:34:38   There's no point in becoming a Objective-C expert right now.

01:34:41   You might as well just go right into Swift.

01:34:43   So Marco's decisions, as always,

01:34:45   are not necessarily applicable to everyone listening.

01:34:48   - Oh no, and that's like, and somebody asked me on Twitter,

01:34:50   I think two or three days ago,

01:34:52   I'm just starting out, should I learn,

01:34:54   should I start with Swift?

01:34:55   And I said, yeah, probably, because I think,

01:34:58   yeah, if you're starting from scratch right now,

01:35:01   a year ago, I had it much more complicated,

01:35:04   like, well, it depends, maybe.

01:35:05   This year, I'm saying almost certainly,

01:35:09   yes, you should start with Swift.

01:35:11   Like, if you're starting from scratch now, start there.

01:35:14   But if you already are an Adjust of C expert

01:35:18   and you're trying to get a lot of work done quickly,

01:35:21   it's hard to justify making the transition right now,

01:35:24   as opposed to in a year or two.

01:35:26   - I mean, but you should think back to your Go experience.

01:35:29   Like you had the same thing.

01:35:30   It's like, well, is it worth learning a new language?

01:35:32   What are the benefits?

01:35:33   And you have to speculate.

01:35:34   What is going to be the risk reward?

01:35:38   Like what is the expected benefit of me

01:35:40   spending this time to use Go?

01:35:41   Is it really gonna make that much difference

01:35:42   or are I just gonna waste a bunch of time

01:35:43   fighting with language I don't know that well

01:35:45   and end up with something with a bunch of bugs?

01:35:46   And I think the Go experiment worked out pretty well for you

01:35:49   but going in, you don't know for sure.

01:35:51   I think the uncertainty about Swift

01:35:52   when it first came out was, seriously, Apple,

01:35:55   is this a thing, are you really gonna do this?

01:35:56   People didn't really believe,

01:35:58   maybe people who don't have a lot of experience with Apple,

01:36:00   like, no, they're deadly serious, right?

01:36:02   It could still be a disaster,

01:36:03   like there's still room for disaster,

01:36:05   but so far, signs are good

01:36:07   that it's not going to be entirely a disaster,

01:36:09   and Apple seems very dedicated to it.

01:36:11   I don't know if we talked about this in the last show,

01:36:12   but we did in the pre-WWDC,

01:36:15   so hey, do you think we're gonna see Swift

01:36:17   on all the slides, or Objective-C in Swift?

01:36:19   And I think I said I thought it would be a mix.

01:36:22   I think this year's WWDC, Apple tried very hard

01:36:26   to make all of their examples use Swift.

01:36:28   They failed, there were plenty of sessions

01:36:29   with Objective-C in some or all of the examples.

01:36:32   Some of them were exclusively Objective-C,

01:36:34   but you could see the effort.

01:36:36   It was like, wow, I am surprised

01:36:37   at the amount of Swift I'm seeing,

01:36:39   and I'm shocked at how little Objective-C I'm seeing.

01:36:41   Again, Apple can do that.

01:36:42   It's top-down command and control, it's their conference,

01:36:46   but they're clearly signaling their intent.

01:36:49   Swift is the future, you know,

01:36:52   unless something super terrible happens.

01:36:54   - Yeah, in all the sessions I went to,

01:36:56   I only noticed one, and I don't recall which one it was,

01:36:59   that actually had Objective-C in it,

01:37:01   and everything else either had both,

01:37:03   or in more cases than not, only had Swift,

01:37:07   which was relatively surprising to me

01:37:09   that it was that quick, but you're right, John,

01:37:11   that they're pushing it, and they're pushing it hard.

01:37:13   - Yeah, just download all the W3C PDFs

01:37:15   and search them in square brackets.

01:37:17   (laughing)

01:37:18   find out how many sessions I actually had.

01:37:20   What was one of the ones?

01:37:21   Was it Metal or what's new in Sprite Kit or something?

01:37:26   One of the sessions I went to seemed to not have any Swift.

01:37:29   It was just square brackets, square brackets.

01:37:31   It was like going back in time.

01:37:32   You realize how many of the other sessions are just like,

01:37:34   they don't even mention it.

01:37:35   They're just like, oh, and here's this code,

01:37:36   and here's this, and here's this.

01:37:38   It's amazing they've done this.

01:37:39   They made a new language suited for a new API

01:37:41   with totally new idioms,

01:37:42   but still able to call into all the old stuff

01:37:45   with all these conventions

01:37:47   and all this crazy markup they're doing to Objective-C.

01:37:49   Oh, and they added generics to Objective-C

01:37:51   so you could have typed collections,

01:37:52   mostly to benefit Swift so they could tell

01:37:54   that your NS array is full of NS strings

01:37:56   and they don't have to make it full of any object

01:37:58   in the Swift world, right?

01:37:59   But hey, even if you're just in Objective-C, Marco,

01:38:02   you could use the new generics thing if you feel like it.

01:38:04   It's gonna make you feel better about knowing

01:38:06   that you have a homogenous set of objects inside your array

01:38:09   instead of God knows what.

01:38:11   - Yeah, no, when I saw that, I was very happy with that.

01:38:15   I mean, again, like I'm probably gonna start writing

01:38:18   Swift code in the next year or two,

01:38:20   like with majority of my effort.

01:38:23   But, you know, until then, and while I still have

01:38:27   this fairly large Objective-C code base,

01:38:31   that's very good to have.

01:38:33   You know, like I, when Swift came out,

01:38:36   it became pretty clear that like, you know,

01:38:37   like almost every year before that,

01:38:40   they were adding interesting features to Objective-C.

01:38:43   And then when Swift came out last year and they added basically nothing to Objective-C,

01:38:49   the writing seemed like it was on the wall that, well, I guess that's the end of this

01:38:53   language's progress. And, you know, obviously I think we're close to the end of this language's

01:38:59   progress. But I think this is a nice little thing that, okay, well, even though it was

01:39:04   in the service of making Swift interact better with this language, this language still is

01:39:08   improving. And that is nice.

01:39:10   The things they added to Objective-C before you knew Swift existed?

01:39:15   Almost all of those were also in service of Swift, in hindsight, we now realize.

01:39:19   Oh yeah, that's true.

01:39:20   Why does Arc exist?

01:39:22   That's the way memory management is done in Swift instead of garbage collection, or test

01:39:27   beds for things that would be necessary in Swift.

01:39:30   Or even just like if you want to go—we just talked about how do we convert your Swift

01:39:33   1 code to Swift 2 code?

01:39:35   Static analyzer, LVM, I think, a pilot infrastructure, all those things, like, "Boy, this is great,

01:39:38   really enhancing Objective-C, you know, you can draw a line through all those changes

01:39:44   and say, "Hmm, this was all leading to make Swift possible." And if you look at the timeline,

01:39:49   you know, some of it might have been happy accidents, but some of it is clearly intentionally

01:39:54   like, "I'm doing this for Swift," but it's going to be revealed to the world as an Objective-C/compiler

01:40:00   feature. You know, so that's...

01:40:02   Well, keep in mind also that Apple still has the vast majority of their code in Objective-C.

01:40:08   It was not even, I mean we were even hearing like,

01:40:11   not that long ago that their build system

01:40:14   couldn't even include Swift yet,

01:40:16   like their standard build procedure

01:40:18   couldn't even do Swift yet, as of fairly recently.

01:40:21   It probably can now, I assume, but the fact is like,

01:40:24   Apple has probably the largest collection

01:40:27   of Objective-C code in the world,

01:40:29   and they, you know, anything that benefits

01:40:33   Objective-C benefits Apple.

01:40:35   And so all these features, static analyzer,

01:40:40   stuff like that, anything that helps

01:40:42   Objective-C coding get more efficient

01:40:44   and have fewer bugs, they could've just been doing for that.

01:40:48   And I think it is--

01:40:49   - So that's how you sell the features,

01:40:50   because it's like, I have a Skunkworks project

01:40:53   that seven people know about in a new language.

01:40:55   Here's what the new language needs.

01:40:56   It's like, well, okay, how do you sell that?

01:40:59   Well, even if my new language ends up bust,

01:41:01   these are all great things for objectivity,

01:41:03   so we just do them anyway.

01:41:04   It's like, all right, keep going, keep going.

01:41:05   It's just how you strategically pick the things

01:41:08   you're going to enhance and objectively,

01:41:09   hmm, they all seem to,

01:41:11   and they had to get rid of garbage collection,

01:41:12   which by the way, is finally deprecated.

01:41:14   - Oh, is it?

01:41:15   - It wasn't already?

01:41:15   - Not deprecated, removed, as in you can't.

01:41:19   - As in like the runtime doesn't support it anymore?

01:41:21   - I'm pretty sure it either won't run

01:41:23   or you can't build new ones

01:41:24   with the new version of Xcode or both.

01:41:25   But basically it's the end of garbage collection.

01:41:28   The supported life of garbage collection is now

01:41:30   where it's been deprecated for years, right?

01:41:32   - Yeah, what else is going on?

01:41:33   Programming!

01:41:34   More of it?

01:41:38   That's going on?

01:41:39   I'm just saying that was this episode.

01:41:42   Every once in a while we do this.

01:41:44   And we always get angry emails.

01:41:45   And people will have to endure it.

01:41:47   Guess what?

01:41:48   WWDC is a conference for developers and we are all developers even if not all for the

01:41:51   same platform and so it's impossible to soak in a week's worth of sessions about programming

01:41:57   and not talk about programming.

01:41:59   So we did.

01:42:01   (beep)